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

> Документация по формату TSV

# TabSeparated

| Ввод | Вывод | Псевдоним |
| ---- | ----- | --------- |
| ✔    | ✔     | `TSV`     |

<div id="description">
  ## Описание
</div>

В формате `TabSeparated` данные записываются построчно. Каждая строка содержит значения, разделённые символами табуляции. После каждого значения ставится символ табуляции, кроме последнего значения в строке, после которого идёт перевод строки. Везде предполагаются только переводы строки в стиле Unix. Последняя строка тоже должна оканчиваться переводом строки. Значения записываются в текстовом формате, без кавычек, а специальные символы экранируются.

Этот формат также доступен под именем `TSV`.

Формат `TabSeparated` удобен для обработки данных с помощью пользовательских программ и скриптов. По умолчанию он используется в HTTP-интерфейсе и в пакетном режиме клиента командной строки. Этот формат также позволяет передавать данные между различными СУБД. Например, можно получить дамп из MySQL и загрузить его в ClickHouse, или наоборот.

Формат `TabSeparated` поддерживает вывод итоговых значений (при использовании WITH TOTALS) и экстремальных значений (когда 'extremes' установлено в 1). В этих случаях итоговые и экстремальные значения выводятся после основных данных. Основной результат, итоговые значения и экстремальные значения отделяются друг от друга пустой строкой. Пример:

```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
```

<div id="tabseparated-data-formatting">
  ## Форматирование данных
</div>

Целые числа записываются в десятичной форме. Числа могут содержать дополнительный символ "+" в начале (он игнорируется при разборе и не записывается при форматировании). Неотрицательные числа не могут содержать знак минус. При чтении допускается разбирать пустую строку как ноль или (для знаковых типов) строку, состоящую только из знака минус, как ноль. Числа, которые не помещаются в соответствующий тип данных, могут быть разобраны как другое число без сообщения об ошибке.

Числа с плавающей запятой записываются в десятичной форме. В качестве десятичного разделителя используется точка. Поддерживаются записи с экспонентой, а также 'inf', '+inf', '-inf' и 'nan'. Запись числа с плавающей запятой может начинаться или заканчиваться десятичной точкой.
При форматировании возможна потеря точности для чисел с плавающей запятой.
При разборе не требуется строго считывать ближайшее число, представимое машиной.

Даты записываются в формате YYYY-MM-DD и разбираются в том же формате, но с любыми символами в качестве разделителей.
Дата и время записываются в формате `YYYY-MM-DD hh:mm:ss` и разбираются в том же формате, но с любыми символами в качестве разделителей.
Все это происходит в системном часовом поясе на момент запуска клиента или сервера (в зависимости от того, кто из них форматирует данные). Для даты и времени переход на летнее время не определён. Поэтому, если dump содержит время в период действия летнего времени, dump не будет однозначно соответствовать данным, и при разборе будет выбрано одно из двух значений времени.
При чтении некорректные даты и значения даты и времени могут быть разобраны с естественным переполнением или как нулевые даты и время без сообщения об ошибке.

В качестве исключения разбор даты и времени также поддерживается в формате Unix-временной метки, если она состоит ровно из 10 десятичных цифр. Результат не зависит от часового пояса. Форматы `YYYY-MM-DD hh:mm:ss` и `NNNNNNNNNN` различаются автоматически.

Строки выводятся со специальными символами, экранированными обратной косой чертой. Для вывода используются следующие escape-последовательности: `\b`, `\f`, `\r`, `\n`, `\t`, `\0`, `\'`, `\\`. При разборе также поддерживаются последовательности `\a`, `\v` и `\xHH` (шестнадцатеричные escape-последовательности), а также любые последовательности `\c`, где `c` — любой символ (эти последовательности преобразуются в `c`). Таким образом, чтение данных поддерживает форматы, в которых перевод строки может быть записан как `\n`, `\`, или как перевод строки. Например, строка `Hello world` с переводом строки между словами вместо пробела может быть разобрана в любом из следующих вариантов:

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

Hello\
world
```

Второй вариант поддерживается, потому что MySQL использует его при записи дампов с разделением табуляцией.

Минимальный набор символов, которые необходимо экранировать при передаче данных в формате TabSeparated: табуляция, перевод строки (LF) и обратная косая черта.

Экранируется лишь небольшой набор символов. Вы легко можете столкнуться со строковым значением, которое терминал исказит при выводе.

