2017-08-04 54 views
0

也許我不明顯,但我沒有得到正確的查詢。例如: {「row1」:「data1」,「row2」:「data2」,「row3」:{「key1」:「value1」); 「,」key2「:」value2「},」row4「:{」key1A「:」value1A「,」key2A「:」value2A「}}查詢BigQuery中的重複鍵值字段

我嘗試獲取」value1「 row3「key1」已設置。與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

所以我想查詢兩個重複的(嵌套?)數據行與相應的條件。

我希望我現在解釋得更好。

+1

不清楚 - 什麼是你的表的架構? –

+0

我編輯了我的帖子,並試圖更好地解釋它 – kRuzeFiX

+0

您提供的模式很可能不正確,因爲BigQuery中ARRAY類型不支持'Nested Arrays' - https://cloud.google.com/bigquery/docs/reference/standard -sql/data-types#declaring-an-array-type –

回答

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) 
+0

我還不太瞭解它,所以我編輯了我的文章並試圖更好地解釋它。 – kRuzeFiX

+0

我設法通過聯合和FLATTEN的組合來解決我的問題。但你的評論是我走上正確軌道的原因。謝謝! – kRuzeFiX

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 

ADRESS,EMAILADDRESS和選項重複字段。

因此,我們如何處理重複字段的第一個選項就是「group by」。

您可以使用的第二個選項是FLATTEN。

欲瞭解更多信息,我建議大查詢參考 - 是非常有用的

https://cloud.google.com/bigquery/docs/reference/legacy-sql#flatten

+0

謝謝,我設法通過連接和FLATTEN的組合來解決我的問題。 – kRuzeFiX