> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Documentación sobre el formato TSV

# TabSeparated

| Entrada | Salida | Alias |
| - | - | - |
| ✔ | ✔ | `TSV` |

## Descripción

En el formato TabSeparated, los datos se escriben por fila. Cada fila contiene valores separados por tabulaciones. Cada valor va seguido de una tabulación, excepto el último valor de la fila, que va seguido de un salto de línea. En todo momento se asumen estrictamente saltos de línea de Unix. La última fila también debe terminar con un salto de línea. Los valores se escriben en formato de texto, sin comillas y con los caracteres especiales escapados.

Este formato también está disponible con el nombre `TSV`.

El formato `TabSeparated` resulta práctico para procesar datos con programas y scripts personalizados. Se usa de forma predeterminada en la interfaz HTTP y en el modo por lotes del cliente de línea de comandos. Este formato también permite transferir datos entre distintos SGBD. Por ejemplo, puede obtener un volcado de MySQL y cargarlo en ClickHouse, o viceversa.

El formato `TabSeparated` admite la salida de valores totales (cuando se usa WITH TOTALS) y valores extremos (cuando 'extremes' se establece en 1). En estos casos, los valores totales y los extremos se muestran después de los datos principales. El resultado principal, los valores totales y los extremos se separan entre sí mediante una línea vacía. Ejemplo:

```sql theme={null}
SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORDER BY EventDate FORMAT TabSeparated

2014-03-17      1406958
2014-03-18      1383658
2014-03-19      1405797
2014-03-20      1353623
2014-03-21      1245779
2014-03-22      1031592
2014-03-23      1046491

1970-01-01      8873898

2014-03-17      1031592
2014-03-23      1406958
```

## Formato de datos

Los números enteros se escriben en formato decimal. Los números pueden incluir un carácter "+" adicional al principio (se ignora durante el análisis y no se conserva al formatear), y los ceros iniciales se ignoran durante el análisis (`007` se lee como `7`). Los números no negativos no pueden incluir el signo menos. Al leer, se permite interpretar una cadena vacía como cero o, en el caso de los tipos con signo, una cadena compuesta únicamente por un signo menos como cero. Los números que no caben en el tipo de dato correspondiente pueden interpretarse como otro número, sin mostrar ningún mensaje de error.

Los números de coma flotante se escriben en formato decimal. El punto se utiliza como separador decimal. Se admiten notaciones exponenciales, así como 'inf', '+inf', '-inf' y 'nan'. Un valor de coma flotante puede empezar o terminar con un punto decimal.
Durante el formateo, los números de coma flotante pueden perder precisión.
Durante el análisis, no es estrictamente necesario leer el número representable por la máquina más cercano.

Las fechas se escriben en formato YYYY-MM-DD y se analizan con ese mismo formato, pero admitiendo cualquier carácter como separador.
Las fechas con hora se escriben en el formato `YYYY-MM-DD hh:mm:ss` y se analizan con ese mismo formato, pero admitiendo cualquier carácter como separador.
Todo esto ocurre en la zona horaria del sistema en el momento en que se inicia el cliente o el servidor (según cuál de ellos formatee los datos). En las fechas con hora, el horario de verano no está especificado. Por tanto, si un volcado contiene horas durante el horario de verano, el volcado no se corresponde de forma inequívoca con los datos, y el análisis elegirá una de las dos horas.
Durante una operación de lectura, las fechas incorrectas y las fechas con hora pueden interpretarse con desbordamiento natural o como fechas y horas nulas, sin mostrar ningún mensaje de error.

Como excepción, también se admite el análisis de fechas con hora en formato Unix timestamp, si consta de exactamente 10 dígitos decimales. El resultado no depende de la zona horaria. Los formatos `YYYY-MM-DD hh:mm:ss` y `NNNNNNNNNN` se distinguen automáticamente.

