【发布时间】:2015-07-27 11:33:39
【问题描述】:
我无法通过 php 通过大查询 api 进行任何更新或删除操作。有什么技巧可以完成这个任务。
【问题讨论】:
标签: google-bigquery
我无法通过 php 通过大查询 api 进行任何更新或删除操作。有什么技巧可以完成这个任务。
【问题讨论】:
标签: google-bigquery
2016 年 8 月:BigQuery 支持 UPDATE 和 DELETE :)
Does BigQuery support UPDATE, DELETE, and INSERT (SQL DML) statements?
您可以使用 BigQuery 实现 UPDATE 和 DELETE - 这不是原生操作。
要从表中删除行,请在不包含不需要的行的情况下重新实现:
SELECT *
FROM [my.table1]
WHERE NOT id IN (19239,192392139,129391)
(设置为选项“允许大结果”和“将结果写入 my.table1”)
要更新行,您可以执行类似的操作:
SELECT * FROM (
SELECT * FROM [my.table1]
WHERE NOT id IN (SELECT id FROM [my.updated_rows]
), (
SELECT * FROM [my.updated_rows]
)
换句话说:BigQuery 是一个分析型数据库,其中 DELETE 和 UPDATE 不是优化的操作 - 但您可以使用覆盖原始表的单个 SELECT 语句来实现它们。
【讨论】:
不要忘记 BigQuery 是一种WORM 技术(设计上只能附加)。它在我看来,你不知道这件事,因为没有像 UPDATE 或 DELETE 这样的选项。
【讨论】:
正如其他朋友解释的那样,BigQuery 具有仅附加设计。
您应该编写一个 sql 查询来过滤表中所有不需要的行,而不是删除一行;你应该从这个查询的结果中创建一个全新的表。然后就可以删除旧表了。
对于更新,您应该将新的更新行附加到表中,并按照我上面写的说明删除旧行。
【讨论】:
我已经停止设置写入配置,然后可以使用 python 调用在 bigquery 上运行 dml 语句
不要设置以下参数
query_job_config.write_disposition
【讨论】: