BigQuery脚本中的传递参数

问题描述 投票:0回答: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"'

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

shell google-bigquery google-cloud-shell
1个回答
0
投票

当您运行脚本时,将出现如下提示:

Waiting on <BIGQUERY_JOB_ID> ... (0s) Current status: DONE

您可以通过多种方式检查作业,包括bq工具:

bq show -j --format=prettyjson <BIGQUERY_JOB_ID>

如果您安装了jqsudo 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.TABLES where table_name='$1'"
© www.soinside.com 2019 - 2024. All rights reserved.