Удалите дубликаты из вложенных таблиц в Google BigQuery - PullRequest
0 голосов
/ 10 апреля 2019

Мы начали работать с вложенными таблицами Google bigQeury. у нас возникают трудности с выявлением дубликатов в этой таблице. мы попытались использовать функцию Rownumber (), но это означает, что нам нужно погрузиться в каждую запись и запись. мы говорим о таблице с более чем 10 записями в основном логове архитектуры и более чем 400 полями

следующий код - это то, что мы создали до сих пор, он распознает дубликаты, но с таким количеством полей, которые мы можем написать, как я писал, существует более 400 полей

SELECT
    count (*) AS Number_Of_Records --this will let us know how many records there is
FROM 
    (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY field1, ... , fieldN) AS ranking 
    FROM
        `data.T1`,
        unnest(record1) as record1, --unnesting is a must with nested tables and records
        ....,
        unnest(recordN) as recordN
    )
WHERE
    ranking=1 --duplicats >1

мы хотели бы найти более короткий способ написания этого запроса, чтобы найти количество строк без дубликатов, спасибо

1 Ответ

0 голосов
/ 10 апреля 2019

Один из подходов состоит в том, чтобы использовать хеш-функцию для идентификации записи и использовать этот хеш-код для удаления дубликатов.

Итак, предполагая, что ваши данные JSON состоят из строк, вы можете использовать следующее для генерации уникального хеш-кода для вашегозаписи:

WITH items AS
  (SELECT ["apples", "bananas", "pears", "grapes"] as list
  UNION ALL
  SELECT ["coffee", "tea", "milk" ] as list
  UNION ALL
  SELECT ["cake", "pie", NULL] as list -- Duplicate record
  UNION ALL
  SELECT ["cake", "pie", NULL] as list)

SELECT distinct FARM_FINGERPRINT(ARRAY_TO_STRING(list, '--')) AS text
FROM items;

В результате получается 3 строки, а не 4, как ожидалось (1 строка в двух экземплярах)

enter image description here

...