streaming-data-to-analytics/terraform/bq.tf (86 lines of code) (raw):
resource "google_bigquery_dataset" "raw" {
dataset_id = "ecommerce_raw"
description = "Store raw data ingested through Pub/sub"
location = var.region
labels = local.resource_labels
}
resource "google_bigquery_table" "raw_order_events" {
dataset_id = google_bigquery_dataset.raw.dataset_id
table_id = "order_event"
description = "Store order events streamed received by the Ingest API"
deletion_protection = false
labels = local.resource_labels
time_partitioning {
type = "DAY"
field = "publish_time"
}
schema = <<EOF
[
{
"name": "subscription_name",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "message_id",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "publish_time",
"type": "TIMESTAMP",
"mode": "NULLABLE"
},
{
"name": "data",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "attributes",
"type": "STRING",
"mode": "NULLABLE"
}
]
EOF
}
resource "google_bigquery_table" "raw_unknown" {
dataset_id = google_bigquery_dataset.raw.dataset_id
table_id = "unknown_entity"
description = "Store unknown events received by the Ingest API"
deletion_protection = false
time_partitioning {
type = "DAY"
field = "publish_time"
}
labels = local.resource_labels
schema = <<EOF
[
{
"name": "subscription_name",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "message_id",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "publish_time",
"type": "TIMESTAMP",
"mode": "NULLABLE"
},
{
"name": "data",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "attributes",
"type": "STRING",
"mode": "NULLABLE"
}
]
EOF
}