我在运行本应执行参数化查询的 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 作业的查询参数?
找到解决方案了! 在子工作流中添加 queryParameters 字段:
queryParameters:
parameterType: {"type": "DATE"}
parameterValue: {"value": '$${run_dt}'}
name: "run_dt"
我有一个类似的场景,其中我尝试按照如下步骤在工作流程中运行查询,但在 bigquery 作业中它总是失败,因为表名称不正确,因为查询正在传递因为没有应用变量值
; 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