将数百个 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

将数百个 csv 文件转换为 hdf5 文件

如何使用 nginx 将数百个主机名重定向到其他主机名

超简便!不停机搞定数百个Zookeeper实例到K8S的迁移

BigQuery 中的部分 JSON 架构

sql [BigQuery - Facebook产品目录]查询para obtenerelcatálogodeproductos de Kichink。 #facebook #bigqu