2

在 KSQL 中使用 EXTRACTJSONFIELD 时,我遇到了名称中的空格问题例如:

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

-- 这总是返回 NULL

我应该如何处理键名中的空格?

我努力了:

EXTRACTJSONFIELD(payload, '$.Successful%Login')
EXTRACTJSONFIELD(payload, '$.Successful%20Login')
EXTRACTJSONFIELD(payload, '$.[Successful Login]')
EXTRACTJSONFIELD(payload, '$."Successful Login"')
4

2 回答 2

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此问题上提供

于 2018-06-12T08:52:33.650 回答
1

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

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

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

对我来说,它仅在从 confluent 命令中心(版本 6.0.0)启动查询以及将查询交给无头 ksqldb 服务器(confluentinc/cp-ksqldb-server:6.0.0 图像)时使用查询文件。

于 2020-11-05T20:42:05.233 回答