Функция Таблицы file
Движок таблицы, который предоставляет интерфейс, похожий на таблицу, для выполнения SELECT и INSERT из файлов, аналогично функции таблицы 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.**- Представляет все файлы внутри папки рекурсивно.
Конструкции с {} аналогичны функциям таблиц remote и hdfs.
Примеры
Пример
Предположим, есть эти файлы с следующими относительными путями:
some_dir/some_file_1some_dir/some_file_2some_dir/some_file_3another_dir/some_file_1another_dir/some_file_2another_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.
Установка use_hive_partitioning
Когда установка 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. |