使用Bigquery中的分区删除表

时间:2016-12-27 22:42:10

标签: google-bigquery

我有一个数据集,里面有几个不同的表。对于其中一个表,它有100个分区。我想删除/删除具有特定名称的表的所有分区。

例如,我在一个数据集中有以下内容。到目前为止,我一次只能删除一个分区。反正我是否删除了所有的TableA分区?

tableA_20161220
tableA_20161221
tableA_20161223
tableB_20161220
tableB_20161221
tableB_20161223

3 个答案:

答案 0 :(得分:2)

正如米哈伊尔已经指出的那样,你使用API​​编写了一个脚本。

我们经常使用CLI执行此类任务。这个小片段应该足以让你前进。请小心使用它,因为它执行了强大的力量'删除即无确认:

bq ls --format=csv <DATASET> | awk '{if(NR>1)print}' | awk -F, '{print $1}' | grep 'A' | xargs -n 1 -P 4 -i bq rm -f <DATASET>.{}

答案 1 :(得分:0)

在Web UI中,您一次只能删除一个表。

总体而言,BigQuery tables.delete API一次只接受一个表

使用client of your choicecommand line您可以&#34;脚本&#34;使此过程完全或半自动化以在循环中删除所需的表。

答案 2 :(得分:0)

这是Graham提供的内容的略微修改版本。

bq ls <PROJECT_ID>:<DATASET> | grep "<SHARDED_TABLE_NAME>" | awk '{print $1}' | xargs "-I%" bq rm -f <PROJECT_ID>:<DATASET>."%"

解释此脚本,

1。列出数据集中的所有表

bq ls <PROJECT_ID>:<DATASET>

2。过滤具有分片表的数据集。

grep "<SHARDED_TABLE_NAME>"

3。只打印第一列(数据集中的表)

awk '{print $1}'

4。对于输出中的每个表,执行删除操作

xargs "-I%" bq rm -f <PROJECT_ID>:<DATASET>."%"

有关xargs here的更多信息,以及有关bq命令行here的更多信息

解决问题的方法将是

bq ls <PROJECT_ID>:<DATASET> | grep "tableA" | awk '{print $1}' | xargs "-I%" bq rm -f <PROJECT_ID>:<DATASET>."%"

就像格雷厄姆已经提到的那样,请注意要删除的数据集。

相关问题