如何使用 Terraform 在 Cloud Workflow 中传递 BigQuery 插入作业的查询参数

问题描述 投票:0回答:2

我在运行本应执行参数化查询的 Cloud Workflow 时遇到错误。 Cloud Workflow错误如下:

"message": "在 [1:544] 处找不到查询参数 'run_dt'", “原因”:“无效查询”

包含工作流程的 Terraform 代码如下:

resource "google_workflows_workflow" "workflow_name" {
  name            = "workflow"
  region          = "location"
  description     = "description"
  source_contents = <<-EOF

main:
  params: [input]
  steps:
    - init:
        assign:
          - project_id: ${var.project}
          - location: ${var.region}
          - run_dt: $${map.get(input, "run_dt")}
          
    - runQuery: 
        steps:
          - insert_query:
              call: googleapis.bigquery.v2.jobs.insert
              args:
                projectId: ${var.project}
                body:
                  configuration:
                    query:
                      query: ${replace(templatefile("../../bq-queries/query.sql", { "run_dt" = "input.run_dt" } ), "\n", " ")}
                      destinationTable:
                        projectId: ${var.project}
                        datasetId: "dataset-name"
                        tableId: "table-name"
                      create_disposition: "CREATE_IF_NEEDED"  
                      write_disposition: "WRITE_APPEND"  
                      allowLargeResults: true
                      useLegacySql: false
                      partitioning_field: "dt"
    - the_end:
            return: "SUCCESS"
EOF
}

query.sql 文件中的查询如下所示:

SELECT * FROM `project.dataset.table-name`
WHERE sv.dt=@run_dt

使用上面的代码,Terraform 部署成功,但工作流程失败。

如果我写的“input.run_dt”不带双引号,我会遇到 Terraform 错误:

托管资源“input”“run_dt”尚未在根模块中声明。

如果我将其写为 $${input.run_dt},我会遇到 Terraform 错误:

该语言中不使用该字符。

如果我将其写为 ${input.run_dt},我会遇到 Terraform 错误:

预期表达式开始,但发现无效的表达式标记。

如何使用 Terraform 在 Cloud Workflow 中传递此 BigQuery 作业的查询参数?

google-cloud-platform google-bigquery terraform workflow
2个回答
1
投票

找到解决方案了! 在子工作流中添加 queryParameters 字段:

queryParameters: 
 parameterType: {"type": "DATE"}
 parameterValue: {"value": '$${run_dt}'}
 name: "run_dt"

0
投票

我有一个类似的场景,其中我尝试按照如下步骤在工作流程中运行查询,但在 bigquery 作业中它总是失败,因为表名称不正确,因为查询正在传递因为没有应用变量值

  • 执行_bqraw_to_bqcurated_transform: 尝试: 调用:googleapis.bigquery.v2.jobs.insert 参数: 项目 ID:${args.project_id} 身体: 职位参考: 位置:${args.location} 配置: 询问: 查询:| 开始; 截断表${args.project_id}.${args.dataset_id}.${args.curated_table_name}
    ;                    INSERT INTO 
    ${args.project_id}.${args.dataset_id}.${args.curated_table_name}
     SELECT * FROM
    ${args. project_id}.${args.dataset_id}.${args.raw_table_name}`; 犯罪; useLegacySql:假 结果:bq_transform_job 重试: 谓词:${error_handling} 最大重试次数:5 退避: 初始延迟:10 最大延迟:120 乘数:2 下一个:log_bq_transform_job_id
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.