Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google bigquery 如何在BigQuery中比较列和数组?_Google Bigquery - Fatal编程技术网

Google bigquery 如何在BigQuery中比较列和数组?

Google bigquery 如何在BigQuery中比较列和数组?,google-bigquery,Google Bigquery,我在BigQuery中有两个表 表a将值保存在数组中。 表b为每个值都有一行 如果表a中至少有一个值不在同一id的数组中,我希望按id获取表b中的所有值 WITH a as (SELECT 1 as id, ['123', 'abc', '456', 'qaz', 'uqw'] as value UNION ALL SELECT 2, ['123', 'wer', 'thg', '10', '200'] UNION ALL SELECT 3, null), b as (SELECT 1 as i

我在BigQuery中有两个表

a
将值保存在数组中。 表
b
为每个值都有一行 如果表
a
中至少有一个值不在同一id的数组中,我希望按id获取表
b
中的所有值

WITH a as (SELECT 1 as id, ['123', 'abc', '456', 'qaz', 'uqw'] as value
UNION ALL SELECT 2, ['123', 'wer', 'thg', '10', '200']
UNION ALL SELECT 3, null),
b as (SELECT 1 as id, '123' as value
UNION ALL SELECT 1, 'abc'
UNION ALL SELECT 1, '456'
UNION ALL SELECT 1, 'qaz'
UNION ALL SELECT 1, 'uqw'
UNION ALL SELECT 2, '123'
UNION ALL SELECT 2, 'wer'
UNION ALL SELECT 2, '10'
UNION ALL SELECT 3, '200'
UNION ALL SELECT 3, 'thg'
)

最好的方法是什么?

下面是针对BigQuery标准SQL的

#standardSQL
SELECT * EXCEPT(flag)
FROM (
  SELECT b.*, COUNTIF(b.value IS NULL) OVER(PARTITION BY id) flag
  FROM `project.dataset.table_a` a, a.value 
  LEFT JOIN `project.dataset.table_b` b
  USING(id, value)
)
WHERE flag > 0
AND NOT value IS NULL    
如果要应用于问题中的样本数据,则输出为

Row id  value    
1   2   123  
2   2   wer  
3   2   10     
Row id  value    
1   2   123  
2   2   wer  
3   2   10   
4   3   200  
5   3   thg  
如果根据逻辑-id=3也应在输出中,请在下面使用

#standardSQL
SELECT * EXCEPT(flag)
FROM (
  SELECT b.*, COUNTIF(b.value IS NULL) OVER(PARTITION BY id) flag
  FROM `project.dataset.table_a` a LEFT JOIN a.value 
  FULL OUTER JOIN `project.dataset.table_b` b
  USING(id, value)
)
WHERE flag > 0
AND NOT value IS NULL   
在这种情况下,输出是

Row id  value    
1   2   123  
2   2   wer  
3   2   10     
Row id  value    
1   2   123  
2   2   wer  
3   2   10   
4   3   200  
5   3   thg  

预计产量是多少?!显示基于显示的输入数据的示例I在这种情况下,表
b
中ID为2和3的所有行。因为id 1在表
a
中的数组中id 1的值相同,为什么id=3应该在输出中?a中的相应数组为空当表
a
中的值是某个数组且表
b
中的值按相同id为空时,如何返回空值?请使用
和非id为空
而不是
和非值为空
谢谢。我的英语不好。我错过了一个细节。我需要从表
b
中获取所有行,如果相同id的表之间的值有任何差异。我完全回答了您最初的问题。考虑投票和接受。如果您有新问题-请将其作为新问题发布,并提供所有相关详细信息,以便我们进一步提供帮助:o)感谢您的回复