在 BigQuery 中查询重复的键值字段
Posted
技术标签:
【中文标题】在 BigQuery 中查询重复的键值字段【英文标题】:Querying repeated key value fields in BigQuery 【发布时间】:2017-08-04 15:59:25 【问题描述】:也许我没有得到明显的信息,但我没有得到正确的查询。
每个数据行有多个键值对(重复数据),例如: "row1":"data1","row2":"data2","row3":"key1":"value1","key2":"value2","row4":"key1A":"value1A ","key2A":"value2A"
我尝试获取在 row3 中设置了“key1”的所有记录的“value1”。与row4组合相同,所以如果设置了key2A,则给我对应的值。
我希望我正确地描述了我的问题。
编辑: 为了更好地理解,这是一个数据行的示例模式:
"exrow":"Example Data",
"date":"2017-08-07",
"hi": [
"cd":[
"index":1,"value":"car",
"index":2,"value":"boat",
"index":3,"value":"green",
"index":4,"value":"blue"
],
[...]
],
[...]
因此'hi'
和'cd'
是RECORD, REPEATED
。
所以我试图得到的是以下结果行:
Example Data | 2017-08-07 | boat | blue
查询 - 只是为了理解 - 将是:
SELECT
exrow,
date,
(SELECT hi.cd.value WHERE hi.cd.index=2),
(SELECT hi.cd.value WHERE hi.cd.index=4)
FROM
table
所以我试图用相应的条件查询两个重复(嵌套?)的数据行。
我希望我现在解释得更好。
【问题讨论】:
不清楚 - 你的表的架构是什么? 我编辑了我的帖子并试图更好地解释它 您提供的架构很可能不正确,因为 BigQuery 中的 ARRAY 类型不支持Nested Arrays
- cloud.google.com/bigquery/docs/reference/standard-sql/…
【参考方案1】:
根据提供的数据,我的最佳猜测:
#standardSQL
WITH table AS (
SELECT [STRUCT('key1' AS key,2 AS value), ('key2', 3), ('key3', 8)] arr
)
SELECT (SELECT value FROM UNNEST(arr) WHERE key='key2') result
FROM `table`
WHERE EXISTS(SELECT value FROM UNNEST(arr) WHERE key='key3' AND value=8)
【讨论】:
我还不太明白,因此我编辑了我的帖子并试图更好地解释它。 我设法通过结合使用 Joins 和 FLATTEN 来解决我的问题。但你的评论是我走上正轨的原因。谢谢!【参考方案2】:你可以看看下面的一个:
SELECT
address.emailAddress, address.options.changeSource, address.options.type
from addresses.address
where address.options.type="main" or address.options.type="second"
group by address.emailAddress, address.options.changeSource, address.options.type
地址、电子邮件地址和选项是重复字段。
所以我们如何处理重复字段的第一个选项就是“分组依据”。
您可以使用的第二个选项是 FLATTEN。
有关更多信息,我推荐大查询参考 - 非常有用
https://cloud.google.com/bigquery/docs/reference/legacy-sql#flatten
【讨论】:
谢谢,我设法通过结合使用 Joins 和 FLATTEN 解决了我的问题。以上是关于在 BigQuery 中查询重复的键值字段的主要内容,如果未能解决你的问题,请参考以下文章