【问题标题】:KSQLDB Rest API: return query results as jsonKSQLDB Rest API:以 json 格式返回查询结果
【发布时间】:2021-03-01 02:10:35
【问题描述】:

我发出以下请求:

curl --http2 -X "POST" "http://localhost:8088/query-stream"
             -H "Content-Type: application/vnd.ksql.v1+json; charset=utf-8"
             -d $'{
                  "sql": "SELECT * FROM USERS EMIT CHANGES;",
                  "streamsProperties": {
                    "ksql.streams.auto.offset.reset": "earliest"
                  }
}

我得到的结果是:

{"queryId":"cdfb3ccc-0ab5-4186-a249-b279bfc09587","columnNames":["USERID","NAME"],"columnTypes":["STRING","STRING"]}
["1","Max"]
["2","Alex"]
["13","Andrew"]
...

有没有办法获取json格式的数据?

{"userid":"1","name":"Max"}
{"userid":"2","name":"Alex"}
{"userid":"13","name":"Andrew"}

如果这些数据是 json 格式,则将这些数据反序列化为 POCO 对象比解析“行”格式更容易。

【问题讨论】:

    标签: apache-kafka ksqldb


    【解决方案1】:

    根据the docs,您可以设置Accept 标头。默认为application/vnd.ksqlapi.delimited.v1,但也可以设置为application/json

    curl --show-error --silent \
             -H "application/vnd.ksqlapi.delimited.v1" \
             --http2 'http://localhost:8088/query-stream' \
             --data-raw '{"sql":"SELECT * FROM CUSTOMERS WHERE ID=42;"}'
    {"queryId":null,"columnNames":["ID","FIRST_NAME","LAST_NAME","EMAIL","GENDER","COMMENTS"],"columnTypes":["INTEGER","STRING","STRING","STRING","STRING","STRING"]}
    [42,"Rick","Astley","r.astley@example.com","Male",""]
    
    curl --show-error --silent \
             -H "Accept:application/json" \
             --http2 'http://localhost:8088/query-stream' \
             --data-raw '{"sql":"SELECT * FROM CUSTOMERS WHERE ID=42;"}'
    [{"queryId":null,"columnNames":["ID","FIRST_NAME","LAST_NAME","EMAIL","GENDER","COMMENTS"],"columnTypes":["INTEGER","STRING","STRING","STRING","STRING","STRING"]},[42,"Rick","Astley","r.astley@example.com","Male",""]]
    

    【讨论】:

    • 谢谢,罗宾,但这并不是我想要的。我需要一个推送 KSQL Rest API 查询,它将我的记录作为 JSON 对象返回,而不是类似 CSV 的样式。按照您的示例,尽管您进行了拉式查询(返回单个结果),但我想以以下格式获取每条记录: { "id": 42, "first_name:"Rick", "last_name:":"Astley" , "email": "r.astley@example.com", "gender": "Male", "cmets": "" } 另一点是当我使用 -H 发出推送查询(使用 'EMIT CHANGES')时'Accept:application/json' - 我没有得到任何结果。
    • 我明白了 - 是的,这不是目前可用的。随时在github.com/confluentinc/ksql/issues/3526 上发表评论/投票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2018-08-18
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    相关资源
    最近更新 更多