bigquery 命令行在单个 sql 文件中执行多个查询

Posted

技术标签:

【中文标题】bigquery 命令行在单个 sql 文件中执行多个查询【英文标题】:bigquery command line to execute multiple queries in a single sql file 【发布时间】:2019-07-26 08:49:32 【问题描述】:

有没有一种方法可以使用 bq 命令行在单个 sql 文件中执行多个多行查询?

我尝试了单行查询,成功了,但是当我尝试多行查询时,它返回一个错误。

test_query1.sql
==================
select 1+2;
select 3+4;
==================

command:
for /f "tokens=*" %A in (C://test/test_query1.sql) do bq query --use_legacy_sql=false %A

这会分别运行 2 个查询。

但如果我有这个:

test_query1.sql
==================
select variable
from table1;

select var
from table2;
==================

command:
for /f "tokens=*" %A in (C://test/test_query1.sql) do bq query --use_legacy_sql=false %A

这只会运行“选择变量”然后返回错误。然后它运行“from table1”并返回错误等等。我如何确保它读取整个脚本,直到“;” ?

【问题讨论】:

执行 test_query1 时遇到什么错误? 抱歉第一行会返回成功。但是第 2 和第 3 行返回错误。它将仅处理“select var”并返回此错误:..\Google\Cloud SDK>bq query --use_legacy_sql=false Select var 查询字符串中的错误:错误处理作业 'ds-00-191017:bqjob_r6b1709be6304a11b_0000016c2d8888ca_1': Unrecognized name: var at [1:8] 然后它处理“from table2”并返回相同的错误。 这是可行的,但我不建议将不同的 SQL 语句放在一个 SQL 文件中。将它们分开以便于维护和调试目的。为每个使用/业务案例命名文件并将其置于源代码控制中。此外,请考虑使用 Cloud Build 来执行您的查询。 【参考方案1】:

使用 BigQuery scripting(现在是 Beta 版),您只需使用一个命令即可运行整个 .sql 文件:

test_query1.sql
==================
select variable
from table1;

select var
from table2;
==================
Command:
bq query --use_legacy_sql=false < test_query1.sql

【讨论】:

以上是关于bigquery 命令行在单个 sql 文件中执行多个查询的主要内容,如果未能解决你的问题,请参考以下文章

通过命令行在 Visual Studio 中编译单个独立文件

文件行在执行时被改变

Bigquery 作业 - 连接已关闭

是否可以使用命令行在可执行文件之间切换

如何通过 C 中的命令行在 Xcode 中执行和编译程序以及可执行文件在哪里?

如何在bigquery中以最少的数据库命中执行多个sql