gpt4 book ai didi

sql - 谷歌 BQ : Running Parameterized Queries where Parameter Variable is the BQ Table Destination

转载 作者:可可西里 更新时间:2023-11-01 11:51:35 25 4
gpt4 key购买 nike

我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL。此 SQL 脚本将用于多个日期、客户端和 BQ 表目标,因此这需要在我的 BQ API 命令行调用中使用参数(标志 --parameter)。现在,我已点击此链接了解参数化查询:https://cloud.google.com/bigquery/docs/parameterized-queries ,但它对我声明表名的帮助有限。

我的 SQL 脚本名为 Advertiser_Date_Check.sql,如下所示:

#standardSQL
SELECT *
FROM (SELECT *
FROM @variable_table
WHERE CAST(_PARTITIONTIME AS DATE) = @variable_date) as final
WHERE final.Advertiser IN UNNEST(@variable_clients)

其中参数变量代表如下:

  • variable_table:我要调用的 BQ 表目的地
  • variable_date:我想从 BQ 表中提取的日期
  • variable_clients:我想从数据中提取的特定客户的数组列表(从我引用的日期开始)

现在,我的 BQ 数据命令行 (LINUX) 如下

TABLE_NAME=table_name_example
BQ_TABLE=$(echo '`project_id.dataset_id.'$TABLE_NAME'`')
TODAY=$(date +%F)

/bin/bq query --use_legacy_sql=false \
--parameter='variable_table::'$BQ_TABLE'' \
--parameter=variable_date::"$TODAY" \
--parameter='variable_clients:ARRAY<STRING>:["Client_1","Client_2","Client_3"]' \
"`cat /path/to/script/Advertiser_Date_Check.sql`"

@variable_date 和@variable_clients 的参数在过去只有它们时工作得很好。但是,由于我希望在循环中对各种表运行这个精确的 SQL 命令,所以我创建了一个名为 variable_table 的参数。参数化查询必须采用标准 SQL 格式,因此表名约定需要采用以下格式:

`project_id.dataset_id.table_name`

每当我尝试在命令行上运行它时,我通常会收到以下错误:

Error in query string: Error processing job ... : Syntax error: Unexpected "@" at [4:12]

它正在引用参数@variable_table,因此很难处理这是在引用表名。在过去的尝试中,甚至出现了错误:

project_id.dataset_id.table_name: command not found

但这主要是由于表目标名称引用不当造成的。第一个错误是最常见的错误。

总的来说,我对此事的问题是:

  1. 如何在 FROM 子句的参数化查询命令行中引用 BQ 表作为参数(例如我尝试使用 @variable_table 做的)?有可能吗?
  2. 除了我目前使用的方法之外,您是否知道从命令行对多个 BQ 表运行查询的其他方法?

希望这一切都有意义,感谢您的帮助!

最佳答案

来自您链接的文档:

Parameters cannot be used as substitutes for identifiers, column names, table names, or other parts of the query.

不过,我认为在这种情况下可能对您有用的是将表名作为常规 shell 变量(而不是查询参数)执行注入(inject)。您需要确保您信任它的内容,或者您​​正在自己构建字符串以避免 SQL 注入(inject)。一种方法是对表名进行硬编码常量,然后根据用户输入选择将哪个常量插入到查询文本中。

关于sql - 谷歌 BQ : Running Parameterized Queries where Parameter Variable is the BQ Table Destination,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47998766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com