将数百个bigquery表合并为一个

时间:2015-08-03 03:53:28

标签: google-bigquery

我有数百个BigQuery表,并希望将它们合二为一。我开始尝试列出我的桌子。我试过bq ls,但它只显示20到50个表。另外,我如何在Bigquery中执行与SELECT * INTO ...类似的操作。

我的应用程序日志有很多表,例如:

  • weblog.2015060500
  • weblog.2015060501
  • weblog.2015060502
  • weblog.2015060601
  • weblog.2015060701
  • weblog.2015060702

1 个答案:

答案 0 :(得分:5)

要实现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

例如,匹配示例weblog数据集

中的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}\")'))"