ksql json имя поля с тире (-) - PullRequest
       10

ksql json имя поля с тире (-)

0 голосов
/ 02 ноября 2018

Одно из имен полей в моем JSON - это «Агент пользователя». KSQL не нравится тире, когда я пытаюсь создать поток с таким именем поля. Я пробовал одинарные, двойные кавычки, избегая их разными способами - не повезло.

Как мне получить это поле от json в теме, чтобы быть в потоке KSQL?

Вот журнал некоторых моих попыток:

ksql> create stream tmpstream (startTimeEpoch bigint, type VARCHAR, src VARCHAR, 'user-agent' varchar) with (KAFKA_TOPIC='foo', VALUE_FORMAT='JSON');
line 1:76: extraneous input ''user-agent'' expecting {'ADD', ...}

ksql> create stream tmpstream (startTimeEpoch bigint, type VARCHAR, src VARCHAR, user-agent varchar) with (KAFKA_TOPIC='foo', VALUE_FORMAT='JSON');
line 1:80: extraneous input '-' expecting {'ADD', ...}

ksql> create stream tmpstream (startTimeEpoch bigint, type VARCHAR, src VARCHAR, "user-agent" varchar) with (KAFKA_TOPIC='foo', VALUE_FORMAT='JSON');

 Message
----------------
 Stream created
----------------
ksql> select * from tmpstream;
Code generation failed for SelectValueMapper
Caused by: Line 1, Column 15: Expression "TMPSTREAM_user" is not an rvalue

ksql> drop stream tmpstream;
 Message
--------------------------------
 Source TMPSTREAM was dropped.
--------------------------------
ksql> create stream tmpstream (startTimeEpoch bigint, type VARCHAR, src VARCHAR, "user\-agent" varchar) with (KAFKA_TOPIC='foo', VALUE_FORMAT='JSON');

 Message
----------------
 Stream created
----------------
ksql> select * from tmpstream;
Code generation failed for SelectValueMapper
Caused by: Line 1, Column 15: Expression "TMPSTREAM_user" is not an rvalue

1 Ответ

0 голосов
/ 03 ноября 2018

К сожалению, использование тире в имени поля не поддерживается.

Проблемы с KSQL

Пожалуйста, проголосуйте за билеты, которые наиболее важны для вашего варианта использования.


Одна из причин заключается в том, что все поля должны соответствовать соглашениям об именах переменных Java (за исключением правил использования заглавных букв). Значение, буквенно-цифровые символы и символы подчеркивания допускаются.


Чтобы обойти эту проблему, нужно отредактировать код производителя или написать задачу Kafka Streams, которая может переименовать map() в поддерживаемую структуру имени поля.

...