Hive建表
加入hive和es的相关jar包(此例以es5.5.2为例,jar去官网下载)
add jar file:///
data/xj6500_data/lib/
elasticsearch-hadoop-5.5.2.jar;
建表语句
DROP TABLE IF EXISTS dim_use_year_es ;
CREATE
EXTERNAL TABLE dim_use_year_es(
dataloadday string,
use_year_code string,
use_year_name string,
dim_order double,
lower_limit_value int,
upper_limit_value int
)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES(
'es.nodes' = '192.168.1.57:9200,
192.168.1.57:9200',
'es.index.auto.create' = 'true',
'es.resource' = 'dim_use_year_index/dim_use_year_type',
'es.mapping.id' = 'use_year_code',
'es.mapping.names' = 'dataloadday:dataloadday,
use_year_name:use_year_name, dim_order:dim_order, lower_limit_value:lower_limit_value,
upper_limit_value:upper_limit_value',
'es.write.operation'='upsert');
相关解释:
es.nodes表示es的节点,多个用“,”分开;
es.index.auto.create表示如果索引不存在自动创建;
es.resource表示指定的索引和类型;
es.mapping.id表示es的_id对应的字段;
es.mapping.names表示其他字段的对应(可以不写,插入时按顺序依次对应即可);
es.write.operation表示如果id重复就更新数据;
注意事项:
1.es的日期类型还是比较特殊的,其有固定的格式,
在hive建表语句中日期类型要写成string,并且有固定格式,在插入数据后,es就会根据格式自动转为对应的日期类型,
即hive中固定格式的日期字符串对应es中的日期类型。
hive与es日期类型格式对应:
日期类型:'
yyyy-MM-dd'对应es的date
'
yyyy-MM-dd
T
HH
:mm
:ss'对应es的datetime,中间要家一个T字符
例如:如果dataloadday是datetime格式的则可以通过regexp_replace(tory.dataloadday,' ','T') as dataloadday,将dataloadday日期字符串进行转换下
2.正是因为日期类型的不相匹配,所以在hive中查询es对应的表时,会出现错误(类型转换错误)
3.在Hive中建立es的关联表之后,并不会立即在es中生成对应的索引和mapping,而只用当想表中导入数据时,才会生成对应的索引和mapping。
插入数据的语句(按顺序对应)
insert into table dim_use_year_es
select * from dim_use_year;
生成的mapping:
{
"dim_use_year_index": {
"mappings": {
"dim_use_year_type": {
"properties": {
"dataloadday": {
"type": "date"
},
"dim_order": {
"type": "float"
},
"lower_limit_value": {
"type": "long"
},
"upper_limit_value": {
"type": "long"
},
"use_year_code": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"use_year_name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
以下为别人总结的Hive和es类型的映射,但是这个日期类型date和timestamp还是没有对上,有所疑问,有待后续
Hive类型和ElasticSearch类型映射
Hive类型 | Elasticsearch类型 |
void | null |
boolean | boolean |
tinyint | byte |
smallint | short |
int | int |
bigint | long |
double | double |
float | float |
string | string |
binary | binary |
timestamp | date |
struct | map |
map | map |
array | array |
union | 目前不支持 |
decimal | string |
date | date |
varchar | string |
char | string |