# File(Format) Управляет данными в одном файле на диске в указанном формате. Примеры применения: - Выгрузка данных из ClickHouse в файл. - Преобразование данных из одного формата в другой. - Обновление данных в ClickHouse редактированием файла на диске. ## Использование движка в сервере ClickHouse ``` File(Format) ``` `Format` должен быть таким, который ClickHouse может использовать и в запросах `INSERT` и в запросах `SELECT`. Полный список поддерживаемых форматов смотрите в разделе [Форматы](../../interfaces/formats.md#formats). Сервер ClickHouse не позволяет указать путь к файлу, с которым будет работать `File`. Используется путь к хранилищу, определенный параметром [path](../server_settings/settings.md#server_settings-path) в конфигурации сервера. При создании таблицы с помощью `File(Format)` сервер ClickHouse создает в хранилище каталог с именем таблицы, а после добавления в таблицу данных помещает туда файл `data.Format`. Можно вручную создать в хранилище каталог таблицы, поместить туда файл, затем на сервере ClickHouse добавить ([ATTACH](../../query_language/misc.md#queries-attach)) информацию о таблице, соответствующей имени каталога и прочитать из файла данные. !!! warning Будьте аккуратны с этой функциональностью, поскольку сервер ClickHouse не отслеживает внешние изменения данных. Если в файл будет производиться запись одновременно со стороны сервера ClickHouse и с внешней стороны, то результат непредсказуем. **Пример:** **1.** Создадим на сервере таблицу `file_engine_table`: ```sql CREATE TABLE file_engine_table (name String, value UInt32) ENGINE=File(TabSeparated) ``` В конфигурации по умолчанию сервер ClickHouse создаст каталог `/var/lib/clickhouse/data/default/file_engine_table`. **2.** Вручную создадим файл `/var/lib/clickhouse/data/default/file_engine_table/data.TabSeparated` с содержимым: ```bash $cat data.TabSeparated one 1 two 2 ``` **3.** Запросим данные: ```sql SELECT * FROM file_engine_table ``` ```text ┌─name─┬─value─┐ │ one │ 1 │ │ two │ 2 │ └──────┴───────┘ ``` ## Использование движка в clickhouse-local В [clickhouse-local](../utils/clickhouse-local.md#utils-clickhouse-local) движок в качестве параметра принимает не только формат, но и путь к файлу. В том числе можно указать стандартные потоки ввода/вывода цифровым или буквенным обозначением `0` или `stdin`, `1` или `stdout`. **Пример:** ```bash $ echo -e "1,2\n3,4" | clickhouse-local -q "CREATE TABLE table (a Int64, b Int64) ENGINE = File(CSV, stdin); SELECT a, b FROM table; DROP TABLE table" ``` ## Особенности использования - Поддерживается многопоточное чтение и однопоточная запись. - Не поддерживается: - использование операций `ALTER` и `SELECT...SAMPLE`; - индексы; - репликация.