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

时间:2015-06-19 04:52:09

标签: google-bigquery

是否可以使用bq命令行工具将运行查询的结果附加到表中?我无法看到可用于指定此标志的标志,当我运行它时它会失败并且状态"表已经存在"

UIRequiresFullScreen
  

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

3 个答案:

答案 0 :(得分:8)

最初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, tableB操作是UNION ALL,而不是JOIN,或者至少这是我最后一次看着。

答案 1 :(得分:6)

万一有人最终在谷歌发现了这个问题,自从这篇文章以来,BigQuery已经发展了很多,现在它已经support Standard

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

create view THE_BEST
    as
        select top (select count(*) 
                    from (select max(total_price) as MaxPrice 
                          from (select sum(PRICE) as total_price 
                                from COMMAND) COMMAND) COMMAND)*
        from COMMANDLINE
        order by ID_LINE asc

docs中所述。

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

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

答案 2 :(得分:0)

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

你应该添加:

--noreplace--replace=false