2016-07-06 6 views
1

Я пытаюсь найти строки с повторяющимися полями в массиве структур в таблице Google BigQuery с использованием нового стандартного SQL. Данные в таблице (упрощенно), где каждая строка выглядит как это:Работа с структурами в массивах для нового стандарта 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>> 

Есть ли способ работы с данными внутри STRUCT внутри ARRAY?


Вот моя первая попытка запроса:

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

представить запрос (даже если он erroring), чтобы мы могли начать что-то! –

+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

Смежные вопросы