在BigQuery中查询重复的键值字段

时间:2017-08-04 15:59:25

标签: google-bigquery

也许我没有得到明显但我没有得到正确的查询。

每个数据行有多个键值对(重复数据),例如: { “ROW1”: “DATA1”, “ROW2”: “数据2”, “ROW3”:{ “KEY1”: “VALUE1”, “KEY2”: “VALUE2”}, “ROW4”:{ “key1A”:“value1A ”, “key2A”: “value2A”}}

我尝试为row3“key1”设置的所有记录获取“value1”。这与row4相同,所以如果设置了key2A,请给我相应的值。

我希望我能正确描述我的问题。

编辑: 为了更好地理解,这是一个数据行的示例模式:

select BrokerName, sum(BranchRevenue) from ( select * from Insurer where... union all select * from Investments where ...) group by BrokerName

因此{ "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

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

我希望我现在能更好地解释它。

2 个答案:

答案 0 :(得分:0)

我最好的猜测,提供的数据:

#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)

答案 1 :(得分:0)

你可以看一下:

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