elasticsearch 问题:配置单元对嵌套字段(JSON字符串)和其他字符串字段的ES的支持,elasticsearch,mapreduce,hive,nested,elasticsearch,Mapreduce,Hive,Nested" /> elasticsearch 问题:配置单元对嵌套字段(JSON字符串)和其他字符串字段的ES的支持,elasticsearch,mapreduce,hive,nested,elasticsearch,Mapreduce,Hive,Nested" />

elasticsearch 问题:配置单元对嵌套字段(JSON字符串)和其他字符串字段的ES的支持

elasticsearch 问题:配置单元对嵌套字段(JSON字符串)和其他字符串字段的ES的支持,elasticsearch,mapreduce,hive,nested,elasticsearch,Mapreduce,Hive,Nested,衷心感谢您为我解决以下问题提供的帮助 问题: 配置单元对嵌套字段(JSON字符串)和其他字段的ES的支持。 如何表示配置单元中结构初始未知的嵌套字段 我正在使用elasticsearch配置单元桥在ES中插入数据(jar版本elasticsearch-hadoop-hive-2.1.2-2.1.2.jar) 索引数据有许多字段,其中一个字段是JSON字符串。 需要将此字段(JSON字符串)作为嵌套字段索引,将其他字段作为字符串字段索引。 因此,我们可以使用ES功能搜索和过滤嵌套的JSON文档 另

衷心感谢您为我解决以下问题提供的帮助

问题: 配置单元对嵌套字段(JSON字符串)和其他字段的ES的支持。 如何表示配置单元中结构初始未知的嵌套字段

我正在使用elasticsearch配置单元桥在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 rest是字符串字段插入)

当我们使用curl命令定义映射和插入记录时,一切都很好。 但是通过配置单元插入失败,因为JSON字符串字段的映射定义为“嵌套” 在配置单元端它被定义为字符串。我需要使用struct吗?如何在配置单元端定义struct(创建映射时JSON的结构未知) 我们如何管理它,因为它可以是动态的,如上所述,并且在创建映射时字段名是未知的

步骤1>使用映射创建索引 crul命令用于首先创建索引映射,然后将下面的配置单元表映射到索引和 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>定义指向已创建索引的配置单元表

蜂巢

步骤3>将数据插入到指向已创建索引的配置单元表中

插入覆盖表ES_table从主_table中选择*

因为映射说“attr”是嵌套的,并且在配置单元ES表中,我有字符串,所以我得到了错误

错误 关闭操作时发生配置单元运行时错误:发现无法恢复的错误 MapperParsingException:[index_type]的对象映射试图将字段[attr]解析为对象, **但得到了EOF,有没有给它提供具体的价值?纾困** 原因:org.elasticsearch.hadoop.rest.eshadopopinvalidRequest:发现无法恢复的错误

问题 1) 是否有任何方法可以索引json字符串字段可以作为嵌套字段加载的所有3个字段 通过蜂箱? 2) 如果没有,是否可以使用hive?是否可以使用Mapreduce?

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'..)