elasticsearch中的配置单元日期显示为空

c6ubokkw  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(616)

我有一个配置单元表详细信息与下面的模式

name STRING,
address STRING,
dob DATE

我的出生日期以yyyy-mm-dd格式存储,如1988-01-27。
我正在尝试加载这个ElasticSearch表。因此,我按照下面的指示在色调。

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字段显示所有列为空。但是我可以验证我的原始配置单元表在日期字段中是否有数据。
经过一些研究,我发现elasticsearch期望数据字段是yyyy-mm-ddthh:mm:zz因为我的数据不匹配,所以抛出错误。它还提到,我可以将格式更改为“strict\u date”格式,这样就可以很好地处理我的配置单元日期格式。但我不确定在配置单元查询中的何处执行我需要满足此条件。
有人能帮我吗?

vx6bjr1n

vx6bjr1n1#

date Map到配置单元的类型有一些问题。你可以用Hive string 类型Mapes 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');

参考链接:Map和类型

相关问题