扩展:hive插入数据到ES

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类型
voidnull
booleanboolean
tinyintbyte
smallintshort
intint
bigintlong
doubledouble
floatfloat
stringstring
binarybinary
timestampdate
structmap
mapmap
arrayarray
union目前不支持
decimalstring
datedate
varcharstring
charstring

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值