13

那么任何人都可以就如何更新一组行给出想法吗?

我理解查询-> 新表的概念,然后转储“旧”表并重新命名“新”表,但老实说,这很不礼貌。

我在文档、网络或新想法中也没有看到任何东西会让我相信“更新”声明的出现。

有人想吗?

4

3 回答 3

13

2016 年 9 月 29 日,Google 更新DML,现在我们可以编写标准 SQL,这使我们能够在 BigQuery 数据集中插入、更新和删除行和列。

于 2016-11-02T14:25:56.383 回答
9

[更新此答案已过时]

BigQuery 目前不支持直接更新单个行。您可以追加到表中,也可以截断/覆盖表,但不能在保持表的其余部分不变的情况下对单行应用更新。

您提到的流程(创建新表,替换旧表)是一种合理的方法。如果有帮助,请注意您不需要两个单独的步骤即可将旧表替换为新表。由于 BigQuery 以原子方式应用作业副作用,因此您可以通过将最终复制作业的 writeDisposition 设置为 WRITE_TRUNCATE 来一步替换旧表。例如,您可以执行以下操作:

  query table -> table with WRITE_TRUNCATE

就像更新一样,您应该注意这对旧表具有破坏性。但是,如果您没有更改架构,则可以使用快照装饰器在截断发生之前读取表。

在发生此更新过程时,您可以针对“表”运行查询作业,并且这些作业可以保证看到旧内容或新内容,两者之间没有不一致或错误的状态。

于 2013-09-17T18:07:08.327 回答
1

BigQuery 现在提供了对插入、更新和删除行和列的支持,但仅适用于没有流缓冲区的表。

于 2016-12-03T19:12:43.403 回答