TabSeparated
Input | Output | Alias |
---|---|---|
✔ | ✔ | 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
автоматически различаются.
Строки выводятся с экранированными специальными символами с помощью обратной косой черты. Для вывода используются следующие escape-последовательности: \b
, \f
, \r
, \n
, \t
, \0
, \'
, \\
. Парсинг также поддерживает последовательности \a
, \v
и \xHH
(шестнадцатеричные escape-последовательности) и любые последовательности \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 представлен как массив.
Например:
Пример использования
Вставка данных
Используя следующий tsv файл, названный football.tsv
:
Вставьте данные:
Чтение данных
Чтение данных с использованием формата TabSeparated
:
Вывод будет в формате, разделенном табуляцией:
Настройки формата
Настройка | Описание | По умолчанию |
---|---|---|
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 |