Как с помощью ClickHouse сравнить строки в двух CSV-файлах
При работе с данными очень часто возникает потребность в сравнении строк в разных CSV-файлах. В этой статье мы поговорим о том, как это можно сделать с помощью ClickHouse.
Прежде чем приступить к работе, убедитесь в том, что у Вас установлен clickhouse-local. Если нет, скачайте его с официального сайта.
В этом примере мы будем сравнивать два CSV-файла ,stores.csv и stores_2.csv, содержащие метаданные магазина, включая город, штат, тип и кластер. Вы можете взять эти файлы на Kaggle. Файлы одинаковые, но stores_2.csv содержит на одну строку меньше.
Сравнение двух CSV - файлов
Как и всегда, для подобных операций мы будем использовать clickhouse-local.
Количество строк
Для начала узнаем, сколько строк содержит каждый файл:
WITH
(
SELECT count()
FROM file('stores.csv')
) AS s1,
(
SELECT count()
FROM file('stores_2.csv')
) AS s2
SELECT
s1,
s2,
s1 = s2 AS equal
;
Результат:
┌─s1─┬─s2─┬─equal─┐ │ 54 │ 53 │ 0 │ └────┴────┴───────┘
Как видите, количество строк в двух файлах действительно разное.
Поиск различия
Теперь найдем ту строку, которая есть в stores.csv, но нет в stores_2.csv:
SELECT *
FROM file('stores.csv') AS s1
LEFT JOIN file('stores_2.csv') AS s2 ON s1.store_nbr = s2.store_nbr
WHERE s2.store_nbr IS NULL
Результат:
┌─store_nbr─┬─city──┬─state─────┬─type─┬─cluster─┬─s2.store_nbr─┬─s2.city─┬─s2.state─┬─s2.type─┬─s2.cluster─┐ │ 10 │ Quito │ Pichincha │ C │ 15 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ └───────────┴───────┴───────────┴──────┴─────────┴──────────────┴─────────┴──────────┴─────────┴────────────┘
Сохранение различая
При необходимости мы можем сохранить различие в таблице:
CREATE TABLE differences
ENGINE = Memory AS
SELECT *
FROM file('stores.csv') AS s1
LEFT JOIN file('stores_2.csv') AS s2 ON s1.store_nbr = s2.store_nbr
WHERE s2.store_nbr IS NULL
;
Или в файле:
SELECT *
FROM file('stores.csv') AS s1
LEFT JOIN file('stores_2.csv') AS s2 ON s1.store_nbr = s2.store_nbr
WHERE s2.store_nbr IS NULL
INTO OUTFILE 'differences.csv'
FORMAT CSV
;
Вот и все, теперь Вы знаете, как с помощью ClickHouse можно сравнить строки в двух CSV-файлах.




