Shell 在BigQuery脚本中传递参数

Shell 在BigQuery脚本中传递参数,shell,google-bigquery,google-cloud-shell,Shell,Google Bigquery,Google Cloud Shell,我想将参数传递给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"' 当我运行这个脚本并传递参数时,我没有得到任何错误

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

当我运行这个脚本并传递参数时,我没有得到任何错误,但表中没有追加任何行。然而,当我将表_名称指定为rty时,该行被追加到表中。我在这里遗漏了什么?

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

等待。。。0s当前状态:完成 您可以通过多种方式检查作业,包括BQ工具:

bq show-j-format=prettyjson 如果您安装了jq sudo apt install jq,您可以通过以下方式获得翻译后的查询:

bq show-j-format=prettyjson | jq'.configuration.query.query' 这将使您获得类似于:

从xyz.INFORMATION\u SCHEMA.VIEWS中选择*table\u name=\$1\ 正如您所看到的,变量没有正确转义,因此没有表与WHERE过滤器匹配。为了避免这种情况,可以将查询用双引号括起来,将变量用单引号括起来,如下所示:

!/bin/bash bq查询\ -使用\u legacy\u sql=false\ -目的地_表=xyz.abc\ -附加\ 从xyz.INFORMATION\u SCHEMA.VIEWS中选择*,其中表名=“$1” 如果使用反勾号,则可以获取信息\u SCHEMA.VIEWS:command not found error。可以使用反斜杠省略或转义它们:

从\`xyz\`.INFORMATION\'u SCHEMA.VIEWS中选择*表名称='$1'
当我用双引号更新查询时,参数在查询中传递,但我得到另一个错误。如果说INFORMATION_SCHEMA.VIEWS:命令不是foundAh,那么这种情况的发生是因为返回标记。我用一种可能的方法编辑了答案。