> ## 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.

> El motor de tabla File guarda los datos en un archivo en uno de los formatos de archivo compatibles (`TabSeparated`, `Native`, etc.).

# Motor de tabla File

El motor de tabla File guarda los datos en un archivo en uno de los [formatos de archivo](/es/reference/formats#formats-overview) compatibles (`TabSeparated`, `Native`, etc.).

Casos de uso:

* Exportación de datos de ClickHouse a un archivo.
* Conversión de datos de un formato a otro.
* Actualización de datos en ClickHouse mediante la edición de un archivo en un disco.

<Note>
  Este motor no está disponible actualmente en ClickHouse Cloud; [utilice en su lugar la función de tabla S3](/es/reference/functions/table-functions/s3).
</Note>

<div id="usage-in-clickhouse-server">
  ## Uso en ClickHouse Server
</div>

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

El parámetro `Format` especifica uno de los formatos de archivo disponibles. Para ejecutar
consultas `SELECT`, el formato debe ser compatible con la entrada y, para ejecutar
consultas `INSERT`, con la salida. Los formatos disponibles se enumeran en la
sección [Formatos](/es/reference/formats#formats-overview).

ClickHouse no permite especificar una ruta del sistema de archivos para `File`. Usará la carpeta definida por la opción [path](/es/reference/settings/server-settings/settings) en la configuración del servidor.

Al crear una tabla con `File(Format)`, se crea un subdirectorio vacío en esa carpeta. Cuando se escriben datos en esa tabla, se guardan en el archivo `data.Format` de ese subdirectorio.

Puede crear manualmente este subdirectorio y archivo en el sistema de archivos del servidor y luego [ATTACH](/es/reference/statements/attach) a la definición de la tabla con el nombre correspondiente, para poder consultar los datos de ese archivo.

<Note>
  Tenga cuidado con esta funcionalidad, porque ClickHouse no realiza un seguimiento de los cambios externos en este tipo de archivos. El resultado de escrituras simultáneas a través de ClickHouse y fuera de ClickHouse no está definido.
</Note>

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

**1.** Configure la tabla `file_engine_table`:

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

De forma predeterminada, ClickHouse creará la carpeta `/var/lib/clickhouse/data/default/file_engine_table`.

**2.** Crea manualmente `/var/lib/clickhouse/data/default/file_engine_table/data.TabSeparated` con el siguiente contenido:

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

**3.** Consulte los datos:

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

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

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

En [clickhouse-local](/es/concepts/features/tools-and-utilities/clickhouse-local), el motor File acepta una ruta de archivo además de `Format`. Los flujos predeterminados de entrada/salida pueden especificarse mediante nombres numéricos o legibles para humanos, como `0` o `stdin`, `1` o `stdout`. También es posible leer y escribir archivos comprimidos según un parámetro adicional del motor o la extensión del archivo (`gz`, `br` o `xz`).

**Ejemplo:**

```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">
  ## Detalles de la implementación
</div>

* Se pueden ejecutar varias consultas `SELECT` de forma concurrente, pero las consultas `INSERT` deben esperar unas a otras.
* Se admite la creación de un archivo nuevo mediante una consulta `INSERT`.
* Si el archivo existe, `INSERT` le añadirá nuevos valores.
* No se admite:
  * `ALTER`
  * `SELECT ... SAMPLE`
  * Índices
  * Replicación

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

`PARTITION BY` — Opcional. Es posible crear archivos independientes particionando los datos según una clave de partición. En la mayoría de los casos, no necesita una clave de partición y, si la necesita, por lo general no debería ser más granular que por mes. El particionado no acelera las consultas (a diferencia de la expresión `ORDER BY`). Nunca debe usar un particionado demasiado granular. No particione sus datos por identificadores ni nombres de clientes (en su lugar, haga que el identificador o el nombre del cliente sea la primera columna de la expresión `ORDER BY`).

Para particionar por mes, use la expresión `toYYYYMM(date_column)`, donde `date_column` es una columna de tipo [Date](/es/reference/data-types/date). Los nombres de las particiones aquí tienen el formato `"YYYYMM"`.

<div id="virtual-columns">
  ## Columnas virtuales
</div>

* `_path` — Ruta del archivo. Tipo: `LowCardinality(String)`.
* `_file` — Nombre del archivo. Tipo: `LowCardinality(String)`.
* `_size` — Tamaño del archivo en bytes. Tipo: `Nullable(UInt64)`. Si se desconoce el tamaño, el valor es `NULL`.
* `_time` — Fecha y hora de la última modificación del archivo. Tipo: `Nullable(DateTime)`. Si se desconoce la hora, el valor es `NULL`.

<div id="settings">
  ## Configuración
</div>

* [engine\_file\_empty\_if\_not\_exists](/es/reference/settings/session-settings#engine_file_empty_if_not_exists) - permite leer datos vacíos de un archivo que no existe. Deshabilitado de forma predeterminada.
* [engine\_file\_truncate\_on\_insert](/es/reference/settings/session-settings#engine_file_truncate_on_insert) - permite truncar el archivo antes de insertar en él. Deshabilitado de forma predeterminada.
* [engine\_file\_allow\_create\_multiple\_files](/es/reference/settings/session-settings#engine_file_allow_create_multiple_files) - permite crear un archivo nuevo en cada inserción si el `format` tiene sufijo. Deshabilitado de forma predeterminada.
* [engine\_file\_skip\_empty\_files](/es/reference/settings/session-settings#engine_file_skip_empty_files) - permite omitir archivos vacíos durante la lectura. Deshabilitado de forma predeterminada.
* [storage\_file\_read\_method](/es/reference/settings/session-settings#engine_file_empty_if_not_exists) - método de lectura de datos desde el archivo de almacenamiento; uno de: `read`, `pread`, `mmap`. El método `mmap` no se aplica a clickhouse-server (está pensado para clickhouse-local). Valor predeterminado: `pread` para clickhouse-server, `mmap` para clickhouse-local.
