使用标准 SQL 从命令行更新 bigquery 会引发太多位置参数

Posted

技术标签:

【中文标题】使用标准 SQL 从命令行更新 bigquery 会引发太多位置参数【英文标题】:updating bigquery from command line using standard SQL raises Too Many Positional Args 【发布时间】:2018-10-06 23:25:22 【问题描述】:

我想做非常简单的 DML 来使用标准 SQL 更新 BigQuery 中的表,但似乎除了我正在更新的表之外,我无法关联更新中的任何其他表。

update dataset.interaction set field = true 
where anotherField in (select field from dataset.anotherTable)

或者

update dataset.interaction i 
inner join dataset.anotherTable o on o.joinField = i.joinField
set field = true;

两个查询都会引发

Too many positional args, still have ['field','=','true'...]

【问题讨论】:

那么您使用的实际bq 命令是什么? 知道了。我在 bq shell 中直接使用更新。我虽然可以将选择直接写入 bq shell,但我可以对 DML 执行相同的操作。谢谢 请提供正确答案,而不是编辑问题:) 【参考方案1】:

解决了。

由于您可以在 bq shell 中直接使用SELECT(没有query),我认为在使用UPDATEDELETE 时我也可以这样做。但事实是,要运行DMLs,您需要使用query,并且在shell 中使用bq query 命令要容易得多。

据我了解,您不能将updateinner join 选项一起使用,只能使用in 子句。

【讨论】:

以上是关于使用标准 SQL 从命令行更新 bigquery 会引发太多位置参数的主要内容,如果未能解决你的问题,请参考以下文章

在 CLI 上使用 bq 从 BigQuery 标准 SQL 连接表中打印出漂亮的值表?

旧版 sql 和标准 sql 之间的 BigQuery 表分区差异

BigQuery 标准 SQL 如何将行转换为列

谷歌 bigquery - 更新 sql?

根据行值填充列 BigQuery 标准 SQL

bigquery 命令行在单个 sql 文件中执行多个查询