Работа с 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 через pipe, как показано ниже:
Создание новых таблиц из файлов 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.