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, если она состоит точно из 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 |