【发布时间】:2015-04-10 14:50:07
【问题描述】:
我有一个包含大约 200k 个表的数据集,我正在尝试删除这些表。我一直在使用命令行工具运行bq rm -r -f datasetID,但它在24小时内只删除了大约4%。 (我只能通过登录 Web UI 并查看剩下的表格来猜测数量)。有没有更快的方法来完成这项工作?
【问题讨论】:
标签: google-bigquery
我有一个包含大约 200k 个表的数据集,我正在尝试删除这些表。我一直在使用命令行工具运行bq rm -r -f datasetID,但它在24小时内只删除了大约4%。 (我只能通过登录 Web UI 并查看剩下的表格来猜测数量)。有没有更快的方法来完成这项工作?
【问题讨论】:
标签: google-bigquery
很晚了,但我是这样做的:
首先安装jq 和gnu parallel。将 PROJECT_ID 替换为您的项目 ID。
bq ls --project_id PROJECT_ID --max_results=100000 --format=prettyjson | jq '.[] | .id' | parallel --bar -P 10 bq --project_id PROJECT_ID rm -r -f -d
您可能需要调整 -P 参数的值以获得更好的删除率。
警告:最终会删除项目中的所有表和数据集。您可以使用echo 进行空运行,分析输出,然后最终运行上述命令:
bq ls --project_id PROJECT_ID --max_results=100000 --format=prettyjson | jq '.[] | .id' | parallel --bar -P 10 echo bq --project_id PROJECT_ID rm -r -f -d
在 15 分钟内删除了 9K 数据集中的 100K 表。
【讨论】:
这样做的一种方法是遍历表并单独删除它们(可能并行)。或者更快的方法是在表上设置一个未来很短的过期时间。
这不是一个高度优化的路径,因为我们通常不会让用户想要一次删除那么多表。
【讨论】: