【问题标题】:ksql json fieldname with a dash (-)带有破折号 (-) 的 ksql json 字段名
【发布时间】:2018-11-03 12:59:01
【问题描述】:

我的 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

【问题讨论】:

    标签: json apache-kafka confluent-platform ksqldb


    【解决方案1】:

    很遗憾,不支持在字段名称中包含破折号。

    KSQL 问题

    请投票选出对您的用例更重要的票。


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


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      相关资源
      最近更新 更多