在 BigQuery 脚本中传递参数
Passing parameter in a BigQuery Script
我想将参数传递给 shell 中的 BigQuery 脚本,这是我编写的脚本示例
#!/bin/bash
bq query --use_legacy_sql=false --destination_table=abc --append 'select * from `xyz.INFORMATION_SCHEMA.VIEWS` union all Select * from `def.VIEWS`) where table_name = ""'
当我 运行 此脚本并传递参数时,我没有收到任何错误,但没有行附加到 table。而当我将 table_name 指定为 rty 时,该行将附加到 table。我在这里错过了什么?
当您 运行 脚本时,您会得到如下提示:
Waiting on <BIGQUERY_JOB_ID> ... (0s) Current status: DONE
您可以通过多种方式检查作业,包括 bq
工具:
bq show -j --format=prettyjson <BIGQUERY_JOB_ID>
如果您安装了 jq
(sudo apt install jq
),您可以通过以下方式获得翻译后的查询:
bq show -j --format=prettyjson <BIGQUERY_JOB_ID> | jq '.configuration.query.query'
这会给你类似的东西:
select * from xyz.INFORMATION_SCHEMA.VIEWS where table_name = \"\"
如您所见,变量未正确转义,因此没有 table 匹配 WHERE
过滤器。为避免这种情况,您可以将查询用双引号括起来,将变量用单引号括起来,如下所示:
#!/bin/bash
bq query \
--use_legacy_sql=false \
--destination_table=xyz.abc \
--append \
"select * from xyz.INFORMATION_SCHEMA.VIEWS where table_name=''"
如果使用反引号,您可能会遇到 INFORMATION_SCHEMA.VIEWS: command not found
错误。您可以使用反斜杠省略或转义它们:
"select * from \`xyz\`.INFORMATION_SCHEMA.VIEWS where table_name=''"
我想将参数传递给 shell 中的 BigQuery 脚本,这是我编写的脚本示例
#!/bin/bash
bq query --use_legacy_sql=false --destination_table=abc --append 'select * from `xyz.INFORMATION_SCHEMA.VIEWS` union all Select * from `def.VIEWS`) where table_name = ""'
当我 运行 此脚本并传递参数时,我没有收到任何错误,但没有行附加到 table。而当我将 table_name 指定为 rty 时,该行将附加到 table。我在这里错过了什么?
当您 运行 脚本时,您会得到如下提示:
Waiting on <BIGQUERY_JOB_ID> ... (0s) Current status: DONE
您可以通过多种方式检查作业,包括 bq
工具:
bq show -j --format=prettyjson <BIGQUERY_JOB_ID>
如果您安装了 jq
(sudo apt install jq
),您可以通过以下方式获得翻译后的查询:
bq show -j --format=prettyjson <BIGQUERY_JOB_ID> | jq '.configuration.query.query'
这会给你类似的东西:
select * from xyz.INFORMATION_SCHEMA.VIEWS where table_name = \"\"
如您所见,变量未正确转义,因此没有 table 匹配 WHERE
过滤器。为避免这种情况,您可以将查询用双引号括起来,将变量用单引号括起来,如下所示:
#!/bin/bash
bq query \
--use_legacy_sql=false \
--destination_table=xyz.abc \
--append \
"select * from xyz.INFORMATION_SCHEMA.VIEWS where table_name=''"
如果使用反引号,您可能会遇到 INFORMATION_SCHEMA.VIEWS: command not found
错误。您可以使用反斜杠省略或转义它们:
"select * from \`xyz\`.INFORMATION_SCHEMA.VIEWS where table_name=''"