Массивы записываются как список значений, разделённых запятыми, в `[]`. Числовые элементы массива форматируются как обычно. Типы `Date` и `DateTime` записываются в одинарных кавычках. Строки записываются в одинарных кавычках с теми же правилами экранирования, что и выше.

[NULL](/docs/ru/reference/syntax) форматируется в соответствии с настройкой [format\_tsv\_null\_representation](/docs/ru/reference/settings/formats#format_tsv_null_representation) (значение по умолчанию — `\N`).

Во входных данных значения ENUM могут быть представлены как именами, так и идентификаторами. Сначала мы пытаемся сопоставить входное значение с именем ENUM. Если это не удаётся и входное значение является числом, мы пытаемся сопоставить это число с идентификатором ENUM.
Если входные данные содержат только идентификаторы ENUM, рекомендуется включить настройку [input\_format\_tsv\_enum\_as\_number](/docs/ru/reference/settings/formats#input_format_tsv_enum_as_number) для оптимизации разбора ENUM.

Каждый элемент структур [Nested](/docs/ru/reference/data-types/nested-data-structures/index) представлен в виде массива.

Например:

```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']
```

<div id="example-usage">
  ## Пример использования
</div>

<div id="inserting-data">
  ### Вставка данных
</div>

Используйте следующий файл в формате TSV с именем `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
```

Вставьте данные:

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

<div id="reading-data">
  ### Чтение данных
</div>

Прочитайте данные в формате `TabSeparated`:

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

Вывод будет в формате с разделителями табуляции:

```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
```

<div id="format-settings">
  ## Настройки формата
</div>

| Параметр                                                                                                                                      | Описание                                                                                                                                                                                                                                                                         | По умолчанию |
| --------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ |
| [`format_tsv_null_representation`](/docs/ru/reference/settings/formats#format_tsv_null_representation)                                             | Настраиваемое представление значения NULL в формате TSV.                                                                                                                                                                                                                         | `\N`         |
| [`input_format_tsv_empty_as_default`](/docs/ru/reference/settings/formats#input_format_tsv_empty_as_default)                                       | считать пустые поля во входных данных TSV значениями по умолчанию. Для сложных выражений со значениями по умолчанию также должен быть включен параметр [input\_format\_defaults\_for\_omitted\_fields](/docs/ru/reference/settings/formats#input_format_defaults_for_omitted_fields). | `false`      |
| [`input_format_tsv_enum_as_number`](/docs/ru/reference/settings/formats#input_format_tsv_enum_as_number)                                           | интерпретировать вставленные значения enum в форматах TSV как индексы enum.                                                                                                                                                                                                      | `false`      |
| [`input_format_tsv_use_best_effort_in_schema_inference`](/docs/ru/reference/settings/formats#input_format_tsv_use_best_effort_in_schema_inference) | использовать дополнительные настройки и эвристики для определения схемы в формате TSV. Если параметр отключен, все поля будут определены как String.                                                                                                                             | `true`       |
| [`output_format_tsv_crlf_end_of_line`](/docs/ru/reference/settings/formats#output_format_tsv_crlf_end_of_line)                                     | если установлено значение true, окончанием строки в выходном формате TSV будет `\r\n` вместо `\n`.                                                                                                                                                                               | `false`      |
| [`input_format_tsv_crlf_end_of_line`](/docs/ru/reference/settings/formats#input_format_tsv_crlf_end_of_line)                                       | если установлено значение true, окончанием строки во входном формате TSV будет `\r\n` вместо `\n`.                                                                                                                                                                               | `false`      |
| [`input_format_tsv_skip_first_lines`](/docs/ru/reference/settings/formats#input_format_tsv_skip_first_lines)                                       | пропускать указанное количество строк в начале данных.                                                                                                                                                                                                                           | `0`          |
| [`input_format_tsv_detect_header`](/docs/ru/reference/settings/formats#input_format_tsv_detect_header)                                             | автоматически определять заголовок с именами и типами в формате TSV.                                                                                                                                                                                                             | `true`       |
| [`input_format_tsv_skip_trailing_empty_lines`](/docs/ru/reference/settings/formats#input_format_tsv_skip_trailing_empty_lines)                     | пропускать пустые строки в конце данных.                                                                                                                                                                                                                                         | `false`      |
| [`input_format_tsv_allow_variable_number_of_columns`](/docs/ru/reference/settings/formats#input_format_tsv_allow_variable_number_of_columns)       | разрешить переменное количество столбцов в формате TSV, игнорировать лишние столбцы и использовать значения по умолчанию для отсутствующих столбцов.                                                                                                                             | `false`      |
