带破折号(-)的ksql json字段名

时间:2018-11-02 19:36:16

标签: json apache-kafka confluent ksql

我的JSON中的一个字段名称是“ User-Agent”。当我尝试使用该字段名称创建流时,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 :(得分:3)

不幸的是,不支持在字段名称中使用破折号。

KSQL问题

请对更适合您的用例的票进行投票。


一个原因是所有字段都应遵守Java变量命名约定(减去大写规则)。含义,允许使用字母数字和下划线字符。


解决方法是,您需要编辑生产者代码或编写Kafka Streams任务,该任务可以map()重命名为受支持的字段名称结构。