【问题标题】:Querying repeated key value fields in BigQuery在 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

所以我试图用相应的条件查询两个重复(嵌套?)的数据行。

我希望我现在解释得更好。

【问题讨论】:

标签: google-bigquery


【解决方案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 解决了​​我的问题。
猜你喜欢
  • 2017-09-25
  • 1970-01-01
  • 2013-07-10
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
相关资源
最近更新 更多