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

TabSeparated

ВходВыходПсевдоним
TSV

Описание

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

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

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

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

Форматирование данных

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

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

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

В качестве исключения поддерживается разбор дат с временем также в формате Unix timestamp, если он состоит ровно из 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 могут быть представлены как именами, так и идентификаторами. Сначала мы пытаемся сопоставить входное значение с именем ENUM. Если не удается, и входное значение является числом, мы пытаемся сопоставить это число с идентификатором ENUM. Если входные данные содержат только идентификаторы ENUM, рекомендуется включить настройку input_format_tsv_enum_as_number для оптимизации разбора ENUM.

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

Например:

Пример использования

Настройки формата

НастройкаОписаниеПо умолчанию
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рассматривать вставленные значения enum в форматах TSV как индексы enum.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