Три способа очистки данных в BigQuery SQL
Google BigQuery — это мощное хранилище данных SaaS, которое позволяет быстро и эффективно анализировать большие наборы данных. Однако, если ваш набор данных содержит повторяющиеся данные, будь то ошибка в ваших данных или некоторые обстоятельства в ваших процессах интеграции данных, это, конечно, может повлиять на ваш анализ и исказить ваши результаты.
Давайте начнем с создания некоторых фиктивных данных с дубликатами. Вот пример кода, если вы хотите попробовать сами:
WITH data AS ( SELECT 1 AS id, ‘John’ AS name, ‘Doe’ AS last_name, DATE(‘2022–01–01’) AS date UNION ALL SELECT 2 AS id, ‘Jane’ AS name, ‘Doe’ AS last_name, DATE(‘2022–02–01’) AS date UNION ALL SELECT 3 AS id, ‘John’ AS name, ‘Doe’ AS last_name, DATE(‘2022–03–01’) AS date UNION ALL SELECT 4 AS id, ‘Alice’ AS name, ‘Smith’ AS last_name, DATE(‘2022–04–01’) AS date UNION ALL SELECT 5 AS id, ‘Bob’ AS name, ‘Jones’ AS last_name, DATE(‘2022–05–01’) AS date UNION ALL SELECT 6 AS id, ‘John’ AS name, ‘Doe’ AS last_name, DATE(‘2022–06–01’) AS date )
Самый простой способ сделать это — просто дважды выбрать данные.
SELECT * FROM data UNION ALL SELECT * FROM data
К счастью, BigQuery предоставляет несколько методов удаления дубликатов данных. Ниже я приведу три различных способа:
Вариант 1: Использование DISTINCT
Самый простой способ удалить повторяющиеся данные в BigQuery — использовать ключевое слово DISTINCT
. Это ключевое слово возвращает только уникальные значения в наборе данных. Вот пример:
SELECT DISTINCT * FROM Data.test
Вариант 2: Использование предложений GROUP BY и HAVING
Другой способ удаления повторяющихся данных — использование предложений GROUP BY
и HAVING
. Строки групп предложения GROUP BY
основаны на указанных столбцах, а фильтры предложения HAVING
удаляют группы, которые не соответствуют указанному условию.
SELECT *,COUNT(*) FROM `triple-silo-282319.Data.test` GROUP BY id, name, last_name, date Having COUNT(*) <= 2
Преимущество этого подхода заключается в том, что в отличие от отдельной функции, которая показывает только строку данных с дубликатами, здесь вы можете либо скрыть дубликаты, либо полностью скрыть строки, либо показать повторяющиеся запросы (см. пример выше).
Вариант 3: Использование функции ROW_NUMBER
Для полноты картины вот еще один вариант. Две возможности, показанные выше, на самом деле достаточны и, на мой взгляд, более понятны. Но мы также можем удалить повторяющиеся данные с помощью функции ROW_NUMBER(). Эта функция назначает уникальный номер строки каждой строке в наборе данных. Затем мы можем использовать этот номер строки для фильтрации повторяющихся строк. Затем дубликат с номером выше отфильтровывается следующим образом:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER(PARTITION BY id, name, last_name, date) as row_nu FROM `triple-silo-282319.Data.test` ) WHERE row_num = 1
Предложение PARTITION BY указывает, по каким столбцам следует разбивать данные, а необязательное предложение ORDER BY указывает порядок нумерации строк. Наконец, выбираются только строки, в которых номер строки равен 1 (т. е. первое вхождение каждой уникальной строки).
Краткое содержание
В заключение, есть несколько способов удалить повторяющиеся данные из Google BigQuery. Предпочитаете ли вы функцию DISTINCT
, предложения GROUP BY
и HAVING
или функцию ROW_NUMBER
, BigQuery предлагает множество инструментов, которые помогут вам очистить данные и получить нужные сведения. Особенно инженеры данных должны быть довольны этим при очистке данных, но и специалисты по данным, которые могут даже захотеть найти дубликаты, например, счета-фактуры, могут действительно извлечь из этого пользу.