> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> O motor de tabela File mantém os dados em um arquivo em um dos formatos de arquivo suportados (`TabSeparated`, `Native`, etc.).

# Motor de tabela File

O motor de tabela File mantém os dados em um arquivo em um dos [formatos de arquivo suportados](/pt-BR/reference/formats#formats-overview) (`TabSeparated`, `Native`, etc.).

Cenários de uso:

* Exportação de dados do ClickHouse para arquivo.
* Conversão de dados de um formato para outro.
* Atualização de dados no ClickHouse por meio da edição de um arquivo no disco.

<Note>
  No momento, este motor não está disponível no ClickHouse Cloud. Em vez disso, [use a função de tabela S3](/pt-BR/reference/functions/table-functions/s3).
</Note>

<div id="usage-in-clickhouse-server">
  ## Uso no Servidor ClickHouse
</div>

```sql theme={null}
File(Format)
```

O parâmetro `Format` especifica um dos formatos de arquivo disponíveis. Para executar
consultas `SELECT`, o formato deve ter suporte para entrada e, para executar
consultas `INSERT` – para saída. Os formatos disponíveis estão listados na seção
[Formatos](/pt-BR/reference/formats#formats-overview).

O ClickHouse não permite especificar um caminho no sistema de arquivos para `File`. Ele usará a pasta definida pela configuração [path](/pt-BR/reference/settings/server-settings/settings) na configuração do servidor.

Ao criar uma tabela usando `File(Format)`, ele cria um subdiretório vazio nessa pasta. Quando os dados são gravados nessa tabela, eles são colocados no arquivo `data.Format` dentro desse subdiretório.

Você pode criar manualmente esse subdiretório e arquivo no sistema de arquivos do servidor e então usar [ATTACH](/pt-BR/reference/statements/attach) para associá-lo às informações da tabela com o nome correspondente, para que seja possível consultar os dados desse arquivo.

<Note>
  Tenha cuidado com essa funcionalidade, porque o ClickHouse não acompanha alterações externas nesses arquivos. O resultado de gravações simultâneas via ClickHouse e fora do ClickHouse é indefinido.
</Note>

<div id="example">
  ## Exemplo
</div>

**1.** Configure a tabela `file_engine_table`:

```sql theme={null}
CREATE TABLE file_engine_table (name String, value UInt32) ENGINE=File(TabSeparated)
```

Por padrão, o ClickHouse criará a pasta `/var/lib/clickhouse/data/default/file_engine_table`.

**2.** Crie manualmente o arquivo `/var/lib/clickhouse/data/default/file_engine_table/data.TabSeparated` com o seguinte conteúdo:

```bash theme={null}
$ cat data.TabSeparated
one 1
two 2
```

**3.** Consulte os dados:

```sql theme={null}
SELECT * FROM file_engine_table
```

```text theme={null}
┌─name─┬─value─┐
│ one  │     1 │
│ two  │     2 │
└──────┴───────┘
```

<div id="usage-in-clickhouse-local">
  ## Uso no ClickHouse-local
</div>

No [clickhouse-local](/pt-BR/concepts/features/tools-and-utilities/clickhouse-local), o motor File aceita o caminho do arquivo além de `Format`. Os fluxos padrão de entrada/saída podem ser especificados usando nomes numéricos ou legíveis por pessoas, como `0` ou `stdin`, `1` ou `stdout`. É possível ler e gravar arquivos comprimidos com base em um parâmetro adicional do motor ou na extensão do arquivo (`gz`, `br` ou `xz`).

**Exemplo:**

```bash theme={null}
$ 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"
```

<div id="details-of-implementation">
  ## Detalhes da implementação
</div>

* Várias consultas `SELECT` podem ser executadas concorrentemente, mas as consultas `INSERT` aguardam umas às outras.
* Há suporte para criar um novo arquivo por meio de uma consulta `INSERT`.
* Se o arquivo existir, `INSERT` acrescentará novos valores ao arquivo.
* Não há suporte para:
  * `ALTER`
  * `SELECT ... SAMPLE`
  * Índices
  * Replicação

<div id="partition-by">
  ## PARTITION BY
</div>

`PARTITION BY` — Opcional. É possível criar arquivos separados particionando os dados com base em uma chave de partição. Na maioria dos casos, você não precisa de uma chave de partição e, mesmo quando ela é necessária, em geral não precisa ser mais granular do que por mês. O particionamento não acelera as consultas (ao contrário da expressão `ORDER BY`). Você nunca deve usar um particionamento granular demais. Não particione seus dados por identificadores ou nomes de clientes (em vez disso, use o identificador ou nome do cliente como a primeira coluna na expressão `ORDER BY`).

Para particionar por mês, use a expressão `toYYYYMM(date_column)`, em que `date_column` é uma coluna com uma data do tipo [Date](/pt-BR/reference/data-types/date). Os nomes das partições aqui seguem o formato `"YYYYMM"`.

<div id="virtual-columns">
  ## Colunas virtuais
</div>

* `_path` — Caminho do arquivo. Tipo: `LowCardinality(String)`.
* `_file` — Nome do arquivo. Tipo: `LowCardinality(String)`.
* `_size` — Tamanho do arquivo em bytes. Tipo: `Nullable(UInt64)`. Se o tamanho for desconhecido, o valor é `NULL`.
* `_time` — Horário da última modificação do arquivo. Tipo: `Nullable(DateTime)`. Se o horário for desconhecido, o valor é `NULL`.

<div id="settings">
  ## Configurações
</div>

* [engine\_file\_empty\_if\_not\_exists](/pt-BR/reference/settings/session-settings#engine_file_empty_if_not_exists) - permite selecionar dados vazios de um arquivo inexistente. Desativado por padrão.
* [engine\_file\_truncate\_on\_insert](/pt-BR/reference/settings/session-settings#engine_file_truncate_on_insert) - permite truncar o arquivo antes de inserir dados nele. Desativado por padrão.
* [engine\_file\_allow\_create\_multiple\_files](/pt-BR/reference/settings/session-settings#engine_file_allow_create_multiple_files) - permite criar um novo arquivo a cada inserção se o format tiver sufixo. Desativado por padrão.
* [engine\_file\_skip\_empty\_files](/pt-BR/reference/settings/session-settings#engine_file_skip_empty_files) - permite ignorar arquivos vazios durante a leitura. Desativado por padrão.
* [storage\_file\_read\_method](/pt-BR/reference/settings/session-settings#engine_file_empty_if_not_exists) - método de leitura de dados do arquivo de armazenamento, um dos seguintes: `read`, `pread`, `mmap`. O método mmap não se aplica ao clickhouse-server (ele se destina ao clickhouse-local). Valor padrão: `pread` para clickhouse-server, `mmap` para clickhouse-local.
