Форматы для входных и выходных данных
ClickHouse поддерживает большинство известных текстовых и бинарных форматов данных. Это позволяет легко интегрироваться почти в любой рабочий конвейер данных для использования преимуществ ClickHouse.
Форматы входных данных
Форматы входных данных используются для:
- Парсинга данных, предоставленных в операторах
INSERT
- Выполнения запросов
SELECT
из таблиц с файловой поддержкой, таких какFile
,URL
илиHDFS
- Чтения словарей
Выбор правильного формата входных данных критически важен для эффективного приема данных в ClickHouse. С более чем 70 поддерживаемыми форматами, выбор наиболее производительного варианта может значительно повлиять на скорость вставки, использование CPU и памяти, а также общую эффективность системы. Чтобы помочь с выбором, мы провели бенчмаркинг производительности загрузки данных по форматам, выявив ключевые моменты:
- Формат Native является наиболее эффективным входным форматом, предлагая лучшее сжатие, наименьшие затраты ресурсов и минимальные накладные расходы на обработку на стороне сервера.
- Сжатие имеет решающее значение - LZ4 уменьшает размер данных с минимальными затратами CPU, в то время как ZSTD предлагает более высокое сжатие за счет дополнительных затрат CPU.
- Предварительная сортировка оказывает умеренное влияние, так как ClickHouse уже сортирует данные эффективно.
- Пакетная обработка значительно повышает эффективность - большие пакеты уменьшают накладные расходы на вставку и улучшают пропускную способность.
Для глубокого понимания результатов и лучших практик, прочитайте полный анализ бенчмаркинга. Для полного тестирования результатов исследуйте онлайн-дошборд FastFormats.
Форматы выходных данных
Поддерживаемые форматы выходных данных используются для:
- Организации результатов запроса
SELECT
- Выполнения операций
INSERT
в таблицы с файловой поддержкой
Обзор форматов
Поддерживаемые форматы:
Вы можете управлять некоторыми параметрами обработки форматов с помощью настроек ClickHouse. Для получения дополнительной информации прочитайте раздел Настройки.
TabSeparated
См. TabSeparated
TabSeparatedRaw
См. TabSeparatedRaw
TabSeparatedWithNames
TabSeparatedWithNamesAndTypes
См. TabSeparatedWithNamesAndTypes
TabSeparatedRawWithNames
TabSeparatedRawWithNamesAndTypes
См. TabSeparatedRawWithNamesAndTypes
Template
См. Template
TemplateIgnoreSpaces
TSKV
См. TSKV
CSV
См. CSV
CSVWithNames
См. CSVWithNames
CSVWithNamesAndTypes
CustomSeparated
См. CustomSeparated
CustomSeparatedWithNames
CustomSeparatedWithNamesAndTypes
См. CustomSeparatedWithNamesAndTypes
SQLInsert
См. SQLInsert
JSON
См. JSON
JSONStrings
См. JSONStrings
JSONColumns
См. JSONColumns
JSONColumnsWithMetadata
JSONAsString
См. JSONAsString
JSONAsObject
См. JSONAsObject
JSONCompact
См. JSONCompact
JSONCompactStrings
JSONCompactColumns
JSONEachRow
См. JSONEachRow
PrettyJSONEachRow
JSONStringsEachRow
JSONCompactEachRow
JSONCompactStringsEachRow
JSONEachRowWithProgress
JSONStringsEachRowWithProgress
См. JSONStringsEachRowWithProgress
JSONCompactEachRowWithNames
См. JSONCompactEachRowWithNames
JSONCompactEachRowWithNamesAndTypes
См. JSONCompactEachRowWithNamesAndTypes
JSONCompactEachRowWithProgress
Похож на JSONEachRowWithProgress
, но выводит события row
в компактной форме, как в формате JSONCompactEachRow
.
JSONCompactStringsEachRowWithNames
См. JSONCompactStringsEachRowWithNames
JSONCompactStringsEachRowWithNamesAndTypes
См. JSONCompactStringsEachRowWithNamesAndTypes
JSONObjectEachRow
Настройки формата JSON
BSONEachRow
См. BSONEachRow
Native
См. Native
Null
См. Null
Hash
См. Hash
Pretty
См. Pretty
PrettyNoEscapes
См. PrettyNoEscapes
PrettyMonoBlock
См. PrettyMonoBlock
PrettyNoEscapesMonoBlock
PrettyCompact
См. PrettyCompact
PrettyCompactNoEscapes
PrettyCompactMonoBlock
PrettyCompactNoEscapesMonoBlock
См. PrettyCompactNoEscapesMonoBlock
PrettySpace
См. PrettySpace
PrettySpaceNoEscapes
PrettySpaceMonoBlock
PrettySpaceNoEscapesMonoBlock
См. PrettySpaceNoEscapesMonoBlock
RowBinary
См. RowBinary
RowBinaryWithNames
RowBinaryWithNamesAndTypes
См. RowBinaryWithNamesAndTypes
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
используют разделитель после последнего столбца и разделитель между строками, чтобы найти начало следующей строки, поэтому пропуск ошибок работает только если хотя бы один из них не пуст.