2016-07-06 96 views
1

我試圖使用新的標準SQL在Google BigQuery表的結構數組中找到具有重複字段的行。在表中的數據(簡體),每一行看起來有點像這樣:在數組中使用Structs獲取新的BigQuery標準SQL

{ 
    "Session": "abc123", 
    "Information" [ 
    { 
     "Identifier": "e8d971a4-ef33-4ea1-8627-f1213e4c67dc" 
    }, 
    { 
     "Identifier": "1c62813f-7ec4-4968-b18b-d1eb8f4d9d26" 
    }, 
    { 
     "Identifier": "e8d971a4-ef33-4ea1-8627-f1213e4c67dc" 
    } 
    ] 
} 

我的最終目標是爲了顯示有Information實體存在重複Identifier值的行。然而,最讓我試圖得到以下形式的錯誤消息的查詢:

Cannot access field Identifier on a value with type ARRAY<STRUCT<Identifier STRING>> 

有沒有辦法與ARRAY內的STRUCT裏面的數據?


這是我在查詢第一次嘗試:

SELECT 
    Session, 
    Information 
FROM 
    `events.myevents` 
WHERE 
    COUNT(DISTINCT Information.Identifier) != ARRAY_LENGTH(Information.Identifier) 
LIMIT 
    1000 

,並使用子查詢另一:

SELECT 
    Session, 
    Information 
FROM (
    SELECT 
    Session, 
    Information, 
    COUNT(DISTINCT Information.Identifier) AS info_count_distinct, 
    ARRAY_LENGTH(Information) AS info_count 
    FROM 
    `events.myevents` 
    WHERE 
    COUNT(DISTINCT Information.Identifier) != ARRAY_LENGTH(Information.Identifier) 
    LIMIT 
    1000) 
WHERE 
    info_count != info_count_distinct 
+1

出示您的查詢(哪怕是示數),所以我們可以開始了的東西! –

+0

當然可以!編輯這個問題以增加我做出的兩次嘗試。 – Aaron

+0

你有機會檢查/嘗試我的答案嗎? –

回答

2

嘗試以下

SELECT Session, Identifier, COUNT(1) AS dups 
FROM `events.myevents`, UNNEST(Information) 
GROUP BY Session, Identifier 
HAVING dups > 1 
ORDER BY Session 

應該給你你期待什麼再加上一些孿生兄弟。
像下面(例如)

Session Identifier        dups  
abc123 e8d971a4-ef33-4ea1-8627-f1213e4c67dc 2  
abc345 1c62813f-7ec4-4968-b18b-d1eb8f4d9d26 3  
+0

謝謝你的答案米哈伊爾,這似乎工作!對於延遲響應抱歉,我們的數據集中有一些其他噪音讓我困惑了一會兒。 – Aaron

相關問題