使用Dataform多条件增量更新BigQuery表的配置问题咨询
结论
你最终使用updatePartitionFilter的配置方式是正确的,完全符合Dataform对接BigQuery增量表的规范要求,可以正常实现每日定时增量更新。
错误原因说明
你第一次调整为增量表时触发语法错误的核心原因是SQL最终拼接后出现了两个where关键字:固定的where storeName like "%XXXX%"和增量场景下动态拼接的where timestamp > xxx同时存在,不符合SQL语法规范。
配置正确性说明
updatePartitionFilter是BigQuery增量表的专属配置项,作用是将静态过滤条件下推到引擎层,执行增量更新时会自动只扫描符合过滤条件的分区,既避免了SQL层面出现多个where的语法问题,还能实现分区裁剪,大幅降低增量扫描的数据量、提升执行效率。
无需等次日的验证方法
你可以直接在Dataform控制台对当前脚本执行验证/ Dry Run操作,即可直接预览最终生成的SQL:
- 全量初始化场景(目标表不存在时):生成的SQL不会拼接增量时间过滤条件,会全量拉取符合规则的数据建表
- 增量更新场景(目标表已存在时):生成的SQL只会出现1个
where关键字(动态拼接的增量时间过滤条件),静态门店过滤规则已经通过配置层生效,不会出现语法错误
可选的替代写法
如果你希望将所有过滤逻辑都写在SQL层面,也可以调整为如下写法,和你当前的配置效果完全一致:
config { type: "incremental", bigquery: { partitionBy: "DATE(timestamp)", clusterBy: ["itemName",'StoreName'] } } SELECT DATE(timestamp) as Dates, * from `<mytable in BQ>` where storeName like "%XXXX%" ${when(incremental(), `AND timestamp > (select max(timestamp) from ${self()})`)}
之前你尝试AND拼接未成功大概率是因为没有把固定过滤条件放在公共where子句中,将固定条件前置、增量条件用AND拼接即可正常运行。
内容的提问来源于stack exchange,提问作者Serge de Gosson de Varennes
相关产品推荐
相关产品推荐

