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

Avro

Входные данныеВыходные данныеПсевдоним

Описание

Apache Avro — это фреймворк сериализации данных, ориентированный на строки, разработанный в рамках проекта Hadoop от Apache. Формат Avro в ClickHouse поддерживает чтение и запись файлов данных Avro.

Соответствие типов данных

Таблица ниже показывает все типы данных, поддерживаемые форматом Apache Avro, и соответствующие им типы данных ClickHouse в запросах INSERT и SELECT.

Тип данных Avro INSERTТип данных ClickHouseТип данных Avro SELECT
boolean, int, long, float, doubleInt(8\16\32), UInt(8\16\32)int
boolean, int, long, float, doubleInt64, UInt64long
boolean, int, long, float, doubleFloat32float
boolean, int, long, float, doubleFloat64double
bytes, string, fixed, enumStringbytes или string *
bytes, string, fixedFixedString(N)fixed(N)
enumEnum(8\16)enum
array(T)Array(T)array(T)
map(V, K)Map(V, K)map(string, K)
union(null, T), union(T, null)Nullable(T)union(null, T)
union(T1, T2, …) **Variant(T1, T2, …)union(T1, T2, …) **
nullNullable(Nothing)null
int (date) ***Date, Date32int (date) ***
long (timestamp-millis) ***DateTime64(3)long (timestamp-millis) ***
long (timestamp-micros) ***DateTime64(6)long (timestamp-micros) ***
bytes (decimal) ***DateTime64(N)bytes (decimal) ***
intIPv4int
fixed(16)IPv6fixed(16)
bytes (decimal) ***Decimal(P, S)bytes (decimal) ***
string (uuid) ***UUIDstring (uuid) ***
fixed(16)Int128/UInt128fixed(16)
fixed(32)Int256/UInt256fixed(32)
recordTuplerecord

* bytes является значением по умолчанию, контролируемым настройкой output_format_avro_string_column_pattern

** Тип Variant неявно принимает null как значение поля, поэтому, например, Avro union(T1, T2, null) будет преобразован в Variant(T1, T2). В результате, при генерации Avro из ClickHouse, мы должны всегда включать тип null в набор типов Avro union, так как мы не знаем, является ли какое-либо значение на самом деле null во время вывода схемы.

*** Логические типы Avro

Неподдерживаемые логические типы данных Avro:

  • time-millis
  • time-micros
  • duration

Пример использования

Вставка данных

Чтобы вставить данные из файла Avro в таблицу ClickHouse:

Корневая схема импортируемого файла Avro должна быть типа record.

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

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

При импорте данных, когда поле не найдено в схеме и установлен параметр input_format_avro_allow_missing_fields, будет использовано значение по умолчанию вместо генерации ошибки.

Выбор данных

Чтобы выбрать данные из таблицы ClickHouse в файл Avro:

Имена колонок должны:

  • Начинаться с [A-Za-z_]
  • Быть продолжены только [A-Za-z0-9_]

Сжатие выходного файла Avro и интервал синхронизации можно настроить с помощью параметров output_format_avro_codec и output_format_avro_sync_interval соответственно.

Пример данных

Используя функцию ClickHouse DESCRIBE, вы можете быстро просмотреть выводимый формат файла Avro, как в следующем примере. Этот пример включает URL общедоступного файла Avro в публичном бакете ClickHouse S3:

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

НастройкаОписаниеЗначение по умолчанию
input_format_avro_allow_missing_fieldsДля формата Avro/AvroConfluent: если поле не найдено в схеме, использовать значение по умолчанию вместо ошибки0
input_format_avro_null_as_defaultДля формата Avro/AvroConfluent: вставить значение по умолчанию в случае null и ненулевой колонки0
format_avro_schema_registry_urlДля формата AvroConfluent: URL реестра схем Confluent.
output_format_avro_codecКодек сжатия, используемый для вывода. Возможные значения: 'null', 'deflate', 'snappy', 'zstd'.
output_format_avro_sync_intervalИнтервал синхронизации в байтах.16384
output_format_avro_string_column_patternДля формата Avro: регулярное выражение для строковых колонок, которые следует выбрать как AVRO строку.
output_format_avro_rows_in_fileМаксимум строк в файле (если допускается хранилищем)1