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

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

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

ClickHouse поддерживает большинство известных текстовых и бинарных форматов данных. Это позволяет легко интегрироваться в практически любой рабочий конвейер данных, чтобы воспользоваться преимуществами ClickHouse.

Форматы ввода

Форматы ввода используются для:

  • Парсинга данных, предоставляемых в операциях INSERT
  • Выполнения запросов SELECT из таблиц, основанных на файлах, таких как File, URL или HDFS
  • Чтения словарей

Выбор правильного формата ввода имеет решающее значение для эффективного приёма данных в ClickHouse. С более чем 70 поддерживаемыми форматами выбор наиболее производительного варианта может значительно повлиять на скорость вставки, использование CPU и памяти, а также на общую эффективность системы. Чтобы помочь с этим выбором, мы провели бенчмаркинг производительности ввода по форматам, выявив ключевые выводы:

  • Формат Native является наиболее эффективным форматом ввода, предлагая лучшее сжатие, минимальное использование ресурсов и минимальные накладные расходы на обработку на стороне сервера.
  • Сжатие имеет решающее значение - LZ4 уменьшает размер данных с минимальными затратами CPU, в то время как ZSTD предлагает более высокое сжатие за счёт дополнительных затрат CPU.
  • Предварительная сортировка имеет умеренное влияние, так как ClickHouse уже эффективно сортирует.
  • Пакетная загрузка значительно улучшает эффективность - более крупные пакеты снижают накладные расходы на вставку и увеличивают пропускную способность.

Для глубокого анализа результатов и лучших практик читайте полный анализ бенчмаркинга. Для ознакомления с полными результатами тестов исследуйте онлайн-дашборд FastFormats.

Форматы вывода

Поддерживаемые форматы вывода используются для:

  • Организации результатов запроса SELECT
  • Выполнения операций INSERT в таблицы, основанные на файлах

Обзор форматов

Поддерживаемые форматы:

ФорматВводВывод
TabSeparated
TabSeparatedRaw
TabSeparatedWithNames
TabSeparatedWithNamesAndTypes
TabSeparatedRawWithNames
TabSeparatedRawWithNamesAndTypes
Template
TemplateIgnoreSpaces
CSV
CSVWithNames
CSVWithNamesAndTypes
CustomSeparated
CustomSeparatedWithNames
CustomSeparatedWithNamesAndTypes
SQLInsert
Values
Vertical
JSON
JSONAsString
JSONAsObject
JSONStrings
JSONColumns
JSONColumnsWithMetadata
JSONCompact
JSONCompactStrings
JSONCompactColumns
JSONEachRow
PrettyJSONEachRow
JSONEachRowWithProgress
JSONStringsEachRow
JSONStringsEachRowWithProgress
JSONCompactEachRow
JSONCompactEachRowWithNames
JSONCompactEachRowWithNamesAndTypes
JSONCompactEachRowWithProgress
JSONCompactStringsEachRow
JSONCompactStringsEachRowWithNames
JSONCompactStringsEachRowWithNamesAndTypes
JSONCompactStringsEachRowWithProgress
JSONObjectEachRow
BSONEachRow
TSKV
Pretty
PrettyNoEscapes
PrettyMonoBlock
PrettyNoEscapesMonoBlock
PrettyCompact
PrettyCompactNoEscapes
PrettyCompactMonoBlock
PrettyCompactNoEscapesMonoBlock
PrettySpace
PrettySpaceNoEscapes
PrettySpaceMonoBlock
PrettySpaceNoEscapesMonoBlock
Prometheus
Protobuf
ProtobufSingle
ProtobufList
Avro
AvroConfluent
Parquet
ParquetMetadata
Arrow
ArrowStream
ORC
One
Npy
RowBinary
RowBinaryWithNames
RowBinaryWithNamesAndTypes
RowBinaryWithDefaults
Native
Null
XML
CapnProto
LineAsString
Regexp
RawBLOB
MsgPack
MySQLDump
DWARF
Markdown
Form

Вы можете контролировать некоторые параметры обработки формата с помощью настроек ClickHouse. Для получения дополнительной информации смотрите раздел Настройки.

TabSeparated

Смотрите TabSeparated

TabSeparatedRaw

Смотрите TabSeparatedRaw

TabSeparatedWithNames

Смотрите TabSeparatedWithNames

TabSeparatedWithNamesAndTypes

Смотрите TabSeparatedWithNamesAndTypes

TabSeparatedRawWithNames

Смотрите TabSeparatedRawWithNames

TabSeparatedRawWithNamesAndTypes

Смотрите TabSeparatedRawWithNamesAndTypes

Template

Смотрите Template

TemplateIgnoreSpaces

Смотрите TemplateIgnoreSpaces

TSKV

Смотрите TSKV

CSV

Смотрите CSV

CSVWithNames

Смотрите CSVWithNames

CSVWithNamesAndTypes

Смотрите CSVWithNamesAndTypes

CustomSeparated

Смотрите CustomSeparated

CustomSeparatedWithNames

Смотрите CustomSeparatedWithNames

CustomSeparatedWithNamesAndTypes

Смотрите CustomSeparatedWithNamesAndTypes

SQLInsert

Смотрите SQLInsert

JSON

Смотрите JSON

JSONStrings

Смотрите JSONStrings

JSONColumns

Смотрите JSONColumns

JSONColumnsWithMetadata

Смотрите JSONColumnsWithMetadata

JSONAsString

Смотрите JSONAsString

