【问题标题】:Creating BigQuery Views in Terraform在 Terraform 中创建 BigQuery 视图
【发布时间】:2019-07-23 18:22:03
【问题描述】:

我在 BQ 中有一堆基于 Terraform 中的 google_bigquery_table 资源的表。我需要为其中一个表创建一个视图,但是,我不想创建另一个 terraform 资源以避免代码重复。这就是我的资源现在的样子:

resource "google_bigquery_table" "default" {


dataset_id = "${var.dataset_id}"
  table_id   = "${var.table_id}"

  time_partitioning {
    type = "DAY" //Hardcoded because this is the only supported value
    field = "${var.time_partitioning_field}"
  }

  view {
    query = "${var.query}"
    use_legacy_sql = "${var.use_legacy_sql}"
  }

  schema =   "${file(var.schema)}"
}

相关的视图变量是:

variable "query" {
  type = "string"
  default = ""
}

variable "use_legacy_sql" {
  type = "string"
  default = "false"
}

我将查询变量设置为空字符串,因为我不希望我的任何其他表有视图。

最后,这是包含视图的表格模块:

module "myTable-editedView-bigquery-table"{
  source  = "./../../modules/google-bigquery-table"
  version = "0.1"
  schema = "${var.myTable_schema}"

  dataset_id   = "${module.myDataset-bigquery-dataset.dataset_id[0]}"
  table_id     = "${var.myTable_editedView_table_id}"

  query = <<SQL
      SELECT col1 ,  col2, col3, col4, col5
      FROM `myProject.myDataset.myTable`
      SQL

  time_partitioning_field = "${var.time_partitioning_field}"
  is_ready      = "${module.myDataset-bigquery-dataset.is_complete}"
  is_ready      = "${module.myTable-bigquery-table.is_complete}"
}

除了我没有提供查询变量/值之外,我的其他表的格式也类似,因为我不希望它们有视图。

计划似乎进展顺利,但 terraform apply 导致每个现有表都出现错误,声称视图需要查询。我想这是有道理的,因为我为每个表定义了一个查询变量,但我认为它会默认为空字符串而不是创建视图。我应该从这里采取什么方法?

【问题讨论】:

  • 这是一个简单的修复。你解决了吗?

标签: google-bigquery terraform


【解决方案1】:

我认为您只需要一个 dynamic block 以便仅在需要时添加 view 块:

resource "google_bigquery_table" "default" {
  dataset_id = "var.dataset_id
  table_id   = "var.table_id
    
  time_partitioning {
    type = "DAY" //Hardcoded because this is the only supported value
    field = var.time_partitioning_field
  }
  
  dynamic "view" {
    for_each = var.query == null ? [] : [var.query]
    content {
      query = view.value
      use_legacy_sql = var.use_legacy_sql
    }
  }
    
  schema =   file(var.schema)
}

variable "query" {
  type = "string"
  default = null
}

variable "use_legacy_sql" {
  type = "string"
  default = "false"
}

请注意,您也不需要在任何地方都使用"${var.var_name}",这与var.var_name 相同。不过,我认为在早期的 Terraform 版本中情况并非如此。

【讨论】:

    猜你喜欢
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多