【问题标题】:How to write MERGE query using SELECT FROM VALUES in BigQuery?如何在 BigQuery 中使用 SELECT FROM VALUES 编写 MERGE 查询?
【发布时间】:2020-05-25 20:16:48
【问题描述】:

我想使用BigQuery 数据库中的文字值编写MERGE 查询。 我试过这个:https://stackoverflow.com/a/35659674/5659025(SQL Server 版本)但 BigQuery 返回错误:“找不到表值函数”

是否有可能在BigQuery 中实现?如何实现?

【问题讨论】:

  • 您能否详细说明您想在 BigQuery 中做什么?所以我可以帮你写你的查询。此外,根据文档 “MERGE 语句是一个 DML 语句,它可以将 INSERT、UPDATE 和 DELETE 操作组合到一个语句中并以原子方式执行操作。” 链接:cloud.google.com/bigquery/docs/reference/standard-sql/…
  • @AlexandreMoraes 假设我们有一个表,其中包含列“名称”和“值”以及行(“Alex”,10)。我想合并文字值(“Alex”,15)和(“Dmitry”,20)。 db 中的结果应该是:("Alex", 15), ("Dmitry", 20)。在 SQL Server 中,最好的方法是在 db 表和文字值之间使用 MERGE 命令。问题是我不能(或不知道)如何在 BigQuery 中做到这一点
  • 好的,我明白了。因此,merge 函数用于 UPDATE、DELETE 或 INSERT 表中的行。根据您所说的,您似乎想合并两个表中的所有行。如果这是问题,您可以使用 UNION ALL 语句,如下所示:Select Name, Value from table_a UNION ALL Select Name, Value from table_b。这是你要找的吗?
  • 如果符合您的预期,您能给我一个更新吗?
  • @AlexandreMoraes 不,你没有正确理解我。我想将表与文字值(在查询中硬编码的值)合并

标签: sql merge google-bigquery


【解决方案1】:

经过我们在评论部分的讨论,我可以建议您两个选择:

首先,使用INSERT 语句。根据文档:

当您想向表中添加新行时,请使用 INSERT 语句。

因此,您修改了源表中的行。我使用了一个虚拟数据来重现它。我的源数据库是:

在 BigQuery UI 中,语法如下:

insert `source_table` (email, content)
select "ale@gmail.com" as email, "add something" as content

insert `source_table` (email, content)
select "ale@gmail.com" , "add something" 

请注意,我使用了双引号,因为我添加的字段是 String。输出如下:

第二个选项是使用UNION ALL。我想指出,使用此选项,您不会更新或修改源表,而是创建一个添加了新数据的视图。语法如下:

SELECT 'aleee@gmail.com' , "add something 2" UNION ALL
--#if you want to add more rows to your view, you will need to write another 
--#select 'email@gmail.com.br', "something " UNION ALL
SELECT * FROM  `test-proj-261014.sample.foobar`

希望对你有帮助。

【讨论】:

  • 感谢您的回答,但这是完全错误的。主要目标是使用MERGE 语句来实现。第一个选项不起作用,因为它只插入而不插入。您可以批准我的 LinkedIn 请求,如果您有兴趣,我会向您描述一个问题
猜你喜欢
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
相关资源
最近更新 更多