密钥名称中的KSQL EXTRACTJSONFIELD空间

时间:2018-06-11 21:51:14

标签: apache-kafka confluent ksql

在KSQL中使用EXTRACTJSONFIELD时,我在名称中出现空格问题 例如:

 "abc","efg","ijk"    

- 这总是返回NULL

我应该如何处理密钥名称中的空格?

我试过了:

SELECT EXTRACTJSONFIELD(payload, '$.Successful Login') FROM MYSTREAM;

2 个答案:

答案 0 :(得分:2)

tl; dr:使用[\\" label \\"]来引用字段

测试数据:

echo '{"id":1,"test":{"Successful Login":1}}' | kafkacat -b localhost:9092 -t test1

在KSQL中声明流并检查消息:

ksql> create stream test1 (id bigint, test varchar) with (kafka_topic='test1', value_format='json');

 Message
----------------
 Stream created
----------------
ksql> select id, test from test1;
1 | {"Successful Login":1}

列的未转义引用不起作用:

ksql> select extractjsonfield(test,'$.Successful Login') from test1;
null

使用[\\"转义列(也请注意不使用点符号):

ksql> select extractjsonfield(test,'$[\\"Successful Login\\"]') from test1;
1

此解决方案由novikovantonio

上的this issue提供

答案 1 :(得分:0)

我刚刚使用KSQL 6(CLI v6.0.0,Server v6.0.0)尝试了Robin的响应。对我来说,使用两个反斜杠不起作用。对我来说,它只能在ksqldb cli中使用一个反斜杠或不使用反斜杠,如下所示:

ksql> select extractjsonfield(test,'$[\"Successful Login\"]') from test1;

或 ksql>从test1中选择extractjsonfield(test,'$ [“成功登录”]]')

对我来说,仅当从融合命令中心(版本6.0.0)启动查询以及将查询传递到无头ksqldb服务器(confluentinc / cp-ksqldb-server:6.0.0映像)时,它才能在没有反斜杠的情况下工作)使用查询文件。