是否可以使用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
最初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,或者至少这是我最后一次查看.
万一有人最终在谷歌找到了这个问题,自从这篇文章以来,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)
| 归档时间: |
|
| 查看次数: |
6263 次 |
| 最近记录: |