- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试从 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)
其中参数变量代表如下:
现在,我的 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
但这主要是由于表目标名称引用不当造成的。第一个错误是最常见的错误。
总的来说,我对此事的问题是:
希望这一切都有意义,感谢您的帮助!
最佳答案
来自您链接的文档:
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/
我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL。此 SQL 脚本将用于多个日期、客户端和 BQ 表目标,因此这需要在我的 BQ API 命令行调用中使用参数(标志 --parameter
是否可以选择每个组中版本最高的记录并将其作为物化 View 存储在bigquery中? 源表 version name value 1 a 100 1 b 200
我们的想法是使用 bq 工具向 R session 提供存储在 BigQuery 系统中的 csv 格式数据。 bq 工具的输出显示数据以及不需要的消息,例如作业状态和更新的警告消息。 是否有任何标志
我有一些高度可分区的数据,我想将其存储在 BigQuery 中,其中每个分区都有自己的表。我的问题是 BQ 是否支持我需要的 table 数量。 使用我的数据集,我每天会创建大约 2,000 个新表。
我正在使用 BQ CLI ( https://cloud.google.com/bigquery/bq-command-line-tool )。 我没有找到如何删除DAY分区数据。 例如,我有一个 D
我正在尝试在 BigQuery 中查询分区的总数并将结果存储在 mysql 表中。我这样做是为了监控目的。 #!/bin/sh query1="bq query --format=csv 'SELEC
我有一个 Python 脚本(如下所示)运行“query.txt”中的查询并将其上传到 google big query。该脚本必须每 5 分钟运行一次。第一次它做对了,但是第二次,它抛出错误“表已经
也许我弄错了:有没有办法为 tabledata.insertAll 命令自动创建目标表?如果是,请指出正确的方向。 如果不是 - 创建所需表格的最佳方法是什么?在启动时检查现有表并通过从 GCS 加载
更新 (2019-02-07):issue现已修复,因此如果您仍然遇到此问题,请尝试 gcloud components update。 在过去几个月的某个时候,我的 bq 工具停止工作了。即使是一个
我们正在为 bq.py 编写包装器并且在处理大于 100k 行的结果集时遇到了一些问题。似乎在过去这工作得很好(我们遇到了与 Google BigQuery Incomplete Query Repl
我正在使用适用于 Excel 的 BigQuery 连接器并收到以下错误消息: “请求失败:错误。您的查询完成时间过长。放弃..” 在浏览器工具中运行查询时,它会在 4 秒内返回。查询返回 ~ 70K
有没有办法在给定的时间范围内使用 bq 命令行工具列出所有作业 ID?我需要做的是遍历所有 Id 并查找是否有任何错误。 我使用 Web 界面来了解作业 ID,然后使用以下命令: bq show -j
我正在使用 Python 客户端库在 BigQuery 表中加载数据。我需要更新这些表中的一些已更改的行。但我不知道如何正确更新它们?我想要一些类似的 UPSERT 函数 - 仅当行不存在时才插入行,
我也尝试使用 bq 命令行自动生成新的每日表格 bq query \ --destination_table= \ --allow_large_results \ --noflatten_
在下表中只有两列(ts 和 transaction_id)和 3 行。我刚刚尝试根据时间戳列创建分区表,但收到错误消息。 create table myfirstdataset.partition_t
在下表中只有两列(ts 和 transaction_id)和 3 行。我刚刚尝试根据时间戳列创建分区表,但收到错误消息。 create table myfirstdataset.partition_t
我有一个查询,它生成要插入到表中的行。查询引用不同项目中的表。项目名称包括连字符(例如 abc-xyz)。当我尝试使用 bq 命令并使用 ` 将项目名称括起来时,我会收到错误,如果不这样做,我会收到错
在考虑使用 bigquery 时,我一直在测试 bq 模块。我有一个项目设置和 api 的授权。当我运行 bq shell 时,我会使用正确的项目名称正确地进入 shell,但是,当我尝试运行 mk
最近我开始在我的公司使用 BigQuery。我们使用 AWS Redshift 数据库,所以我使用 卸载到 S3管道 如 字段分隔符 ,在我用 gsutil 发送到 GCS 之后。 所以我开始加载到
google docs假设使用服务帐户的 JSON key 的路径导出环境变量 GOOGLE_APPLICATION_CREDENTIALS,gcloud 将使用它。我无法让它工作。 我的命令是: G
我是一名优秀的程序员,十分优秀!