如何用Terraform为指定BigQuery表配置不同字段的日时间分区
解决方案
你可以通过维护分区配置映射结合Terraform的dynamic块来实现仅为特定表添加自定义时间分区的需求,具体实现如下:
1. 定义分区配置映射
在locals中新增一个映射表,明确需要分区的表名及其对应的分区字段,方便后续集中管理:
locals { path = "../../../../../../../../db" gcp_bq_tables = [ "my_table1", "my_table1_daily", "my_table2", "my_table2_daily" ] # 键为表名,值为对应分区字段,仅配置此列表内的表 partition_config = { "my_table1" = "my_ts_column_table1" "my_table2" = "my_last_modified_column_table2" } }
2. 动态生成分区配置
在google_bigquery_table资源中使用dynamic块,根据当前表是否存在于分区配置中,条件性地添加时间分区规则:
resource "google_bigquery_table" "gcp_bq_tables" { for_each = toset(local.gcp_bq_tables) dataset_id = google_bigquery_dataset.gcp_bq_db.dataset_id table_id = each.value schema = file("${local.path}/schema/${each.value}.json") labels = { env = var.env app = var.app } # 仅当当前表在partition_config中有配置时,生成按日分区的配置块 dynamic "time_partitioning" { for_each = contains(keys(local.partition_config), each.value) ? [true] : [] content { type = "DAY" field = local.partition_config[each.value] } } }
逻辑说明
partition_config实现了分区规则的集中管理,后续新增或修改分区表时,只需更新此映射表,无需改动资源定义部分dynamic块通过contains函数判断当前表是否需要分区:匹配成功则生成对应的时间分区配置,不匹配则自动跳过- 固定设置分区类型为
DAY,满足按日划分的需求
内容的提问来源于stack exchange,提问作者Sekhar
相关产品推荐
相关产品推荐

