我正在尝试将 shell 命令行参数传递到我在 BigQuery 中执行的 SQL 文件中。我不断收到此错误,但不知道如何解决它:
Unexpected macro at [1:14]
这是我正在执行的 shell 脚本 (
install.sh
):
do
case "${flag}" in
p) project=${OPTARG};;
d) dataset=${OPTARG};;
esac
done
echo $project
echo $dataset
gcloud config set project $project
bq query --flagfile=./test/ddl_table.sql
这是
ddl_table.sql
文件:
CREATE TABLE $dataset.my_table (
metric_sk INT64,
metric_identifier STRING ,
metric_name STRING ,
metric_def STRING ,
metric_type_id INT64
);
这是我用来执行 .sh 文件的命令:
./install.sh -p 'my_project' -d 'my_dataset'
echo
命令反映参数已正确设置,但SQL文件中对$dataset
的引用似乎有问题。第 1 行第 14 列(如错误消息所示)的字符是 $
字符。因此 BigQuery 似乎无法将其识别为参数。我不知道如何解决这个问题。我希望数据集名称由从命令行传入的参数确定。
基于 Google Cloud 的运行参数化查询文档:
参数不能用作标识符、列名、表名或查询的其他部分的替代。
据我了解,您可以在基本 SQL 查询中使用参数,例如 SELECT 语句或条件 WHERE 语句,但不能用于创建表。