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

Gra*_*ley 4 google-bigquery

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

bq query --allow_large_results --destination_table=project:DATASET.table "SELECT * FROM [project:DATASET.another_table]"
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*aul 9

最初BigQuery不支持标准的SQL习惯用法

 INSERT foo SELECT a,b,c from bar where d>0;
Run Code Online (Sandbox Code Playgroud)

你必须按照自己的方式去做 --append_table

但根据@Will的回答,它现在有效.

最初与bq,有

bq query --append_table ...

bq查询命令的帮助是

$ bq query --help
Run Code Online (Sandbox Code Playgroud)

并且输出在输出的前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: '')
...
Run Code Online (Sandbox Code Playgroud)

不是将两个表附加在一起,而是使用UNION ALLsql的串联版本可能会更好.

在大查询中,,两个表之间的逗号或操作SELECT something from tableA, tableB是a UNION ALL,not a JOIN,或者至少这是我最后一次查看.


Wil*_*uks 6

万一有人最终在谷歌找到了这个问题,自从这篇文章以来,BigQuery已经发展了很多,现在它确实支持标准版.

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

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

正如文档中所述.

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

bq query --use_legacy_sql=False "insert into dataset.table (field1, field2) select field1, field2 from table"
Run Code Online (Sandbox Code Playgroud)