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

mv1qrgav  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(369)

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
xqnpmsa8

xqnpmsa81#

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

1466

1165

请投票选出更适合您的用例的票。
一个原因是所有字段都应该遵循java变量命名约定(减去大小写规则)。意思是,允许使用字母数字和下划线字符。
解决方法需要您编辑生产者代码,或者编写一个kafka streams任务来执行 map() 重命名为支持的域名结构。

相关问题