将数百个bigquery表合并为一个

Fec*_*czo 2 google-bigquery

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

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

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

Fec*_*czo 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"
Run Code Online (Sandbox Code Playgroud)

注意:如果表格有公共字段,但它们没有完全排列,则必须列出公共字段而不是*

如果您有特定的表格模式,您还可以在查询中使用通配符 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}\")'))"
Run Code Online (Sandbox Code Playgroud)