【发布时间】:2016-01-30 07:30:22
【问题描述】:
我使用bq命令行工具运行查询,例如:
bq query "select * from table"
如果我将查询存储在文件中并从该文件运行查询会怎样?有没有办法做到这一点?
【问题讨论】:
标签: google-bigquery
我使用bq命令行工具运行查询,例如:
bq query "select * from table"
如果我将查询存储在文件中并从该文件运行查询会怎样?有没有办法做到这一点?
【问题讨论】:
标签: google-bigquery
其他答案似乎已经过时或不必要地脆弱。截至 2019 年,bq query 从标准输入读取,因此您可以将文件重定向到其中:
bq query < myfile.sql
查询参数是这样传递的:
bq query --parameter name:type:value < myfile.sql
【讨论】:
--use_legacy_sql=false。
还有另一种方法。
试试这个:
bq query --flagfile=[your file with absolute path]
例如:
bq query --flagfile=/home/user/abc.sql
【讨论】:
FATAL Flags parsing error: Unknown command line flag 'flagfile'
cat my_query.sql
bq query 命令执行 .sql 文件的引用
--flagfile 尝试提取任何看起来像标志的内容,并将其余部分传递给bq 的标准输入。我认为这不会改变,但它有点奇怪。为什么不直接通过管道输入来自文件的输入呢? bq query --use_legacy_sql=false < my_query.sql
您可以使用一点 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 提示符。
【讨论】:
This 线程提供了很好的解决方案
bq query `cat my_query.sql`
【讨论】:
bq query 命令执行 .sql 文件的引用
如果您使用的是标准 sql(不是 Legacy Sql)。
**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\`"
【讨论】: