大家好:我是雪地车
我们今天来测试一下,hive对elasticsearch表进行操作的时候,会怎样影响elasticsearch中的数据呢
主要是测试insert into和insert overwrite操作
测试重要结论:
1.elasticsearch字段较多时,可以建立多个hive映射表分别进行写入
2.hive无法删除elasticsearch中的记录,只能插入和更新
3.hive的insert into和insert overwrite操作elasticsearch时结果是一样的
结果过程:
首先,建立elasticsearch的表
PUT /litl_test
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": {
"doc":{
"properties": {
"number":{
"type": "integer"
},
"name":{
"type": "keyword",
"index": false
},
"age":{
"type": "integer"
},
"height":{
"type": "double"
}
}
}
}
}
其次,建立hive的外部映射表
CREATE EXTERNAL TABLE tmp.tmp_es_litl_test (
id int,
number int,
name string,
age int,
height double
)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES('es.resource' = 'litl_test/doc','es.mapping.id' = 'id','es.index.auto.create' = 'false','es.write.operation'='upsert','es.nodes'='${es.nodes}', 'es.port'='${es.port}', 'es.nodes.wan.only'='true');
然后,用hql对elasticsearch进行各种操作
1.测试insert overwrite or insert into是否会覆盖表中已有数据
insert into table tmp.tmp_es_litl_test
select 1,1,'张三',15,170.1
from dual;
insert into table tmp.tmp_es_litl_test
select 2,2,'李四',16,180.1
from dual;
可以看到2条记录都被插进去了
结论:insert into不会覆盖表中已有数据insert overwrite table tmp.tmp_es_litl_test
select 3,3,'王五',17,190.2
from dual;
可以看到王五也被插进去了,之前的数据也在
结论:insert overwrite不会覆盖表中已有数据2.测试insert overwrite or insert into是否会覆盖已有id的数据
修改张三的number为2
insert into table tmp.tmp_es_litl_testselect 1,2,'张三',15,170.1
from dual;
结论:insert into重复写入已有id数据,会进行更新
insert overwrite table tmp.tmp_es_litl_test
select 1,3,'张三',16,170.1
from dual;
结论:insert overwrite重复写入已有id数据,会进行更新
3.测试一条指定id的记录,字段从非null修改为null,看是否能修改
insert into table tmp.tmp_es_litl_test
select 1,1,'张三',null,170.1
from dual;
结论:insert into可以把字段从非null修改为null
insert overwrite table tmp.tmp_es_litl_test
select 1,1,'张三',15,null
from dual;
结论:insert overwrite可以把字段从非null修改为null
4.测试,hive只映射一部分字段,看更新时是否会影响到其他未更新的字段
CREATE EXTERNAL TABLE tmp.tmp_es_litl_test2 (
id int,
number int,
name string
)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES('es.resource' = 'litl_test/doc','es.mapping.id' = 'id','es.index.auto.create' = 'false','es.write.operation'='upsert','es.nodes'='${es.nodes}', 'es.port'='${es.port}', 'es.nodes.wan.only'='true');
1)重新插入一条新的记录
insert overwrite table tmp.tmp_es_litl_test2
select 4,4,'赵六'
from dual;
结论:hive只会插入当前hive表映射的elasticsearch字段
2)修改已经包含年龄和体重字段的记录
insert overwrite table tmp.tmp_es_litl_test2
select 1,1,'张三新'
from dual;
结论:hive表操作elasticsearch时,只会修改映射中指定的字段,其他字段不会影响
重要结论:
1.elasticsearch字段较多时,可以建立多个hive映射表分别进行写入
2.hive无法删除elasticsearch中的记录,只能插入和更新
3.hive的insert into和insert overwrite操作elasticsearch时结果是一样的
本文通过实验测试了Hive对Elasticsearch表执行insert into和insert overwrite操作时,对数据的影响。结果表明,当Elasticsearch字段多时,建议创建多个Hive映射表;Hive无法直接删除记录,只能插入和更新;insert into和insert overwrite对Elasticsearch的效果相同,都会新增或更新数据。
746

被折叠的 条评论
为什么被折叠?



