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

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

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
Hash
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

Hash

См. Hash

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 используют разделитель после последнего столбца и разделитель между строками, чтобы найти начало следующей строки, поэтому пропуск ошибок работает только если хотя бы один из них не пуст.