【问题标题】:How to update an existing row in BigQuery如何更新 BigQuery 中的现有行
【发布时间】:2022-12-06 01:28:44
【问题描述】:
我刚刚开始使用 BQ 及其 Node.js 客户端,对于我的用例,我想根据存储在其中一列中的唯一标识符来插入或更新行,具体取决于它们是否已经存在。
我没有在节点客户端存储库中看到任何有关如何更新行而不是注入的示例。
所以换句话说,我想查询我的表以查看“id”字段是否已经与 x 匹配。如果它存在,我想替换该行,如果不存在,我想注入它。
我将如何做到这一点?
【问题讨论】:
标签:
node.js
google-bigquery
google-api-nodejs-client
【解决方案1】:
我找到了答案here
因此,显然 BigQuery 的设计目的并不像数据库。您不是更新现有行,而是继续将数据附加为新行,然后使用查询通过删除重复项来清理表,如here所述
【解决方案2】:
您还可以将 Bigquery merge 查询与 NodeJs client 一起使用:
MERGE dataset.Inventory T
USING dataset.NewArrivals S
ON T.product = S.product
WHEN MATCHED THEN
UPDATE SET quantity = T.quantity + S.quantity
WHEN NOT MATCHED THEN
INSERT (product, quantity) VALUES(product, quantity)
merge 查询允许更新元素(如果它存在于 Bigquery 中),否则插入它。