也许我没有得到明显但我没有得到正确的查询。
每个数据行有多个键值对(重复数据),例如: { “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
所以我试图查询两个具有相应条件的重复(嵌套?)数据行。
我希望我现在能更好地解释它。
答案 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