Apache flink 使用ApacheFlinkSQL从Kafka消息获取嵌套字段

Apache flink 使用ApacheFlinkSQL从Kafka消息获取嵌套字段,apache-flink,flink-sql,pyflink,Apache Flink,Flink Sql,Pyflink,我正在尝试使用ApacheFlink1.11创建一个源表,从中可以访问JSON消息中的嵌套属性。我可以从根属性中提取值,但我不确定如何访问嵌套对象 建议它应该是MAP类型,但是当我设置它时,我得到以下错误 : java.lang.UnsupportedOperationException: class org.apache.calcite.sql.SqlIdentifier: MAP 这是我的SQL 创建表输入( id VARCHAR, 标题VARCHAR, 属性映射 )与( “连接器”=“卡

我正在尝试使用ApacheFlink1.11创建一个源表,从中可以访问JSON消息中的嵌套属性。我可以从根属性中提取值,但我不确定如何访问嵌套对象

建议它应该是
MAP
类型,但是当我设置它时,我得到以下错误

: java.lang.UnsupportedOperationException: class org.apache.calcite.sql.SqlIdentifier: MAP
这是我的SQL

创建表输入(
id VARCHAR,
标题VARCHAR,
属性映射
)与(
“连接器”=“卡夫卡-0.11”,
“主题”=“我的主题”,
'properties.bootstrap.servers'='localhost:9092',
'properties.group.id'=“python测试”,
'格式'='json'
)
我的JSON看起来像这样:

{
“id”:“消息-1”,
“头衔”:“某个头衔”,
“财产”:{
“foo”:“bar”
}
}

您可以使用
提取JSON消息中的嵌套字段。您的DDL语句如下所示:

创建表输入(
id VARCHAR,
标题VARCHAR,
属性行(`foo`VARCHAR)
)与(
“连接器”=“卡夫卡-0.11”,
“主题”=“我的主题”,
'properties.bootstrap.servers'='localhost:9092',
'properties.group.id'=“python测试”,
'格式'='json'
);
您也可以尝试

CREATE TABLE input(
            id VARCHAR,
            title VARCHAR,
            properties MAP<STRING, STRING>
        ) WITH (
            'connector' = 'kafka-0.11',
            'topic' = 'my-topic',
            'properties.bootstrap.servers' = 'localhost:9092',
            'properties.group.id' = 'python-test',
            'format' = 'json'
        )
创建表输入(
id VARCHAR,
标题VARCHAR,
属性映射
)与(
“连接器”=“卡夫卡-0.11”,
“主题”=“我的主题”,
'properties.bootstrap.servers'='localhost:9092',
'properties.group.id'=“python测试”,
'格式'='json'
)

唯一的区别是:
MAP
vs
MAP

太好了,这很有效!深度嵌套的JSON怎么样,看起来会变得很难处理?有没有更好的方法来使用PyFlink和SQL处理JSON数据?目前还没有更好的方法,AFAIK。不过,有一个计划很快在Flink SQL中支持SQL JSON函数:这将使事情变得相当简单!