Google bigquery 如何在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
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)感谢您的回复