Движок таблиц File
Движок таблиц File сохраняет данные в файле в одном из поддерживаемых форматов файлов (TabSeparated
, Native
и др.).
Сценарии использования:
- Экспорт данных из ClickHouse в файл.
- Преобразование данных из одного формата в другой.
- Обновление данных в ClickHouse путём редактирования файла на диске.
Этот движок в настоящее время недоступен в ClickHouse Cloud, пожалуйста, используйте табличную функцию S3 вместо этого.
Использование в ClickHouse Server
Параметр Format
указывает один из доступных форматов файлов. Для выполнения запросов SELECT
формат должен поддерживаться для ввода, а для выполнения запросов INSERT
— для вывода. Доступные форматы перечислены в разделе Форматы.
ClickHouse не позволяет указывать путь к файловой системе для File
. Он использует папку, определённую настройкой path в конфигурации сервера.
При создании таблицы с использованием File(Format)
она создаёт пустую подпапку в этой папке. Когда данные записываются в эту таблицу, они помещаются в файл data.Format
в этой подпапке.
Вы можете вручную создать эту подпапку и файл в файловой системе сервера, а затем ПРИКРЕПИТЬ его к информации о таблице с совпадающим именем, чтобы вы могли запрашивать данные из этого файла.
Будьте осторожны с этой функциональностью, так как ClickHouse не отслеживает внешние изменения таких файлов. Результат одновременных записей через ClickHouse и извне ClickHouse неопределён.
Пример
1. Настройте таблицу file_engine_table
:
По умолчанию ClickHouse создаст папку /var/lib/clickhouse/data/default/file_engine_table
.
2. Вручную создайте /var/lib/clickhouse/data/default/file_engine_table/data.TabSeparated
, содержащий:
3. Запросите данные:
Использование в ClickHouse-local
В clickhouse-local движок File принимает путь к файлу помимо Format
. Потоки ввода/вывода по умолчанию могут быть указаны с использованием числовых или читаемых человеком названий, таких как 0
или stdin
, 1
или stdout
. Возможна работа с сжатыми файлами на основе дополнительного параметра движка или расширения файла (gz
, br
или xz
).
Пример:
Детали реализации
- Несколько запросов
SELECT
могут выполняться одновременно, но запросыINSERT
будут ждать друг друга. - Поддерживается создание нового файла запросом
INSERT
. - Если файл существует,
INSERT
добавит в него новые значения. - Не поддерживается:
ALTER
SELECT ... SAMPLE
- Индексы
- Репликация
PARTITION BY
PARTITION BY
— необязательный. Возможно создание отдельных файлов путём партиционирования данных по ключу партиционирования. В большинстве случаев ключ партиционирования не нужен, и если он нужен, чаще всего не нужен ключ партиционирования более детальный, чем по месяцу. Партиционирование не ускоряет запросы (в отличие от выражения ORDER BY). Никогда не используйте слишком детализированное партиционирование. Не партиционируйте свои данные по идентификаторам или именам клиентов (вместо этого сделайте идентификатор клиента или имя первым столбцом в выражении ORDER BY).
Для партиционирования по месяцам используйте выражение toYYYYMM(date_column)
, где date_column
— это колонка с датой типа Date. Имена партиций имеют формат "YYYYMM"
.
Виртуальные колонки
_path
— Путь к файлу. Тип:LowCardinality(String)
._file
— Имя файла. Тип:LowCardinality(String)
._size
— Размер файла в байтах. Тип:Nullable(UInt64)
. Если размер неизвестен, значение равноNULL
._time
— Время последнего изменения файла. Тип:Nullable(DateTime)
. Если время неизвестно, значение равноNULL
.
Настройки
- engine_file_empty_if_not_exists - позволяет выбирать пустые данные из файла, который не существует. Отключено по умолчанию.
- engine_file_truncate_on_insert - позволяет обрезать файл перед вставкой в него. Отключено по умолчанию.
- engine_file_allow_create_multiple_files - позволяет создавать новый файл при каждой вставке, если формат имеет суффикс. Отключено по умолчанию.
- engine_file_skip_empty_files - позволяет пропускать пустые файлы при чтении. Отключено по умолчанию.
- storage_file_read_method - метод чтения данных из файла хранилища, один из:
read
,pread
,mmap
. Метод mmap не применяется к clickhouse-server (он предназначен для clickhouse-local). Значение по умолчанию:pread
для clickhouse-server,mmap
для clickhouse-local.