BigQuery GENERATE_UUID() 和 CTE

JW2*_*JW2 3 database google-bigquery google-cloud-platform

这个行为让我有点惊讶。

当您在 CTE 中生成 uuid(以生成行 id 等)并在将来引用它时,您会发现它发生了变化。似乎generate_uuid()被调用了两次而不是一次。有人知道为什么 BigQuery 会出现这种情况吗?这叫什么?

我用来generate_uuid()创建一个row_id,并发现在我最终的连接中,因此没有发生任何匹配。我发现解决这个问题的最佳方法是从第一个 CTE 创建一个表,将 uuid 固定到位以供将来使用。

仍然好奇更多地了解这背后的原因和原因。

with _first as (

  select generate_uuid() as row_id
  
)
,_second as (

  select * from _first
  
)

select row_id from _first
union all
select row_id from _second
Run Code Online (Sandbox Code Playgroud)

Mik*_*ant 5

很想知道更多关于这背后的原因和内容

这是设计使然:

WITH 子句未实现。将所有查询放在WITH 子句中然后运行UNION ALL 是对WITH 子句的滥用。
如果一个查询出现在多个WITH子句中,it executes in each clause.

您可以在文档中看到 -不要将WITH子句视为准备好的语句