BigQuery - 从分区表中删除行

Kwa*_*ame 6 google-bigquery

我在BigQuery上有一个Day-Partitioned Table.当我尝试使用如下查询从表中删除一些行时:

DELETE FROM `MY_DATASET.partitioned_table` WHERE id = 2374180
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

错误:分区表尚不支持DML语句.

通过Google快速搜索,我可以访问:https://cloud.google.com/bigquery/docs/loading-data-sql-dml,其中还说:"尚不支持修改分区表的DML语句."

那么现在,我们可以使用一种解决方法来删除分区表中的行吗?

Pen*_*m10 5

DML在此阶段存在一些已知问题/限制。

如:

  • DML 语句不能用于修改在其架构中具有 REQUIRED 字段的表。
  • 每个 DML 语句都会启动一个隐式事务,这意味着该语句所做的更改会在每个成功的 DML 语句结束时自动提交。不支持多语句事务。
  • 允许在表上同时运行以下 DML 语句组合: UPDATE 和 INSERT
    DELETE 和 INSERT
    INSERT 和 INSERT
    否则 DML 语句之一将被中止。例如,如果对表同时执行两个 UPDATE 语句,则只有其中一个会成功。
  • 最近通过 BigQuery Streaming (tabledata.insertall) 写入的表无法使用 UPDATE 或 DELETE 语句进行修改。要检查该表是否有流缓冲区,请检查名为 streamingBuffer 的部分的 tables.get 响应。如果不存在,则可以使用 UPDATE 或 DELETE 语句修改该表。
  • 尚不支持修改分区表的 DML 语句。

还要注意配额限制

  • 每个表每天最多 UPDATE/DELETE 语句:48
  • 每个项目每天最多 UPDATE/DELETE 语句:500
  • 每个表每天最多 INSERT 语句:1,000
  • 每个项目每天最多 INSERT 语句:10,000

您可以做的是将整个分区复制到非分区表并在那里执行 DML 语句。然后将临时表写回分区。此外,如果您遇到每个表每天的 DML 更新限制语句,则需要创建该表的副本并在新表​​上运行 DML 以避免该限制。