AvroConfluent
| Input | Output | Alias | 
|---|---|---|
| ✔ | ✗ | 
Описание
AvroConfluent поддерживает декодирование сообщении Avro с одним объектом, которые обычно используются с Kafka и Confluent Schema Registry. Каждый Avro-сообщение включает в себя ID схемы, который может быть разрешен до фактической схемы с помощью Schema Registry. Схемы кэшируются после разрешения.
Сопоставление типов данных
Таблица ниже показывает все типы данных, поддерживаемые форматом Apache Avro, и соответствующие им типы данных ClickHouse в запросах INSERT и SELECT.
| Тип данных Avro INSERT | Тип данных ClickHouse | Тип данных Avro SELECT | 
|---|---|---|
| boolean,int,long,float,double | Int(8\16\32), UInt(8\16\32) | int | 
| boolean,int,long,float,double | Int64, UInt64 | long | 
| boolean,int,long,float,double | Float32 | float | 
| boolean,int,long,float,double | Float64 | double | 
| bytes,string,fixed,enum | String | bytesилиstring* | 
| bytes,string,fixed | FixedString(N) | fixed(N) | 
| enum | Enum(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, …)** | 
| null | Nullable(Nothing) | null | 
| int (date)*** | Date, Date32 | int (date)*** | 
| long (timestamp-millis)*** | DateTime64(3) | long (timestamp-millis)*** | 
| long (timestamp-micros)*** | DateTime64(6) | long (timestamp-micros)*** | 
| bytes (decimal)*** | DateTime64(N) | bytes (decimal)*** | 
| int | IPv4 | int | 
| fixed(16) | IPv6 | fixed(16) | 
| bytes (decimal)*** | Decimal(P, S) | bytes (decimal)*** | 
| string (uuid)*** | UUID | string (uuid)*** | 
| fixed(16) | Int128/UInt128 | fixed(16) | 
| fixed(32) | Int256/UInt256 | fixed(32) | 
| record | Tuple | record | 
* bytes является значением по умолчанию, контролируемым настройкой output_format_avro_string_column_pattern
**  Тип Variant неявно принимает null как значение поля, поэтому, например, Avro union(T1, T2, null) будет преобразован в Variant(T1, T2). В результате, при генерации Avro из ClickHouse, мы должны всегда включать тип null в набор типов Avro union, так как мы не знаем, является ли какое-либо значение на самом деле null во время вывода схемы.
Неподдерживаемые логические типы данных Avro:
- time-millis
- time-micros
- duration
Пример использования
Чтобы быстро проверить разрешение схемы, вы можете использовать kafkacat с clickhouse-local:
Чтобы использовать AvroConfluent с Kafka:
Настройки формата
URL Schema Registry настраивается с помощью format_avro_schema_registry_url.
Установка format_avro_schema_registry_url должна быть настроена в users.xml, чтобы сохранить свое значение после перезагрузки. Также вы можете использовать настройку format_avro_schema_registry_url движка таблиц Kafka.
| Настройка | Описание | Значение по умолчанию | 
|---|---|---|
| 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 Schema Registry. | 
