【发布时间】:2023-03-19 14:35:01
【问题描述】:
Google BigQuery - bq 命令使您能够创建、加载、查询和更改表。
我没有找到任何关于删除表的文档,很高兴知道如何去做。
我发现 bq 工具更容易实现,而不是为每个命令编写 python 接口。
谢谢。
【问题讨论】:
标签: google-bigquery
Google BigQuery - bq 命令使您能够创建、加载、查询和更改表。
我没有找到任何关于删除表的文档,很高兴知道如何去做。
我发现 bq 工具更容易实现,而不是为每个命令编写 python 接口。
谢谢。
【问题讨论】:
标签: google-bigquery
扩展@james 的出色答案,我只需要删除数据集中的所有表,而不是实际删除数据集本身。因此,grep 部分对我来说是不必要的,但我仍然需要摆脱
table_id
------------------
列出表格时 bq 返回的标题,因为我使用 sed 删除了前两行:
for i in $(bq ls -n 9999 my_dataset | sed "1,2 d" | awk '{print $1}'); do bq rm -f my_dataset.$i; done;
也许有一个bq 选项不返回该标头,但如果有,我不知道。
【讨论】:
有没有办法批量删除多个表? – 主动学习者
在 bash 中,您可以执行以下操作:
for i in $(bq ls -n 9999 my_dataset | grep keyword | awk '{print $1}'); do bq rm -ft my_dataset.$i; done;
解释:
bq ls -n 9999 my_dataset - 在我的数据集中最多列出 9999 个表| grep keyword - 将上一个命令的结果通过管道传输到 grep 中,搜索您的表共有的关键字| awk '{print $1}' - 将前一个命令的结果通过管道传输到 awk 并仅打印第一列do bq rm -ft my_dataset.$i; done; - 从数据集中删除每个表我强烈建议在添加“do bq rm”之前运行命令来列出要删除的表。这样,您可以确保只删除您实际要删除的表。
更新:
参数-ft 现在返回一个错误,应该只是-f 来强制删除,没有提示:
for i in $(bq ls -n 9999 my_dataset | grep keyword | awk '{print $1}'); do bq rm -f my_dataset.$i; done;
【讨论】:
找到了:
bq rm -f -t data_set.table_name
-t 用于表,-f 用于强制,-r 删除命名数据集中的所有表
很棒的工具。
【讨论】:
-r. With -r, remove all tables in the named dataset
bigquery_client = bigquery.Client() #Create a BigQuery service object
dataset_id='Name of your dataset'
table_id='Table to be deleted'
table_ref = bigquery_client.dataset(dataset_id).table(table_id)
bigquery_client.delete_table(table_ref) # API request
print('Table {}:{} deleted.'.format(dataset_id, table_id))
如果数据集也包含表。我们想一次性删除包含表的数据集,命令是:
!bq rm -f -r serene-boulder-203404:Temp1 # It will remove complete data set along with the tables in it
如果您的数据集为空,那么您也可以使用以下命令: 要使用以下命令,请确保您已删除该数据集中的所有表,否则会产生错误(数据集仍在使用中)。
#Now remove an empty dataset using bq command from Python
!bq rm -f dataset_id
print("dataset deleted successfully !!!")
【讨论】:
我使用命令行for loop删除了一个月的表数据,但这取决于你的表命名:
for %d in (01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31) DO bq rm -f -t dataset.tablename_201701%d
【讨论】: