BigQuery-联合相关子查询不起作用

时间:2019-05-22 07:38:19

标签: google-bigquery

在联合上运行简单的相关子查询(如下)时,出现错误:

  

不支持引用其他表的相关子查询,除非可以将它们取消相关,例如将它们转换为有效的JOIN。

如果我删除联合,则查询工作正常。没有工会怎么能得到相同的结果?

with data as (


 select * from `bigquery-public-data.samples.shakespeare` 
  union all 
  select * from `bigquery-public-data.samples.shakespeare` 

)

select
   *,
   (select count(*) from data where word = d.word) word_count_2
from `bigquery-public-data.samples.shakespeare` d

2 个答案:

答案 0 :(得分:3)

  

不支持引用其他表的相关子查询,除非可以将它们取消相关,例如将它们转换为有效的JOIN。

作为错误状态,您在WITH对象中的UNION存在问题。

由于我看不到用表本身进行联合的逻辑,一个简单的解决方案是像这样删除UNION

with data as (
 select * from `bigquery-public-data.samples.shakespeare` 
)

select
   *,
   (select count(*) from data where word = d.word) word_count_2
from `bigquery-public-data.samples.shakespeare` d

产生这些结果的

enter image description here

答案 1 :(得分:0)

基于强制BigQuery重新计算联合表的hacky解决方案:

with data as (
 select * from `bigquery-public-data.samples.shakespeare` 
  union all 
  select * from `bigquery-public-data.samples.shakespeare` 

), data_reshuffled as (
 SELECT d.*
 FROM (
   SELECT ANY_VALUE(d) d
   FROM (
     SELECT GENERATE_UUID() uuid, d
     FROM data d
   )
   GROUP BY uuid
 )
)

select
   *,
   (select count(*) from data_reshuffled where word = d.word) word_count_2
from `bigquery-public-data.samples.shakespeare` d

enter image description here