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

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

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

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

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

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

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

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

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

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