【问题标题】:Google Bigquery BQ command line execute query from a fileGoogle Bigquery BQ 命令行从文件执行查询
【发布时间】:2016-01-30 07:30:22
【问题描述】:

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

bq query "select * from table"

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

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    其他答案似乎已经过时或不必要地脆弱。截至 2019 年,bq query 从标准输入读取,因此您可以将文件重定向到其中:

    bq query < myfile.sql
    

    查询参数是这样传递的:

    bq query --parameter name:type:value < myfile.sql
    

    【讨论】:

    • 这正是我想要的。另外,提醒人们他们可能也想使用--use_legacy_sql=false
    【解决方案2】:

    还有另一种方法。

    试试这个:

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

    例如:

    bq query --flagfile=/home/user/abc.sql
    

    【讨论】:

    • 这是一个很大的提示
    • 显然这不再有效FATAL Flags parsing error: Unknown command line flag 'flagfile'
    • stackoverflow.com/questions/12323326/… 解决了这个问题。如果你在 linux 上,你可以使用 bq query cat my_query.sql
    • @Kuan Yao 这是否记录在公共文档中?我似乎找不到使用 bq query 命令执行 .sql 文件的引用
    • 之所以有效,是因为--flagfile 尝试提取任何看起来像标志的内容,并将其余部分传递给bq 的标准输入。我认为这不会改变,但它有点奇怪。为什么不直接通过管道输入来自文件的输入呢? bq query --use_legacy_sql=false &lt; my_query.sql
    【解决方案3】:

    您可以使用一点 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 提示符。

    【讨论】:

    • 有没有办法传递参数值来替换查询字符串中的变量名?
    【解决方案4】:

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

    bq query `cat my_query.sql`
    

    【讨论】:

    • 这是否记录在公共文档中?我似乎找不到使用 bq query 命令执行 .sql 文件的引用
    【解决方案5】:

    如果您使用的是标准 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;
    

    【讨论】:

      【解决方案6】:
      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\`"
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关 why 和/或 如何 此代码回答问题的附加上下文可提高其长期价值.
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多