如何使用Nifi PutHive3Streaming Processor将嵌套的json插入到Hive中

问题描述

我有一个简单的Nifi流:

Nifi Flow

此Nifi流生成嵌套的Json:

{"ts":"10000000000","struct1":{"id1":1,"name1":"test1","struct2":{"id2":2,"name2":"test2"}}}

之后,我尝试使用具有以下设置的PutHive3Streaming Processor将此Json插入到蜂巢表中: PutHive3Streaming properties

JsonTreeReader属性: JsonTreeReader properties

模式文本是Avro模式:

{
 "type" : "record","name" : "test","fields" : [ 
    { "name" : "ts","type" : "string"},{ "name" : "struct1","type" : { 
        "type" : "record","name" : "struct1","fields" : [ 
            { "name" : "id1","type" : "int" },{ "name" : "name1",{ "name" : "struct2","type" : { 
                "type" : "record","name" : "struct2","fields" : [ 
                    { "name" : "id2","type" : "int"},{ "name" : "name2","type" : "string"}
                    ]
                  }
            }
         ] 
        }
    }
  ] 
}

配置单元表DDL:

create table default.struct_issue (
ts string,struct1 struct<id1:int,name1:string,struct2:struct<id2:int,name2:string>>);

当PutHive3Streaming尝试插入数据时,出现下一个错误: PutHive3Streaming error

看起来Nifi在json中看不到“ struct2”字段,但此字段显示在其中。

更新! Nifi(v1.8.0)出现了相同的问题,并且看起来已经解决(https://issues.apache.org/jira/browse/NIFI-5491),但是问题仍然存在于Nifi(v1.9.0)

P.S。解决方法是,我已使用JSON SerDe属性在蜂巢中成功创建了外部表,并将此json放入与外部表目录匹配的HDFS目录中。我的任务是使用Nifi处理器将此json插入Internal Hive表。 堆栈和版本: Stack and versions

提前谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...