将数百个 bigquery 表合二为一
Posted
技术标签:
【中文标题】将数百个 bigquery 表合二为一【英文标题】:Combine hundreds of bigquery tables into one 【发布时间】:2015-08-03 03:53:28 【问题描述】:我有数百个 BigQuery 表,想将它们全部合并为一个。我开始尝试列出我拥有的表格。我试过 bq ls,但它只显示 20 - 50 张桌子。另外,我该如何在 Bigquery 中执行类似于 SELECT * INTO ... 的操作。
我的应用程序日志有很多表,例如:
weblog.2015060500 weblog.2015060501 weblog.2015060502 weblog.2015060601 weblog.2015060701 weblog.2015060702【问题讨论】:
【参考方案1】:要实现 SELECT * INTO ... 您可以使用逗号执行 SELECT * FROM 所有表,并按照https://cloud.google.com/bigquery/bq-command-line-tool#createtablequery 指定目标表
例如:
DATASET=[YOUR_DATASET_NAME]
TABLES=$(bq ls --max_results=1000 --format=csv $DATASET | \
grep -v "tableId,Type" | cut -d "," -f 1 | tr "\n" ",")
bq --dataset_id=$DATASET query --destination_table=$DATASET.merged \
"select * from $TABLES"
注意:如果表格有公共字段,但它们没有完全对齐,您必须列出公共字段而不是 *
如果您有特定的表名模式,您还可以在查询中使用通配符 https://cloud.google.com/bigquery/query-reference#tablewildcardfunctions
例如匹配来自示例博客数据集的 201506* 表
DATASET=weblog
PREFIX=201506
bq query --destination_table=$DATASET.merged query "SELECT * FROM
(TABLE_QUERY($DATASET, 'REGEXP_MATCH(table_id, r\"^"$PREFIX"[\d]4\")'))"
【讨论】:
请注意,您可以使用“bq cp --append_table src dst”将表“src”附加到表“dst”,类似于对目标表运行“select *”查询。使用“bq cp”的好处是速度更快,而且免费。【参考方案2】:在 Google Cloud Console 命令行中运行此命令:
bq cp --append_table 1234:dataSetSource.tableSource 5678:dataSetDest.tableDest
其中 1234 是仪表板中源项目的项目编号,5678 是目标的项目编号。用您的数据集和表名替换数据集和表名。
对于数百个表,您可以创建一个脚本来运行所有命令。
【讨论】:
以上是关于将数百个 bigquery 表合二为一的主要内容,如果未能解决你的问题,请参考以下文章
如何不停机将数百个 ZooKeeper 实例迁移到 Kubernetes
超简便!不停机搞定数百个Zookeeper实例到K8S的迁移
sql [BigQuery - Facebook产品目录]查询para obtenerelcatálogodeproductos de Kichink。 #facebook #bigqu