es-hadoop-hive 时间格式问题记录
来源:互联网 发布:淘宝网板鞋 编辑:程序博客网 时间:2024/05/29 10:49
Elasticsearch for Apache Hadoop
使用 es-hive 同步数据,插入 hive 表即插入 es,读取 hive 表数据即读取 es 数据
创建 es-hive 测试表
drop TABLE IF EXISTS `es_dim_s.es_test_time`;CREATE TABLE IF NOT EXISTS `es_dim_s.es_test_time` ( `service_date` STRING comment 'yyyy-MM-dd', `service_date_time` STRING comment 'yyyy-MM-ddTHH:mm:ss')comment '时间测试'STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'TBLPROPERTIES('es.nodes' = 'es1:9201,es2:9202,es2:9203','es.index.auto.create' = 'true','es.resource' = 'bi_m_sbkcq_test-{service_date:YYYY.MM}/es_test_time','es.index.read.missing.as.empty' = 'true','es.batch.size.bytes' = '10mb','es.batch.size.entries' = '3000','es.mapping.names' = '');
插入测试数据
>hiveinsert into table es_dim_s.es_test_time select '2016-10-01','2016-10-01 10:00:00’;
执行后报错 hive 客户端报错
找到 es-hadoop 源码中报错位置line:105
报错原因分析
es-hadoop jar 默认使用 ISO 进行时间格式化,2016-10-01 10:00:00 不属于 ISO标准,默认改写为 2016-10-01T10:00:00 格式进行 datetime 类型数据插入
修改导入Hive测试语句的 date-time 格式为 ISO 标准格式即可正确导入 hive-es
重新执行导入操作即可成功
>hiveinsert into table es_dim_s.es_test_time select '2016-10-01','2016-10-01T10:00:00’;
es 时间字段动态 mapping-template 如下
"dynamic_templates": [ { "date_fields": { "match": "*_date", "mapping": { "type": "date" } } }, { "time_fields": { "match": "*_time", "mapping": { "type": "date" } } },
date 不指定 format,指定具体 format 后es 客户端会抛出错误
Caused by: java.lang.IllegalArgumentException: Invalid format: [yyyy-MM-ddTHH:mm:ss]: Illegal pattern component: T
hive 时间格式转换
select from_unixtime(unix_timestamp("2014-11-10 08:00:00","yyyy-MM-dd HH:mm:ss"),"yyyy-MM-dd'T'HH:mm:ss") as a from es_dim_sbkcq.es_third_relation;
2014-11-10 和 20141110相互转化的办法:
#from_unixtime && unix_timestamp-- 20141110select from_unixtime(unix_timestamp('2014-11-10','yyyy-mm-dd'),'yyyymmdd') from default.dual;-- 2014-11-10select from_unixtime(unix_timestamp('20141110','yyyymmdd'),'yyyy-mm-dd') from default.dual;#substr + concat-- 20141110select concat(substr('2014-11-10',1,4),substr('2014-11-10',6,2),substr('2014-11-10',9,2)) from default.dual;-- 2014-11-10select concat(substr('20141110',1,4),'-',substr('20141110',5,2),'-',substr('20141110',7,2)) from default.dual;hive 获取当前时间select from_unixtime(unix_timestamp(),"yyyy-MM-dd'T'HH:mm:ss") from es_dim_sbkcq.es_third_relation;
ISO时间格式探索 - 相关干货
关于“时间”的一次探索
2 0
- es-hadoop-hive 时间格式问题记录
- ES往HIVE倒数据遇到时间格式问题
- Hadoop学习记录-Hive
- (问题记录)部署Hadoop+MySQL+Hive遇到的问题
- hive 时间格式,计算
- Hive时间格式转换
- ES存储的时间问题
- hive配置问题记录
- hadoop-2.2.0+hive-0.11.0下整合RHive问题记录
- hadoop记录篇6-数据仓库hive
- 自定义Hive文件和记录格式
- stuts jsp 时间格式记录
- hadoop学习问题记录
- Hadoop使用问题记录
- Hadoop问题记录
- spark-hadoop问题记录
- Hadoop学习问题记录
- datalist时间格式问题。
- 根号n分治排序
- Android仿QQ聊天撒花特效
- 我写的第一个用Python写的爬虫
- NYOJ127星际之门(一)_n阶完全图的生成树数目
- cocos creator中使用protobuf(dcodeIO/protobuf.js 5.0)
- es-hadoop-hive 时间格式问题记录
- Mysql 5.1 配置双主
- 常被提到的排序四(希尔排序)
- 什么是体数据可视化(Volume data visualization)?及体绘制的各种算法和技术的特点?
- CU的划分、地址以及索引
- linux 块设备驱动
- 全兼容系列(4)----------------------2017春节倒计时
- n对括号组合的所有情况
- PE文件解析器的编写(二)——PE文件头的解析