测试hive操作insert into和insert overwrite对elasticsearch中数据的影响

大家好:我是雪地车

我们今天来测试一下,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_test
select 1,2,'张三',15,170.1

from dual;


可以看到number被修改为2了
结论:insert into重复写入已有id数据,会进行更新
insert overwrite table tmp.tmp_es_litl_test
select 1,3,'张三',16,170.1

from dual;


可以看到number被修改为3了
结论: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时结果是一样的

你可能感兴趣的:(大数据)