【问题标题】:KSQL EXTRACTJSONFIELD space in key name键名中的 KSQL EXTRACTJSONFIELD 空格
【发布时间】:2020-11-06 17:07:00
【问题描述】:

在 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"')

【问题讨论】:

    标签: apache-kafka confluent-platform ksqldb


    【解决方案1】:

    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
    

    此解决方案由novikovantoniothis issue 提供

    【讨论】:

      【解决方案2】:

      我刚刚使用 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 图像)时才可以在没有反斜杠的情况下工作) 使用查询文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 2020-06-24
        • 2012-07-02
        • 1970-01-01
        • 1970-01-01
        • 2015-09-30
        相关资源
        最近更新 更多