无法将数组变量传递给shell中的BigQuery查询

问题描述 投票:0回答:1

我正在尝试从shell脚本运行参数化查询,我需要能够提供参数。

这是我正在尝试运行的命令:

bq --location=US query --use_legacy_sql=False \
--parameter='gender::M' \
--parameter='states:ARRAY<STRING>:["WA", "WI", "WV", "WY"]' \
'SELECT name, sum(number) as count
FROM `bigquery-public-data.usa_names.usa_1910_2013`
WHERE gender = @gender
AND state IN UNNEST(@states)
GROUP BY name
ORDER BY count DESC
LIMIT 10;'

如果你在shell中复制/粘贴,它就可以工作。现在,这就是我想要运行的:

在文件script.sh中

runQuery(){

    states="'$1'"

    bq --location=US query --use_legacy_sql=False --parameter='gender::M' --parameter=$states \
        'SELECT name, sum(number) as count
        FROM `bigquery-public-data.usa_names.usa_1910_2013`
        WHERE gender = @gender
        AND state IN UNNEST(@states)
        GROUP BY name
        ORDER BY count DESC
        LIMIT 10;'
    }

runQuery 'states:ARRAY<STRING>:["WA", "WI", "WV", "WY"]'

但这不起作用。

这是错误日志:

enter image description here

我很确定这与参数有单引号和双引号这一事实有关,在某些时候处理'状态时出现问题:ARRAY:[“WA”,“WI”,“WV”,“WY” “]'但我找不到如何解决这个问题。

提前致谢 !

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

发现错误:

改变了runQuery 'states:ARRAY<STRING>:["WA", "WI", "WV", "WY"]'

runQuery 'states:ARRAY<STRING>:["WA","WI","WV","WY"]'

请注意,从数组中删除了空格。

© www.soinside.com 2019 - 2024. All rights reserved.