Apache flink 使用ApacheFlinkSQL从Kafka消息获取嵌套字段
我正在尝试使用ApacheFlink1.11创建一个源表,从中可以访问JSON消息中的嵌套属性。我可以从根属性中提取值,但我不确定如何访问嵌套对象 建议它应该是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, 属性映射 )与( “连接器”=“卡
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
vsMAP
太好了,这很有效!深度嵌套的JSON怎么样,看起来会变得很难处理?有没有更好的方法来使用PyFlink和SQL处理JSON数据?目前还没有更好的方法,AFAIK。不过,有一个计划很快在Flink SQL中支持SQL JSON函数:这将使事情变得相当简单!