2016-07-06 8 views
1

新しい標準SQLを使用して、Google BigQueryテーブル内の構造体の配列内に重複フィールドを持つ行を検索しようとしています。各行は、ビットのように見えるテーブルのデータ(簡体字):新しいBigQuery標準SQLの配列内で構造体を操作

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

私の最終目標は、本重複Identifier値をInformationエンティティを持つ行を表示することです。しかし、私は次の形式のエラーメッセージを取得しようとしたクエリの最も:

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

ARRAYSTRUCTの内部データを操作する方法はありますか?

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

(それがerroringされている場合でも)あなたのクエリを提示するので、我々は何かのオフに開始することができます! –

+0

確かに!私が作った2つの試みを追加するために質問を編集しました。 – 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 

の下に試してみてください。

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

、別のサブクエリを使用して:


は、ここに私の最初のクエリの試みですdupsの数を加えたものです。以下のように
(例)

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

答えがありましたミハイル、ありがとうございました!遅れて返答して申し訳ありませんが、私のデータセットにはしばらく私を混乱させていたいくつかの騒音がありました。 – Aaron

関連する問題