我在Bigquery中做了一个DML指令,每隔一小时运行一次,类似于这个指令。
MERGE dataset.DetailedInventory T
USING dataset.Inventory S
ON T.product = S.product
WHEN NOT MATCHED AND quantity < 20 THEN
INSERT(product, quantity, supply_constrained, comments)
VALUES(product, quantity, true, ARRAY<STRUCT<created DATE, comment STRING>>[(DATE('2016-01-01'), 'comment1')])
WHEN NOT MATCHED THEN
INSERT(product, quantity, supply_constrained)
VALUES(product, quantity, false)
我们要执行的这条指令不需要进行任何转换 但未来的其他指令需要进行转换
也正因为如此,我们正在考虑使用DataFlow与Apache Beam。
我是想在Apache Beam管道里面执行这个MERGE语句,类似于这样。
pipeline.apply(
"DEPARTMENT - RUN MERGE WITH INSERT AND UPDATE STATEMENTS",
BigQueryIO.readTableRows().fromQuery(MERGE_DEPARTMENT_I_U).usingStandardSql());
问题是,当我们把这段代码放在DataFlow上运行时,它无法运行。
我想知道这是否是使用Java执行Bigquery MERGE语句的最佳解决方案。
我想知道你们的意见,是否可以在Apache Beam管道内使用这样的指令。
谢谢你们!我有一个DML指令,是为了执行Bigquery MERGE语句而做的。
看起来你是想做CDC--你可以看一下新的Dataflow模板之一,它可以做到 MERGE
疾控中心业务 此处