问题:配置单元支持嵌套字段(json字符串)和其他字符串字段的es

h79rfbju  于 2021-06-28  发布在  Hive
关注(0)|答案(0)|浏览(381)

非常感谢您对我解决以下问题的帮助。
问题:配置单元对嵌套字段(json字符串)和其他字段的支持。如何表示初始结构未知的配置单元中的嵌套字段。
我正在使用elasticsearch hive桥在es中插入数据(jar版本elasticsearch-hadoop-hive-2.1.2-2.1.2.jar)
索引数据有许多字段,其中一个字段是json字符串。需要将这个字段(json字符串)作为嵌套字段索引,其他字段作为字符串字段索引。这样我们就可以使用es功能搜索和过滤嵌套的json文档。
另一个挑战是这个json文件是动态的,它可以为每一行添加新的键和值
例如:es应该有字段(attr,field1,field2),其中attr应该是一个嵌套字段(json文档),可以有动态键和值。
配置单元表中的示例值

select attr,field1,field2 from table;

row1 {"A":"GF","M":"vf"},"field1VAL","field2VAL"

row2 {"F":"BD"},"field1VAL","field2VAL"

row3 {"A":"BD","H":"ki","R":"we","M":"mg"},"field1VAL","field2VAL"

在es文档中,指定当输出表只有一个字段时,可以将es.input.json参数指定为true。但在我的例子中,还有其他字段也存在于配置单元表中,并且必须转到es索引(只有一个字段(attr)必须作为嵌套的json字段插入(其余是字符串字段)
当我们用curl命令定义Map和插入记录时,一切都很好。但是,由于将json字符串字段的Map定义为“嵌套”,并且在配置单元端将其定义为字符串,因此通过配置单元插入失败。我需要使用struct吗?如何在配置单元端定义struct(在创建Map时,json的结构未知)我们如何管理它,因为它可以是动态的,如上所述,并且字段名是动态的创建Map时未知
step1>index creation with mappings crul命令用于首先创建索引Map,然后将下面的配置单元表Map到index,并使用insert命令将数据插入配置单元es表。

"mappings": {

"index_type": {

"dynamic_templates": [{

"string_templates": {

"mapping": {

"index": not_ananlyzed","type":"string"},path_match": "attr.*"

}

}],

"properties": {

"attr": {

"type": "nested"

},

"field1": {

"type": "string",

"index": "not_analyzed"

},

"field2": {

"type": "string",

"index": "not_analyzed"

}

}

}

}

步骤2>定义指向已创建索引的配置单元表
Hive

create table ES_TABLE (attr string ,field1 string,field2 string) row format delimited 
stored by 'org.elasticsearch.hadoop.hive.EsStorageHandler' 
TBLPROPERTIES('es.mapping.names'='attr:attr,field1:field1,field2:field2',
'es.index.auto.creation'='false',
'es.resource'..'es.nodes'..'es.port'..)

step3>将数据插入指向已创建索引的配置单元表
插入覆盖表es\ U table select*from main\ U table;
因为Map说“attr”是嵌套的,并且在hivees表中有string,所以我得到了一个错误
错误:关闭配置单元时出错operation:found unrecoverable error mapperparsingexception:[index\u type]的对象Map尝试将字段[attr]解析为对象,但得到了eof,是否为其提供了具体值?正在退出原因:org.elasticsearch.hadoop.rest.eshadoopinvalidrequest:found unrecoverable 错误
问题1)有没有什么方法可以索引所有3个字段,其中json字符串字段可以通过配置单元作为嵌套字段加载?2) 如果没有,hive有可能吗?mapreduce有可能吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题