1

我正在尝试使用 Google Workflows 来执行一些自动化的 BigQuery 计划任务。要求是对多个数据集运行查询,如下所示:

    - execute_query_job:
        call: execute_query_job
        args:
          query_text: >-
            SELECT 
            * EXCEPT(row_number)
            FROM (
            SELECT *, ROW_NUMBER() OVER (PARTITION BY uuid) row_number
            FROM
            `project.${database_id}.table`)
            WHERE
            row_number = 1

但是,这不起作用,因为字符串按原样解释并且没有发生插值。${}语法不会跨越多行,并且 ansible 语法也{{ var }}不起作用。

4

1 回答 1

1

尝试以类似的方式将查询更改为单行:

- execute_query_job:
    call: execute_query_job
    args:
      query_text: ${"SELECT * EXCEPT(row_number) FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY uuid) row_number FROM `project."+database_id+".table`) WHERE row_number = 1"}

请注意,根据工作流程的文档

变量可以分配给特定的值或表达式的结果。

如果这不起作用,请注意向BigQuery 的 API jobs.insert方法发出 POST 请求将允许您指定JobConfiguration,您可以在其中更改defaultDataset字段并在每次迭代时为每个不同的数据集更改此值。以下示例展示了如何根据 Workflows 中数组的值进行迭代。

于 2021-02-17T14:01:55.313 回答