我需要从分区的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表上存在流式缓冲区时,删除数据的正确策略是什么,理想情况下没有停机时间?
答案 0 :(得分:1)
您可以使用数据操作语言DELETE
语句。但请记住以下内容(来自DML docs):
支持使用Data Manipulation Language语句进行修改 分区表数据目前处于测试阶段。
但您可以随时选择过滤掉要删除的记录并将结果写回同一分区。 没有停机时间。成本将与完整单分区扫描的成本相同。
答案 1 :(得分:1)
从此页面Data Manipulation Language
“最近通过流(使用tabledata.insertall方法)写入表的行不能使用UPDATE,DELETE或MERGE语句进行修改。最近的写入通常是最近30分钟内发生的写入。请注意,所有写入通过使用UPDATE,DELETE或MERGE语句,可以修改表中的其他行。“
这意味着您应该限制DML的使用时间,理想情况下,应该有创建日期的列,以便可以使用该OR,或者如果有内置元数据列可以使用,但我不知道该列>