Google bigquery Google Bigquery BQ命令行从文件执行查询

Google bigquery Google Bigquery BQ命令行从文件执行查询,google-bigquery,Google Bigquery,我使用bq命令行工具运行查询,例如: bq query "select * from table" 如果我将查询存储在一个文件中并从该文件运行查询,会怎么样?有没有办法做到这一点?您可以使用一点shell魔法从文本文件运行查询: $ echo "SELECT 17" > qq.txt $ bq query "$(cat qq.txt)" Waiting on bqjob_r603d91b7e0435a0f_00000150c56689c6_1 ... (0s) Cu

我使用
bq
命令行工具运行查询,例如:

bq query "select * from table"

如果我将查询存储在一个文件中并从该文件运行查询,会怎么样?有没有办法做到这一点?

您可以使用一点shell魔法从文本文件运行查询:

$ echo "SELECT 17" > qq.txt
$ bq query "$(cat qq.txt)"

Waiting on bqjob_r603d91b7e0435a0f_00000150c56689c6_1 ... (0s) Current status: DONE   
+-----+
| f0_ |
+-----+
|  17 |
+-----+
注意:这适用于任何unix变体(包括mac)。如果您使用的是windows,这应该在powershell下工作,但不是默认的cmd提示符。

还有另一种方法

试试这个:

bq query --flagfile=[your file with absolute path]
例:

线程提供了很好的解决方案

bq query `cat my_query.sql`

其他答案似乎要么过时,要么毫无必要地脆弱。从2019年起,
bq query
从stdin读取,因此您可以将文件重定向到其中:

bq query < myfile.sql
bq查询
查询参数的传递方式如下:

bq query --parameter name:type:value < myfile.sql
bq查询——参数名称:type:value
如果您使用的是标准sql(不是传统sql)

示例:

bq query --use_legacy_sql=False  "$(cat /home/airflow/projects/bql/query/test.sql)"

for parameter
bq query --use_legacy_sql=False  --parameter=country::USA  "$(cat /home/airflow/projects/bql/query/test.sql)"

cat >/home/airflow/projects/bql/query/test.sql
select * from l1_gcb_trxn.account where country=@country;

是否有方法传递参数值以替换查询字符串中的变量名?这是一个巨大的提示。这不再有效
致命标志解析错误:未知命令行标志“flagfile”
解决了此问题。如果你在linux上,你可以使用bq query
cat my_query.sql
@Kuan-Yao这在公共文档中有记录吗?我似乎找不到使用
bq query
命令执行.sql文件的引用,因为
--flagfile
尝试提取任何看起来像标志的内容,并将其余内容传递给
bq
的标准输入。我认为这不会改变,但这是一种奇怪的黑客行为。为什么不直接通过管道从文件中输入呢
bq查询——使用\u legacy\u sql=false
公共文档中有记录吗?我似乎找不到使用
bq query
命令执行.sql文件的引用,而这段代码可能会回答这个问题,提供关于为什么和/或如何回答这个问题的额外上下文,从而提高其长期价值。这正是我所寻找的。另外,提醒人们他们可能想使用
——也要使用\u legacy\u sql=false
**Steps:**

1. Create .sql file (you can you any extension).
2. Put your query in that. Make sure (;) at the end of the query.
3. Go to command line ad execute below commands.
4. If you want add parameter then you have to specify sequentially.
bq query --use_legacy_sql=False  "$(cat /home/airflow/projects/bql/query/test.sql)"

for parameter
bq query --use_legacy_sql=False  --parameter=country::USA  "$(cat /home/airflow/projects/bql/query/test.sql)"

cat >/home/airflow/projects/bql/query/test.sql
select * from l1_gcb_trxn.account where country=@country;
bq query --replace --use_legacy_sql=false --destination_table=syw-analytics:store_ranking.SHC_ENGAGEMENT_RANKING_TEST
"SELECT RED,
        DEC,
        REDEM
from `\syw.abc.xyz\`"