Автор: Хао Ли (@lihaosky) | Целевая версия: 0.24.0; 7.2.0 | Статус: объединён | Обсуждение: проблема, GitHub PR1
Краткое содержание: Этот KLIP вводит key_schema_id
и value_schema_id
в операторах C*AS
и описывает ожидаемое поведение различных команд.
Как обсуждалось в этой проблеме, основная мотивация заключается в том, чтобы позволить пользователям указывать key_schema_id
или value_schema_id
в CAS
и CS/CT
операторах, чтобы существующие схемы в реестре схем можно было повторно использовать для создания логических схем и сериализации данных для вновь определённого источника данных.
Основные преимущества:
CREATE
, что может быть чревато ошибками.KEY_SCHEMA_FULL_NAME
и VALUE_SCHEMA_FULL_NAME
, чтобы контролировать полное имя схемы для форматов AVRO и PROTOBUF.key_schema_id
и value_schema_id
в операторах CAS и CS/CT с соответствующей проверкой.CREATE STREAM stream_name WITH (key_schema_id=1, value_schema_id=2, key_format='avro', value_format='avro') AS
SELECT key, field1, field_2 FROM source_stream
EMIT CHANGES;
CREATE TABLE table_name WITH (key_schema_id=1, value_scheme_id=2, key_format='avro', value_format='avro') AS
SELECT key, COUNT(field1) AS count_field FROM source_stream
GROUP BY key;
CREATE STREAM stream_name WITH (kafka_topic='topic_name', key_schema_id=1, value_schema_id=2,
partitions=1, key_format='avro', value_format='avro');
CREATE TABLE table_name WITH (kafka_topic='table_name', key_schema_id=1, value_schema_id=2,
partions=1, key_format='avro', value_format='avro');
Команда CS/CT:
Команда CAS:
Если свойство format не указано, оно будет выведено из формата источника запроса и должно соответствовать формату, полученному с использованием идентификатора схемы.
Схема с указанным идентификатором должна существовать в реестре схем, иначе будет выдано исключение.
Совместимость Пользователи могут использовать _schema_id с проекцией выбора в команде CAS. Например: CREATE STREAM stream_name WITH (kafka_topic='topic_name', key_schema_id=1, value_schema_id=2, partitions=1, key_format='avro', value_format='avro') AS SELECT * FROM source_stream; В этой ситуации схема из реестра схем должна быть надмножеством проекции выбора, а порядок полей должен совпадать. Обратите внимание, что при проверке совместимости не имеет значения, является ли поле обязательным или необязательным в физической схеме. Это может дать пользователю больше гибкости для использования большего количества схем. В противном случае поля схемы могут быть только необязательными, поскольку все поля в ksqlDB являются необязательными. Также разрешено, чтобы схема из реестра схем имела больше полей. В настоящее время мы не требуем, чтобы эти поля были необязательными. В случае, если требуются дополнительные поля, во время вставки значений может возникнуть ошибка сериализации, поскольку схема значений будет основана на схеме проекции запроса. Мы ожидаем, что пользователи, использующие идентификатор схемы, будут опытными пользователями и будут нести ответственность за обеспечение работоспособности сериализации.
Схема, указанная с помощью идентификатора схемы, будет найдена и извлечена из реестра схем. Затем она будет переведена в столбцы ksqlDB:
Идентификатор схемы, определённый в операторе создания источника, будет сохранён в ksqlDB. Во время сериализации данных данные сначала будут созданы с исходной логической схемой, а затем перезаписаны в соответствии с физической схемой, полученной с использованием идентификатора схемы. Перезапись данных может завершиться неудачей, если логическая и физическая схемы несовместимы. Например, если поле, определённое в физической схеме, обязательно, но может быть необязательным в ksqlDB, то перезапись с использованием null в качестве значения поля завершится неудачно. После перезаписи данных с использованием физической схемы данные можно сериализовать с помощью сериализатора соответствующего формата. Обратите внимание, что базовый сериализатор будет настроен на использование предоставленного нами идентификатора схемы для поиска схемы и использования физической схемы для сериализации.
Данные будут десериализованы с использованием физической схемы, используемой для сериализации. Когда данные преобразуются в данные ksqlDB, они будут преобразованы с использованием логической схемы источника. Поскольку физическая схема является надмножеством логической схемы, а поля логической схемы являются необязательными, мы ожидаем, что данные всегда могут быть успешно преобразованы.
Тесты для следующего: Переводчик схемы не использует заглавные буквы в именах полей, если в источнике установлен идентификатор схемы. Создание утверждений.
Обновления документации. Добавьте недавно поддерживаемые свойства в:
Последствия совместимости. В кодовой базе ksqlDB существуют свойства key_schema_id и value_schema_id, и можно использовать утверждение CREATE с ними. Возможно, уже есть команды, которые их использовали, но эти команды следует дополнить и записать в тему команд без этих свойств. В результате добавление дополнительных проверок валидации или изменение способа обработки свойств не вызовет проблем с совместимостью.
Последствия для безопасности. Нет.
Ссылки. [1]: Avro Kafka Serializer.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )