TabSeparated
Input | Output | Alias |
---|---|---|
✔ | ✔ | 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
Setting | Description | Default |
---|---|---|
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 |