Форматы для ввода и вывода данных
Форматы для ввода и вывода данных
ClickHouse поддерживает большинство известных текстовых и бинарных форматов данных. Это обеспечивает простую интеграцию почти в любые рабочие потоки данных, чтобы использовать преимущества ClickHouse.
Форматы ввода
Форматы ввода используются для:
- Разбор данных, предоставленных в операторе
INSERT
- Выполнения
SELECT
запросов из таблиц, основанных на файлах, таких какFile
,URL
илиHDFS
- Чтения словарей
Выбор правильного формата ввода является критически важным для эффективной загрузки данных в ClickHouse. С учетом более 70 поддерживаемых форматов, выбор наиболее производительного варианта может значительно повлиять на скорость вставки, использование CPU и памяти, а также общую эффективность системы. Чтобы помочь с этими выборами, мы провели бенчмаркинг производительности загрузки по форматам, выявив ключевые выводы:
- Формат Native является самым эффективным форматом ввода, предлагая лучшее сжатие, наименьшее потребление ресурсов и минимальные накладные расходы на сервере.
- Сжатие является важным - LZ4 уменьшает размер данных с минимальными затратами CPU, в то время как ZSTD предлагает более высокое сжатие за счет дополнительных затрат CPU.
- Предварительная сортировка имеет умеренное влияние, так как ClickHouse уже сортирует эффективно.
- Пакетирование значительно улучшает эффективность - более крупные пакеты уменьшают накладные расходы на вставку и улучшают пропускную способность.
Для подробного ознакомления с результатами и лучшими практиками, читайте полный анализ бенчмаркинга. Для получения полных результатов тестирования, исследуйте доску online 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
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
используют разделитель после последнего столбца и разделитель между строками, чтобы найти начало следующей строки, таким образом, пропуск ошибок работает только если хотя бы один из них не пустой.