如何在 BigQuery 中加入 CTE 结果时更新表?

Jim*_*Ott 4 sql google-bigquery

我认为通过这个简化的示例(在 PostgreSQL 中工作)可以很明显地看出我正在尝试做什么。

with a as
(
    select 1 as id, 123.456 as value
)
update 
    mytable 
    set value = coalesce(a1.value, a2.value) 
from 
    a as a1, 
    a as a2 
where 
    a1.id = mytable.id 
or 
    a2.id = mytable.id2
Run Code Online (Sandbox Code Playgroud)

这是一个简化的示例。实际上,“a”表达式非常复杂,我需要在更新表达式中多次加入它。有没有办法在 BigQuery 的一条语句中执行此操作?

现在,我看到的唯一选择是首先在单独的查询中创建“a”作为表,然后执行更新。这可行,但需要按计划频繁运行,因此不是最佳选择。

Mik*_*ant 6

您可以将更新语句转换为以下内容

#standardSQL
UPDATE 
  `project.dataset.mytable` mytable 
  SET value = new_value 
FROM (
  WITH a AS
  (
    SELECT 1 AS id, 123.456 AS value
  )  
  SELECT a1.id a1_id, a2.id a2_id, 
    COALESCE(a1.value, a2.value) new_value
  FROM 
    a AS a1, 
    a AS a2 
)
WHERE 
  a1_id = mytable.id 
OR 
  a2_id = mytable.id2
Run Code Online (Sandbox Code Playgroud)