在 BigQuery 脚本中传递参数

维克辛格

我想将参数传递给 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 = "$1"'

当我运行此脚本并传递参数时,我没有收到任何错误,但没有将行附加到表中。而当我将 table_name 指定为 rty 时,该行将附加到表中。我在这里缺少什么?

吉列姆·泽卡文斯

当你运行脚本时,你会得到如下提示:

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 = \"$1\"

如您所见,变量未正确转义,因此没有与WHERE过滤器匹配的表为避免这种情况,您可以将查询括在双引号中,将变量括在单引号中,如下所示:

#!/bin/bash
bq query \
--use_legacy_sql=false \
--destination_table=xyz.abc \
--append \
"select * from xyz.INFORMATION_SCHEMA.VIEWS where table_name='$1'"

INFORMATION_SCHEMA.VIEWS: command not found如果使用反引号,您可能会收到错误消息。您可以使用反斜杠省略或转义它们:

"select * from \`xyz\`.INFORMATION_SCHEMA.VIEWS where table_name='$1'"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章