JSONAsObject

Смотрите JSONAsObject

JSONCompact

Смотрите JSONCompact

JSONCompactStrings

Смотрите JSONCompactStrings

JSONCompactColumns

Смотрите JSONCompactColumns

JSONEachRow

Смотрите JSONEachRow

PrettyJSONEachRow

Смотрите PrettyJSONEachRow

JSONStringsEachRow

Смотрите JSONStringsEachRow

JSONCompactEachRow

Смотрите JSONCompactEachRow

JSONCompactStringsEachRow

Смотрите JSONCompactStringsEachRow

JSONEachRowWithProgress

Смотрите JSONEachRowWithProgress

JSONStringsEachRowWithProgress

Смотрите JSONStringsEachRowWithProgress

JSONCompactEachRowWithNames

Смотрите JSONCompactEachRowWithNames

JSONCompactEachRowWithNamesAndTypes

Смотрите JSONCompactEachRowWithNamesAndTypes

JSONCompactEachRowWithProgress

Аналогично JSONEachRowWithProgress, но выводит события row в компактном формате, как в формате JSONCompactEachRow.

JSONCompactStringsEachRowWithNames

Смотрите JSONCompactStringsEachRowWithNames

JSONCompactStringsEachRowWithNamesAndTypes

Смотрите JSONCompactStringsEachRowWithNamesAndTypes

JSONObjectEachRow

Смотрите JSONObjectEachRow

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

Смотрите Настройки JSON форматов

BSONEachRow

Смотрите BSONEachRow

Native

Смотрите Native

Null

Смотрите Null

Pretty

Смотрите Pretty

PrettyNoEscapes

Смотрите PrettyNoEscapes

PrettyMonoBlock

Смотрите PrettyMonoBlock

PrettyNoEscapesMonoBlock

Смотрите PrettyNoEscapesMonoBlock

PrettyCompact

Смотрите PrettyCompact

PrettyCompactNoEscapes

Смотрите PrettyCompactNoEscapes

PrettyCompactMonoBlock

Смотрите PrettyCompactMonoBlock

PrettyCompactNoEscapesMonoBlock

Смотрите PrettyCompactNoEscapesMonoBlock

PrettySpace

Смотрите PrettySpace

PrettySpaceNoEscapes

Смотрите PrettySpaceNoEscapes

PrettySpaceMonoBlock

Смотрите PrettySpaceMonoBlock

PrettySpaceNoEscapesMonoBlock

Смотрите PrettySpaceNoEscapesMonoBlock

RowBinary

Смотрите RowBinary

RowBinaryWithNames

Смотрите RowBinaryWithNames

RowBinaryWithNamesAndTypes

Смотрите RowBinaryWithNamesAndTypes

RowBinaryWithDefaults

Смотрите RowBinaryWithDefaults

Values

Смотрите Values

Vertical

Смотрите Vertical

XML

Смотрите XML

CapnProto

Смотрите CapnProto

Prometheus

Смотрите Prometheus

Protobuf

Смотрите Protobuf

ProtobufSingle

Смотрите ProtobufSingle

ProtobufList

Смотрите ProtobufList

Avro

Смотрите Avro

AvroConfluent

Смотрите AvroConfluent

Parquet

Смотрите Parquet

ParquetMetadata

Смотрите ParquetMetadata

Arrow

Смотрите Arrow

ArrowStream

Смотрите ArrowStream

ORC

Смотрите ORC

One

Смотрите One

Npy

Смотрите Npy

LineAsString

Смотрите:

Regexp

Смотрите Regexp

RawBLOB

Смотрите RawBLOB

Markdown

Смотрите Markdown

MsgPack

Смотрите MsgPack

MySQLDump

Смотрите MySQLDump

DWARF

Смотрите Dwarf

Form

Смотрите Form

Схема формата

Имя файла, содержащего схему формата, задаётся с помощью настройки format_schema. Необходимо установить эту настройку при использовании одного из форматов Cap'n Proto и Protobuf. Схема формата — это комбинация имени файла и названия типа сообщения в этом файле, разделённых двоеточием, например, schemafile.proto:MessageType. Если файл имеет стандартное расширение для формата (например, .proto для Protobuf), его можно опустить, и в этом случае схема формата выглядит как schemafile:MessageType.

Если вы вводите или выводите данные через клиент в интерактивном режиме, то имя файла, указанное в схеме формата, может содержать абсолютный путь или путь относительно текущего каталога на клиенте. Если вы используете клиент в пакетном режиме, путь к схеме должен быть относительным по соображениям безопасности.

Если вы вводите или выводите данные через HTTP интерфейс, имя файла, указанное в схеме формата, должно находиться в каталоге, указанном в format_schema_path в конфигурации сервера.

Пропуск ошибок

Некоторые форматы, такие как CSV, TabSeparated, TSKV, JSONEachRow, Template, CustomSeparated и Protobuf, могут пропускать повреждённые строки, если произошла ошибка парсинга и продолжать парсинг с начала следующей строки. Смотрите настройки input_format_allow_errors_num и input_format_allow_errors_ratio. Ограничения:

  • В случае ошибки парсинга JSONEachRow пропускает все данные до новой строки (или EOF), поэтому строки должны быть разделены \n, чтобы правильно подсчитать ошибки.
  • Template и CustomSeparated используют разделитель после последнего столбца и разделитель между строками для определения начала следующей строки, поэтому пропуск ошибок работает только в том случае, если хотя бы один из них не пуст.