在弹性搜索中,Hive日期显示为null

时间:2017-01-10 10:23:02

标签: date elasticsearch hive hue

我有一个hive 表格详细信息以及下面的架构

name STRING,
address STRING,
dob DATE

我的dob以yyyy-mm-dd格式存储。如1988-01-27。

我正在尝试加载此弹性搜索表。所以我按照HUE中的说明进行了操作。

CREATE EXTERNAL TABLE sampletable (name STRING, address STRING, dob DATE)
ROW FORMAT SERDE 'org.elasticsearch.hadoop.hive.EsSerDe' 
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' TBLPROPERTIES('es.resource' = 'test4/test4','es.nodes' = 'x.x.x.x:9200');

INSERT OVERWRITE TABLE sampletable SELECT * FROM details;

select * from sample table;

但是DOB字段显示所有列的NULL。而我可以验证我的原始配置单元表在日期字段中是否有数据。

经过一些研究后,我发现Elasticsearch期望数据字段为yyyy-mm-ddThh:mm:zz,因为我的数据与它抛出错误的数据不匹配。它还提到,我可以将格式更改为" strict_date"格式,然后它将工作正常我的蜂巢日期格式。但是我不知道我在hive查询中执行的位置我需要提及这个。

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

date类型映射到hive有一些问题。 您可以使用配置单string类型映射es date类型,但必须为参数:es.mapping.date.rich设置配置单的配置,设置它的值为false。像这样' es.mapping.date.rich' =' false' ,在create table语句中,它是:

CREATE EXTERNAL TABLE temp.data_index_es(
id bigint,
userId int,
createTime string
)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES(
'es.nodes' = 'xxxx:9200',
'es.index.auto.create' = 'false',
'es.resource' = 'abc/{_type}',
'es.mapping.date.rich' = 'false',
'es.read.metadata' = 'true',
'es.mapping.id' = 'id',
'es.mapping.names' = 'id:id, userId:userId, createTime:createTime');

参考链接:Mapping and Types