【发布时间】:2013-09-22 04:50:48
【问题描述】:
那么任何人都可以提供有关如何更新一组行的想法吗?
我理解查询的概念 -> 新表,然后转储“旧”表并重新命名“新”,但老实说这是很牛逼的。
我在文档、网络或新想法中也没有看到任何东西会让我相信“更新”声明的出现。
有人想吗?
【问题讨论】:
-
2016 年更新答案:BigQuery 现在支持INSERT, UPDATE, and DELETE。
标签: google-bigquery
那么任何人都可以提供有关如何更新一组行的想法吗?
我理解查询的概念 -> 新表,然后转储“旧”表并重新命名“新”,但老实说这是很牛逼的。
我在文档、网络或新想法中也没有看到任何东西会让我相信“更新”声明的出现。
有人想吗?
【问题讨论】:
标签: google-bigquery
BigQuery 现已提供对插入、更新和删除行和列的支持,但仅适用于没有流式缓冲区的表。
【讨论】:
insertAll(stream leagacy api) 或通过新的 Write API 流式传输.只要流缓冲区中仍有数据,这些数据就无法更新或删除(BQ 工作人员通常需要 90 分钟才能将这些数据从缓冲区写入 BQ 中的列式存储。
[更新此答案已过时]
BigQuery 目前不支持直接更新单个行。您可以追加到表中,也可以截断/覆盖表,但不能在保持表的其余部分不变的情况下对单行应用更新。
您提到的流程(创建新表,替换旧表)是一种合理的方法。如果有帮助,请注意您不需要两个单独的步骤即可将旧表替换为新表。由于 BigQuery 以原子方式应用作业副作用,因此您可以通过将最终复制作业的 writeDisposition 设置为 WRITE_TRUNCATE 来一步替换旧表。例如,您可以执行以下操作:
query table -> table with WRITE_TRUNCATE
就像更新一样,您应该注意这对旧表具有破坏性。但是,如果您没有更改架构,则可以使用快照装饰器在截断发生之前读取表。
在发生此更新过程时,您可以针对“表”运行查询作业,并且这些作业可以保证看到旧内容或新内容,而两者之间没有不一致或错误的状态。
【讨论】:
update 方法,你能提供任何如何使用它的例子吗? developers.google.com/resources/api-libraries/documentation/…
2016 年 9 月 29 日,Google update 那里有DML,现在我们可以编写标准 SQL,这使我们能够在 BigQuery 数据集中插入、更新和删除行和列。
【讨论】: