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条答案
按热度按时间xqnpmsa81#
不幸的是,不支持在字段名中使用破折号。
ksql问题
1466
1165
请投票选出更适合您的用例的票。
一个原因是所有字段都应该遵循java变量命名约定(减去大小写规则)。意思是,允许使用字母数字和下划线字符。
解决方法需要您编辑生产者代码,或者编写一个kafka streams任务来执行
map()
重命名为支持的域名结构。