BigQuery 命令行工具 - 使用查询附加到表

Posted

技术标签:

【中文标题】BigQuery 命令行工具 - 使用查询附加到表【英文标题】:BigQuery command line tool - append to table using query 【发布时间】:2015-06-19 04:52:09 【问题描述】:

是否可以使用 bq 命令行工具将运行查询的结果附加到表中?我看不到可用于指定它的标志,当我运行它时它失败并声明“表已存在”

bq query --allow_large_results --destination_table=project:DATASET.table "SELECT * FROM [project:DATASET.another_table]"

查询操作中的 BigQuery 错误:错误处理作业“”: 已经存在:表项目:DATASET.table

【问题讨论】:

【参考方案1】:

原来 BigQuery 不支持标准的 SQL 习惯用法

 INSERT foo SELECT a,b,c from bar where d>0;

你必须按照他们的方式使用--append_table

但根据@Will 的回答,现在可以了。

原来有bq,有

bq query --append_table ...

bq查询命令的帮助是

$ bq query --help

并且输出在输出的前 25% 中显示了一个 append_table 选项。

Python script for interacting with BigQuery.


USAGE: bq.py [--global_flags] <command> [--command_flags] [args]


query    Execute a query.

         Examples:
         bq query 'select count(*) from publicdata:samples.shakespeare'

         Usage:
         query <sql_query>

         Flags for query:

/home/paul/google-cloud-sdk/platform/bq/bq.py:
  --[no]allow_large_results: Enables larger destination table sizes.
  --[no]append_table: When a destination table is specified, whether or not to
    append.
    (default: 'false')
  --[no]batch: Whether to run the query in batch mode.
    (default: 'false')
  --destination_table: Name of destination table for query results.
    (default: '')
...

您最好使用UNION ALL,而不是将两个表附加在一起,这是sql 的连接版本。

在大查询中,两个表之间的逗号或, 操作如SELECT something from tableA, tableBUNION ALL,而不是JOIN,或者至少这是我最后一次查看。

【讨论】:

【参考方案2】:

以防万一有人最终在 Google 中找到这个问题,BigQuery 自从这篇文章以来已经发展了很多,现在它可以support Standard。

如果您想使用标准版的DML syntax 功能将查询结果附加到表中,您可以执行以下操作:

INSERT dataset.Warehouse (warehouse, state)
SELECT *
FROM UNNEST([('warehouse #1', 'WA'),
      ('warehouse #2', 'CA'),
      ('warehouse #3', 'WA')])

如docs 中所述。

对于命令行工具,它遵循相同的想法,您只需添加标志--use_legacy_sql=False,如下所示:

bq query --use_legacy_sql=False "insert into dataset.table (field1, field2) select field1, field2 from table"

【讨论】:

【参考方案3】:

根据当前文档(2018 年 3 月):https://cloud.google.com/bigquery/docs/loading-data-local#appending_to_or_overwriting_a_table_using_a_local_file

你应该添加:

--noreplace--replace=false

【讨论】:

以上是关于BigQuery 命令行工具 - 使用查询附加到表的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery 命令行工具,用于从文件中读取长查询字符串

BigQuery 命令行工具返回不同的结果

使用云功能将数据加载到大查询表中,它是附加到表中的,我需要它来替换

如何设置 Big Query 表的过期时间?

BQ 命令行工具出错:无法在没有项目 ID 的情况下启动作业

RODBC 错误:SqlSave 无法附加到表