首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BigQuery -从分区表中删除行

BigQuery -从分区表中删除行
EN

Stack Overflow用户
提问于 2017-03-02 17:18:27
回答 4查看 8.1K关注 0票数 7

我在BigQuery上有一个日分区表.当我尝试使用如下查询从表中删除一些行时:

代码语言:javascript
复制
DELETE FROM `MY_DATASET.partitioned_table` WHERE id = 2374180

我得到以下错误:

错误:在分区表上还不支持DML语句。

Google的快速搜索引导我到:https://cloud.google.com/bigquery/docs/loading-data-sql-dml,它还说:“修改分区表的DML语句还不支持”

现在,我们是否可以在从分区表中删除行时使用这个解决方案?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-03-02 18:35:41

在这个阶段,DML有一些已知问题/limitation。

例如:

  • DML语句不能用于修改表中的必需字段。
  • 每个DML语句启动一个隐式事务,这意味着语句所做的更改将在每个成功的DML语句的末尾自动提交。不支持多语句事务。
  • 允许在表上并发运行以下DML语句组合: UPDATE和INSERT 删除并插入 插入和插入 否则,其中一个DML语句将被中止。例如,如果两个UPDATE语句同时对表执行,那么其中只有一个会成功。
  • 最近通过BigQuery流(tabledata.insertall)写入的表不能使用UPDATE或DELETE语句进行修改。要检查表中是否有流缓冲区,请检查名为tables.get的部分的streamingBuffer响应。如果没有,则可以使用UPDATE或DELETE语句修改表。
  • 还不支持修改已分区表的DML语句。

也要注意配额限额

  • 每个表每天最多更新/删除语句: 48
  • 每个项目每天最多更新/删除语句: 500条
  • 每个表每天最多插入语句: 1,000条
  • 每个项目每天最多插入语句: 10,000条

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

票数 5
EN

Stack Overflow用户

发布于 2018-02-21 17:40:31

可以使用命令行bq rm删除分区表中的分区,如下所示:

代码语言:javascript
复制
bq rm 'mydataset.mytable$20160301'
票数 2
EN

Stack Overflow用户

发布于 2017-12-08 12:40:15

我已经完成了,没有临时表,步骤:

1)准备查询,从特定分区中选择应保留的所有行

代码语言:javascript
复制
SELECT * FROM `your_data_set.tablename` WHERE 
_PARTITIONTIME = timestamp('2017-12-07') 
AND condition_to_keep_rows_which_shouldn't_be_deleted = 'condition' 

如果有必要,对其他分区运行此命令。

2)选择目标表作为查询结果,将指向特定分区,需要提供如下表名:

代码语言:javascript
复制
tablename$20171207

3)选中“覆盖表”选项-> it 只覆盖特定的分区

4)运行查询,结果从点分区冗余行将被删除!

//请记住,您可能需要为其他分区运行此命令,其中要删除的行分布在多个分区上

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42561860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档