2015-06-19 36 views
4

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

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

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

回答

8

最初的BigQuery不支持标准的SQL成语

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

,你不得不这样做他们的w^AY与--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,或者至少这是我最后一次看。

5

万一有人最终发现在谷歌这个问题,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" 
+0

嗨@cpburnz,你们是对的,我没有让自己清楚答案。我只是编辑它以清楚我的标准功能的含义。被接受的答案是“这是一个耻辱bigquery不支持解决它的标准方式”,现在不是这样,所以我决定发布如何使用标准来做到这一点。现在让我知道答案是否合适。 –

+0

感谢发布。我会编辑它。 – Paul