Перейти к основному содержимому
Перейти к основному содержимому

Функция таблицы 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_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.

Смотрите также