Las cadenas se generan con caracteres especiales escapados mediante backslash. Para la salida se usan las siguientes secuencias de escape: `\b`, `\f`, `\r`, `\n`, `\t`, `\0`, `\'`, `\\`. El análisis también admite las secuencias `\a`, `\v` y `\xHH` (secuencias de escape hexadecimales), así como cualquier secuencia `\c`, donde `c` es cualquier carácter (estas secuencias se convierten en `c`). Por tanto, la lectura de datos admite formatos en los que un salto de línea puede escribirse como `\n`, como `\` o como un salto de línea. Por ejemplo, la cadena `Hello world` con un salto de línea entre las palabras en lugar de un espacio puede analizarse en cualquiera de las siguientes variantes:

```text theme={null}
Hello\nworld

Hello\
world
```

La segunda variante es compatible porque MySQL la usa al escribir volcados separados por tabulaciones.

El conjunto mínimo de caracteres que debe escapar al pasar datos en formato TabSeparated es: tabulación, salto de línea (LF) y barra invertida.

Solo se escapa un pequeño conjunto de símbolos. Puede encontrarse fácilmente con un valor de cadena que su terminal arruine al mostrarlo en la salida.

Los Arrays se escriben como una lista de valores separados por comas entre `[]`. Los elementos numéricos del array se formatean normalmente. Los tipos `Date` y `DateTime` se escriben entre comillas simples. Las cadenas se escriben entre comillas simples con las mismas reglas de escape indicadas arriba.

[NULL](/docs/es/reference/syntax.md) se formatea de acuerdo con la configuración [format\_tsv\_null\_representation](/docs/es/reference/settings/formats/format.md#format_tsv_null_representation) (el valor predeterminado es `\N`).

En los datos de entrada, los valores ENUM pueden representarse como nombres o como id. Primero, intentamos hacer coincidir el valor de entrada con el nombre del ENUM. Si no lo logramos y el valor de entrada es un número, intentamos hacer coincidir ese número con el id del ENUM.
Si los datos de entrada contienen solo id de ENUM, se recomienda habilitar la configuración [input\_format\_tsv\_enum\_as\_number](/docs/es/reference/settings/formats/input-format.md#input_format_tsv_enum_as_number) para optimizar el análisis de ENUM.

Cada elemento de las estructuras [Nested](/docs/es/reference/data-types/nested-data-structures/index.md) se representa como un array.

Por ejemplo:

```sql theme={null}
CREATE TABLE nestedt
(
    `id` UInt8,
    `aux` Nested(
        a UInt8,
        b String
    )
)
ENGINE = TinyLog
```

```sql theme={null}
INSERT INTO nestedt VALUES ( 1, [1], ['a'])
```

```sql theme={null}
SELECT * FROM nestedt FORMAT TSV
```

```response theme={null}
1  [1]    ['a']
```

## Ejemplo de uso

### Inserción de datos

Utiliza el siguiente archivo TSV, llamado `football.tsv`:

```tsv theme={null}
2022-04-30      2021    Sutton United   Bradford City   1       4
2022-04-30      2021    Swindon Town    Barrow  2       1
2022-04-30      2021    Tranmere Rovers Oldham Athletic 2       0
2022-05-02      2021    Port Vale       Newport County  1       2
2022-05-02      2021    Salford City    Mansfield Town  2       2
2022-05-07      2021    Barrow  Northampton Town        1       3
2022-05-07      2021    Bradford City   Carlisle United 2       0
2022-05-07      2021    Bristol Rovers  Scunthorpe United       7       0
2022-05-07      2021    Exeter City     Port Vale       0       1
2022-05-07      2021    Harrogate Town A.F.C.   Sutton United   0       2
2022-05-07      2021    Hartlepool United       Colchester United       0       2
2022-05-07      2021    Leyton Orient   Tranmere Rovers 0       1
2022-05-07      2021    Mansfield Town  Forest Green Rovers     2       2
2022-05-07      2021    Newport County  Rochdale        0       2
2022-05-07      2021    Oldham Athletic Crawley Town    3       3
2022-05-07      2021    Stevenage Borough       Salford City    4       2
2022-05-07      2021    Walsall Swindon Town    0       3
```

Inserte los datos:

```sql theme={null}
INSERT INTO football FROM INFILE 'football.tsv' FORMAT TabSeparated;
```

### Lectura de datos

Lea datos con el formato `TabSeparated`:

```sql theme={null}
SELECT *
FROM football
FORMAT TabSeparated
```

La salida estará en formato separado por tabuladores:

```tsv theme={null}
2022-04-30      2021    Sutton United   Bradford City   1       4
2022-04-30      2021    Swindon Town    Barrow  2       1
2022-04-30      2021    Tranmere Rovers Oldham Athletic 2       0
2022-05-02      2021    Port Vale       Newport County  1       2
2022-05-02      2021    Salford City    Mansfield Town  2       2
2022-05-07      2021    Barrow  Northampton Town        1       3
2022-05-07      2021    Bradford City   Carlisle United 2       0
2022-05-07      2021    Bristol Rovers  Scunthorpe United       7       0
2022-05-07      2021    Exeter City     Port Vale       0       1
2022-05-07      2021    Harrogate Town A.F.C.   Sutton United   0       2
2022-05-07      2021    Hartlepool United       Colchester United       0       2
2022-05-07      2021    Leyton Orient   Tranmere Rovers 0       1
2022-05-07      2021    Mansfield Town  Forest Green Rovers     2       2
2022-05-07      2021    Newport County  Rochdale        0       2
2022-05-07      2021    Oldham Athletic Crawley Town    3       3
2022-05-07      2021    Stevenage Borough       Salford City    4       2
2022-05-07      2021    Walsall Swindon Town    0       3
```

## Ajustes de formato

| Ajuste | Descripción | Predeterminado |
| - | - | - |
| [`format_tsv_null_representation`](/docs/es/reference/settings/formats/format#format_tsv_null_representation) | Representación personalizada de NULL en formato TSV. | `\N` |
| [`input_format_tsv_empty_as_default`](/docs/es/reference/settings/formats/input-format#input_format_tsv_empty_as_default) | trata los campos vacíos de la entrada TSV como valores por defecto. Para expresiones por defecto complejas, [input\_format\_defaults\_for\_omitted\_fields](/docs/es/reference/settings/formats/input-format.md#input_format_defaults_for_omitted_fields) también debe estar habilitado. | `false` |
| [`input_format_tsv_enum_as_number`](/docs/es/reference/settings/formats/input-format#input_format_tsv_enum_as_number) | trata los valores enum insertados en formatos TSV como índices de enum. | `false` |
| [`input_format_tsv_use_best_effort_in_schema_inference`](/docs/es/reference/settings/formats/input-format#input_format_tsv_use_best_effort_in_schema_inference) | usa algunos ajustes y heurísticas para inferir el esquema en formato TSV. Si está deshabilitado, todos los campos se inferirán como String. | `true` |
| [`output_format_tsv_crlf_end_of_line`](/docs/es/reference/settings/formats/output-format#output_format_tsv_crlf_end_of_line) | si se establece en true, el fin de línea en el formato de salida TSV será `\r\n` en lugar de `\n`. | `false` |
| [`input_format_tsv_crlf_end_of_line`](/docs/es/reference/settings/formats/input-format#input_format_tsv_crlf_end_of_line) | si se establece en true, el fin de línea en el formato de entrada TSV será `\r\n` en lugar de `\n`. | `false` |
| [`input_format_tsv_skip_first_lines`](/docs/es/reference/settings/formats/input-format#input_format_tsv_skip_first_lines) | omite el número especificado de líneas al principio de los datos. | `0` |
| [`input_format_tsv_detect_header`](/docs/es/reference/settings/formats/input-format#input_format_tsv_detect_header) | detecta automáticamente el encabezado con nombres y tipos en formato TSV. | `true` |
| [`input_format_tsv_skip_trailing_empty_lines`](/docs/es/reference/settings/formats/input-format#input_format_tsv_skip_trailing_empty_lines) | omite las líneas vacías al final de los datos. | `false` |
| [`input_format_tsv_allow_variable_number_of_columns`](/docs/es/reference/settings/formats/input-format#input_format_tsv_allow_variable_number_of_columns) | permite un número variable de columnas en formato TSV, ignora las columnas adicionales y usa valores por defecto para las columnas que faltan. | `false` |
