删除不在BigQuery流缓冲区中的行

时间:2018-05-27 17:27:04

标签: google-bigquery

我需要从分区的BigQuery表中删除与给定df = df1.merge(df2, how='left') isna = df['C'].isnull() count_nans =(isna.ne(isna.groupby(df['A']).shift()) & isna).cumsum().astype(str).str.zfill(2) df['C'] = df['C'].fillna('na_' + count_nans) print (df) A B C 0 2 11 abc 1 2 13 cdd 2 2 15 na_01 3 2 19 na_01 4 2 25 na_01 5 2 35 cdd 6 2 41 cdd 7 2 47 cdd 8 2 46 na_02 9 2 51 na_02 10 3 9 cdd 11 3 15 cdd 12 3 17 cdd 13 3 23 cdd 14 3 25 na_03 15 3 29 na_03 16 5 4 na_04 17 5 23 na_04 18 5 28 na_04 条件匹配的行。该表总是有一个流缓冲区,为其添加更多数据。我不关心从正在播放的内容中删除,只关注昨天分区中的历史数据。

在BigQuery表上存在流式缓冲区时,删除数据的正确策略是什么,理想情况下没有停机时间?

2 个答案:

答案 0 :(得分:1)

您可以使用数据操作语言DELETE语句。但请记住以下内容(来自DML docs):

  

支持使用Data Manipulation Language语句进行修改   分区表数据目前处于测试阶段。

但您可以随时选择过滤掉要删除的记录并将结果写回同一分区。 没有停机时间。成本将与完整单分区扫描的成本相同。

答案 1 :(得分:1)

从此页面Data Manipulation Language

“最近通过流(使用tabledata.insertall方法)写入表的行不能使用UPDATE,DELETE或MERGE语句进行修改。最近的写入通常是最近30分钟内发生的写入。请注意,所有写入通过使用UPDATE,DELETE或MERGE语句,可以修改表中的其他行。“

这意味着您应该限制DML的使用时间,理想情况下,应该有创建日期的列,以便可以使用该OR,或者如果有内置元数据列可以使用,但我不知道该列