【问题标题】:Combine hundreds of bigquery tables into one将数百个 bigquery 表合二为一
【发布时间】: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

【问题讨论】:

    标签: google-bigquery


    【解决方案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 是目标的项目编号。用您的数据集和表名替换数据集和表名。

    对于数百个表,您可以创建一个脚本来运行所有命令。

    【讨论】:

      猜你喜欢
      • 2016-02-06
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多