Табличная функция file
Движок таблицы, который предоставляет интерфейс, похожий на таблицу, для выборки и вставки данных в файлы, аналогично табличной функции s3. Используйте file(), когда работаете с локальными файлами, и s3() при работе с корзинами в объектном хранилище, таких как S3, GCS или MinIO.
Функция file может использоваться в запросах SELECT и INSERT для чтения из файлов или записи в них.
Синтаксис
Параметры
- path— Относительный путь к файлу из user_files_path. Поддерживает в режиме только для чтения следующие глобсы:- *,- ?,- {abc,def}(где- 'abc'и- 'def'– это строки) и- {N..M}(где- Nи- M– это числа).
- path_to_archive- Относительный путь к zip/tar/7z архиву. Поддерживает те же глобсы, что и- path.
- format— формат файла.
- structure— Структура таблицы. Формат:- 'column1_name column1_type, column2_name column2_type, ...'.
- compression— Тип существующего сжатия при использовании в запросе- SELECTили желаемый тип сжатия при использовании в запросе- INSERT. Поддерживаемые типы сжатия:- gz,- br,- xz,- zst,- lz4и- bz2.
Возвращаемое значение
Таблица для чтения или записи данных в файл.
Примеры записи в файл
Запись в TSV файл
В результате данные записываются в файл test.tsv:
Партированная запись в несколько TSV файлов
Если вы укажете выражение PARTITION BY при вставке данных в табличную функцию типа file(), то для каждой партиции создается отдельный файл. Разделение данных на отдельные файлы помогает улучшить производительность операций чтения.
В результате данные записываются в три файла: test_1.tsv, test_2.tsv и test_3.tsv.
Примеры чтения из файла
SELECT из CSV файла
Сначала установите user_files_path в конфигурации сервера и подготовьте файл test.csv:
Затем прочитайте данные из test.csv в таблицу и выберите первые две строки:
Вставка данных из файла в таблицу
Чтение данных из table.csv, находящегося в archive1.zip и/или archive2.zip:
Глобсы в пути
Пути могут использовать глобсы. Файлы должны соответствовать целому паттерну пути, а не только суффиксу или префиксу. Есть одно исключение: если путь ссылается на существующий каталог и не использует глобсы, то * будет неявно добавлен в путь, так что все файлы в каталоге будут выбраны.
- *— Представляет произвольное количество символов, кроме- /, включая пустую строку.
- ?— Представляет произвольный одиночный символ.
- {some_string,another_string,yet_another_one}— Подставляет любую из строк- 'some_string', 'another_string', 'yet_another_one'. Строки могут содержать символ- /.
- {N..M}— Представляет любое число- >= Nи- <= M.
- **- Представляет все файлы внутри папки рекурсивно.
Конструкции с {} аналогичны удаленным и hdfs табличным функциям.
Пример
Предположим, есть следующие файлы с относительными путями:
- some_dir/some_file_1
- some_dir/some_file_2
- some_dir/some_file_3
- another_dir/some_file_1
- another_dir/some_file_2
- another_dir/some_file_3
Запрос на общее количество строк во всех файлах:
Альтернативное выражение пути, которое достигает того же результата:
Запрос на общее количество строк в some_dir, используя неявный *:
Если ваш список файлов содержит диапазоны чисел с ведущими нулями, используйте конструкцию с фигурными скобками для каждой цифры отдельно или используйте ?.
Пример
Запрос на общее количество строк в файлах с именами file000, file001, ... , file999:
Пример
Запрос на общее количество строк во всех файлах внутри каталога big_dir/ рекурсивно:
Пример
Запрос на общее количество строк во всех файлах file002 внутри любой папки в каталоге big_dir/ рекурсивно:
Виртуальные колонки
- _path— Путь к файлу. Тип:- LowCardinality(String).
- _file— Имя файла. Тип:- LowCardinality(String).
- _size— Размер файла в байтах. Тип:- Nullable(UInt64). Если размер файла неизвестен, значение равно- NULL.
- _time— Время последнего изменения файла. Тип:- Nullable(DateTime). Если время неизвестно, значение равно- NULL.
Партирование в стиле Hive
Когда use_hive_partitioning установлен в 1, ClickHouse будет определять партиционирование в стиле Hive в пути (/name=value/) и позволит использовать партиционные колонки в качестве виртуальных колонок в запросе. Эти виртуальные колонки будут иметь такие же имена, как и в партиционированном пути, но с префиксом _.
Пример
Использование виртуальной колонки, созданной с партиционированием в стиле Hive:
Настройки
- 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 (только для clickhouse-local). Значение по умолчанию: preadдля clickhouse-server,mmapдля clickhouse-local.
Смотрите также
