У меня есть инструкция DML для выполнения в Bigquery, каждый час, похожая на эту:
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)
Эта инструкция, которую мы пытаемся выполнить, не нуждается в каких-либо преобразованиях, но другие в будущем will.
И поэтому мы подумываем об использовании DataFlow с Apache Beam.
Я пытаюсь выполнить этот оператор MERGE внутри Apache Beam pipe, что-то похожее на this:
pipeline.apply(
"DEPARTMENT - RUN MERGE WITH INSERT AND UPDATE STATEMENTS",
BigQueryIO.readTableRows().fromQuery(MERGE_DEPARTMENT_I_U).usingStandardSql());
Проблема в том, что когда мы запускаем этот код для DataFlow, он не работает.
Мне было интересно, будет ли это лучшим решением для выполнения Bigquery MERGE заявления с использованием Java.
И я хотел, чтобы ваше мнение узнало, можно ли использовать такие инструкции внутри Apache Beam pipe.
Спасибо, ребята!