Работа с Parquet в ClickHouse
Parquet — это эффективный файловый формат для хранения данных в столбцовом виде. ClickHouse поддерживает как чтение, так и запись файлов Parquet.
Когда вы ссылаетесь на путь к файлу в запросе, откуда будет читать ClickHouse, будет зависеть от варианта ClickHouse, который вы используете.
Если вы используете clickhouse-local
, он будет читать из расположения, относительно того, откуда вы запустили ClickHouse Local.
Если вы используете ClickHouse Server или ClickHouse Cloud через clickhouse client
, он будет читать из расположения, относительно директории /var/lib/clickhouse/user_files/
на сервере.
Импорт из Parquet
Перед загрузкой данных мы можем использовать функцию file() для исследования структуры примерного файла parquet:
Мы использовали Parquet в качестве второго аргумента, чтобы ClickHouse знал о формате файла. Это выведет колонки с типами:
Также мы можем изучить файлы перед фактическим импортом данных, используя все возможности SQL:
Мы можем пропустить явную настройку формата для file()
и INFILE
/OUTFILE
.
В этом случае ClickHouse автоматически определит формат на основе расширения файла.
Импорт в существующую таблицу
Давайте создадим таблицу, в которую мы будем импортировать данные Parquet:
Теперь мы можем импортировать данные, используя клаузулу FROM INFILE
:
Обратите внимание, как ClickHouse автоматически преобразовал строки Parquet (в колонке date
) в тип Date
. Это происходит потому, что ClickHouse автоматически делает приведение типов на основе типов в целевой таблице.
Вставка локального файла на удалённый сервер
Если вы хотите вставить локальный файл Parquet на удалённый сервер ClickHouse, вы можете сделать это, передав содержимое файла в clickhouse-client
, как показано ниже:
Создание новых таблиц из файлов Parquet
Поскольку ClickHouse читает схему файла parquet, мы можем создавать таблицы на лету:
Это автоматически создаст и заполнит таблицу из данного файла parquet:
По умолчанию ClickHouse строго относится к именам колонок, типам и значениям. Но иногда мы можем пропустить несуществующие колонки или неподдерживаемые значения при импорте. Это можно управлять с помощью настроек Parquet.
Экспорт в формат Parquet
При использовании INTO OUTFILE
с ClickHouse Cloud вам необходимо выполнять команды в clickhouse client
на машине, где будет записан файл.
Чтобы экспортировать любую таблицу или результат запроса в файл Parquet, мы можем использовать клаузулу INTO OUTFILE
:
Это создаст файл export.parquet
в рабочей директории.
Типы данных ClickHouse и Parquet
Типы данных ClickHouse и Parquet в основном идентичны, но всё же немного различаются. Например, ClickHouse экспортирует тип DateTime
как int64
Parquet. Если мы затем импортируем его обратно в ClickHouse, мы увидим числа (файл time.parquet):
В этом случае можно использовать преобразование типов:
Дополнительное чтение
ClickHouse вводит поддержку многих форматов, как текстовых, так и двоичных, чтобы охватить различные сценарии и платформы. Изучите больше форматов и способов работы с ними в следующих статьях:
- CSV и TSV форматы
- Avro, Arrow и ORC
- Форматы JSON
- Регулярные выражения и шаблоны
- Нативные и двоичные форматы
- SQL форматы
Также ознакомьтесь с clickhouse-local - портативным полнофункциональным инструментом для работы с локальными/удалёнными файлами без необходимости в сервере ClickHouse.