yaml - Google Workflows 上的多行字符串插值
问题描述
我正在尝试使用 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 }}
不起作用。
解决方案
尝试以类似的方式将查询更改为单行:
- 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 中数组的值进行迭代。
推荐阅读
- c++ - 为 std::vector 编写自定义插入函数
- java - 无法解析 Maven 工件;试图从错误的存储库中解析工件
- numpy - 从 3D numpy 数组的每个 2D 切片中获取不同的列
- html - 使用语义 ui react 处理溢出的组件
- reactjs - 用户在 Resium 中绘制多边形以过滤掉不在多边形内的实体
- swift - 时间线上线程的优先级
- docker - 在通过 docker-compose 远程部署之前,如何在本地构建映像,这样我就不必通过 Internet 发送大型构建上下文?
- botframework - 使用 Microsoft Bot Framework 在 MS Teams 中显示图表
- google-app-maker - 根据下拉值从 appmaker 中的 SQL 数据源中选择日期字段
- javascript - js中图片的跨域下载