Перейти к основному содержимому
Перейти к основному содержимому

TabSeparated

InputOutputAlias
TSV

Description

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

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

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

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

Data Formatting

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

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

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

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

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

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

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

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

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

NULL форматируется в соответствии с настройкой format_tsv_null_representation (значение по умолчанию \N).

В входных данных значения ENUM могут представляться как именами, так и id. Сначала мы пытаемся сопоставить входное значение с именем ENUM. Если это не удается и входное значение является числом, мы пытаемся сопоставить это число с id ENUM. Если входные данные содержат только id ENUM, рекомендуется включить настройку input_format_tsv_enum_as_number, чтобы оптимизировать парсинг ENUM.

Каждый элемент структур Nested представлен как массив.

Например:

Example Usage

Format Settings

SettingDescriptionDefault
format_tsv_null_representationПользовательское представление NULL в формате TSV.\N
input_format_tsv_empty_as_defaultтрактовать пустые поля во входных данных TSV как значения по умолчанию. Для сложных выражений по умолчанию input_format_defaults_for_omitted_fields также должны быть включены.false
input_format_tsv_enum_as_numberтрактовать вставленные значения перечисления в форматах TSV как индексы перечислений.false
input_format_tsv_use_best_effort_in_schema_inferenceиспользовать некоторые настройки и эвристики для вывода схемы в формате TSV. Если отключено, все поля будут интерпретированы как строки.true
output_format_tsv_crlf_end_of_lineесли установлено в true, конец строки в формате выходного TSV будет \r\n, а не \n.false
input_format_tsv_crlf_end_of_lineесли установлено в true, конец строки в формате входного TSV будет \r\n, а не \n.false
input_format_tsv_skip_first_linesпропустить указанное количество строк в начале данных.0
input_format_tsv_detect_headerавтоматически обнаружить заголовок с именами и типами в формате TSV.true
input_format_tsv_skip_trailing_empty_linesпропустить завершающие пустые строки в конце данных.false
input_format_tsv_allow_variable_number_of_columnsразрешить переменное количество столбцов в формате TSV, игнорировать лишние столбцы и использовать значения по умолчанию для отсутствующих столбцов.false