ETL实践--kettle转到hive
ETL实践--kettle只做源数据的抽取,其他数据转换转到hive上。
1、用hive代替kettle的数据关联的原因
(1)、公司之前的数据ELT大量使用了kettle。用kettle导原始数据速度还是蛮快的,但是如果是大表关联类的操作,效率就很差。
一方面是由于hive是用数据库来做关联,数据库的性能跟不上;另外一个方面也是数据要从数据库抽取到kettle,处理完之后还要写回数据库,走了2此网络。
(2)、公司目前非实时的大数据查询主要是再kylin上,kylin的数据源就是hive,所以我们现在就有用到hive。拿到的数据最后还是要导入到hive上给kylin用。
(3)、hive底层是mr,对大数据的关联比数据库性能要高很多。同时hive的hql也是类似sql的。hql实现不了的,还可以通过UDF来实现(java代码大家总是可以搞定的)。
2、下面演示一个我从kettle迁移到hive的数据关联
(1)、sql大致的需求
把数据发生的时间提前6个小时,然后按照这个新的时间所在的天和学号一起分组,按照这个新的(提前6个小时的)时间排序取第一条记录。
后面还有一些其他的条件:比如增量更新的时间判断,还有新的 时间要小于 '17:30:00'这个点。
(2)、原始kettle任务(的sql)
SELECT
b.TermID,b.OutId,b.OpDT,b.subsixhour,concat(b.subsixhour,b.OutId) as temp
FROM
(
SELECT
a.*
FROM
(SELECT
id
, TermID
, OutId
, OpDT
, ioflag
,date_sub(OpDT,interval 6 HOUR) as subopdt
,DATE_FORMAT(date_sub(OpDT,interval 6 HOUR),"%Y-%m-%d") as subsixhour
FROM access_record
where OpDT >? and OpDT <=? and OutId is not null
ORDER BY subopdt desc) a
GROUP BY a.subsixhour,a.OutId
)b
WHERE b.ioflag = 1 AND DATE_FORMAT(b.subopdt,"%H:%i:%S") < '17:30:00'
(3)、改造后的kettle任务的sql(只抽取原始数据)
SELECT
b.*,date_sub(b.OpDT,interval 6 HOUR) as subopdt,DATE_FORMAT(date_sub(b.OpDT,interval 6 HOUR),"%Y-%m-%d") as subsixhour
FROM access_record b
where b.OpDT >? and b.OpDT <=? and b.OutId is not null
特别说明:
这里date_sub(b.OpDT,interval 6 HOUR) as subopdt这个格式化字段的操作,再hive里面没有找到对应的函数。
本来是准备通过写一个UDF来解决的,结果没有调通,所以格式化字段这个操作暂时还放在了kettle里面。
(4)、建立hive表(上一步导入的数据就再这个表里)
create external table access_record
(id int,
TermID int,
ExtendTermID int,
CustomerID int,
CardNo int,
OutId string,
CardSNR string,
OpDT TIMESTAMP,
CollDT TIMESTAMP,
RecType int,
AccCode int,
HZ int,
RecNo int,
FrameNo int,
IsUpload int,
CollectType int,
CardType int,
ioflag int,
CardSNR16 string,
name string,
cellphoneno string,
subopdt TIMESTAMP,
subsixhour date)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE location '/jkd/access_record1';
(6)、新建hive视图,用于数据关联(建视图是为了kylin可以直接查询这个视图,及时获取到关联好的数据)
CREATE or replace VIEW view_access_record_out AS
SELECT
a.TermID,a.OutId,a.OpDT,a.subsixhour,concat(a.subsixhour,a.OutId) as temp
FROM
(SELECT
id
, TermID
, OutId
, OpDT
, ioflag
,subopdt
,subsixhour,
row_number() over (partition by subsixhour,OutId order by subopdt desc) rowNum
FROM access_record
) a
where a.rowNum=1 and a.ioflag = 1 AND DATE_FORMAT(a.subopdt,"HH:mm:ss") < '17:30:00'
ETL实践--kettle转到hive的更多相关文章
- ETL实践--Spark做数据清洗
ETL实践--Spark做数据清洗 上篇博客,说的是用hive代替kettle的表关联.是为了提高效率. 本文要说的spark就不光是为了效率的问题. 1.用spark的原因 (如果是一个sql能搞定 ...
- 可用于Hadoop下的ETL工具——Kettle
看大家分享了好多hadoop相关的一些内容,我为大家介绍一款ETL工具——Kettle. Kettle是pentaho公司开源的一款ETL工具,跟hadoop一样,也是java实现,其目的就是做 ...
- ETL利器Kettle
ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 本系列文章主要索引如下: 一.ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 二.ETL利器Kettle实战应用解析 ...
- ETL利器Kettle实战应用解析系列一【Kettle使用介绍】
本系列文章主要索引如下: 一.ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 二.ETL利器Kettle实战应用解析系列二 [应用场景和实战DEMO下载] 三.ETL利器Kettle ...
- (转载)ETL利器Kettle实战应用解析系列一【Kettle使用介绍】
http://www.cnblogs.com/limengqiang/archive/2013/01/16/kettleapply1.html ETL利器Kettle实战应用解析系列一[Kettle使 ...
- 开源ETL工具kettle系列之常见问题
开源ETL工具kettle系列之常见问题 摘要:本文主要介绍使用kettle设计一些ETL任务时一些常见问题,这些问题大部分都不在官方FAQ上,你可以在kettle的论坛上找到一些问题的答案 1. J ...
- ETL利器Kettle实战应用解析系列三
本系列文章主要索引如下: 一.ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 二.ETL利器Kettle实战应用解析系列二 [应用场景和实战DEMO下载] 三.ETL利器Kettle ...
- ETL利器Kettle实战应用解析系列二
本系列文章主要索引如下: 一.ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 二.ETL利器Kettle实战应用解析系列二 [应用场景和实战DEMO下载] 三.ETL利器Kettle ...
- ETL工具--kettle篇(17.10.09更新)
ETL是EXTRACT(抽取).TRANSFORM(转换).LOAD(加载)的简称,实现数据从多个异构数据源加载到数据库或其他目标地址,是数据仓库建设和维护中的重要一环也是工作量较大的一块.当前知道的 ...
随机推荐
- HDU 3569 Imaginary Date 简单期望
推一下公式.就会发现是这个.. 由于设结果有x种方案.则每一个数字出现的概率都均等,然后和就是x*m 每种方案的概率是1/x 每一个数出现的概率都是1/n 所以每一个方案的和就是 sum/n *m # ...
- Vboxmanage改动uuid报错的解决的方法
我的环境: Virtualbox 4.3.10 r93012 操作系统:win7 问题:Virtualbox在使用拷贝的虚拟盘时会提示uuid冲突: Because a hard disk with ...
- sed从入门到深入修炼目录
sed系列文章: sed修炼系列(一):花拳绣腿之入门篇sed修炼系列(二):武功心法(info sed翻译+注解)sed修炼系列(三):sed高级应用之实现窗口滑动技术sed修炼系列(四):sed中 ...
- Tencent社会招聘scrapy爬虫 --- 已经解决
1.用 scrapy 新建一个 tencent 项目 2.在 items.py 中确定要爬去的内容 # -*- coding: utf- -*- # Define here the models fo ...
- 工作随笔——selenium支持post请求,支持自定义header
背景: 最近在写一个小程序,发现博主所在的地区访问该网站时有防ddos功能验证导致程序不能正常工作. 经过试验发现可以用国外代理ip解决这个问题,但是程序走代理访问延迟高且不稳定. 思路: selen ...
- Android查缺补漏(View篇)--自定义 View 中 wrap_content 无效的解决方案
自定义 View 中 wrap_content 无效的解决方案 做过自定义 View 的童鞋都会发现,直接继承 View 的自定义控件需要重写 onMeasure() 方法,并设置 wrap_cont ...
- Oracle11g不能导出空表问题
ORACLE 11g 用exp命令导出库文件备份时,发现只能导出来一部分表而且不提示错误,之前找不到解决方案只能把没导出来的表重新建建立.后来发现是所有的空表都没有导出来.于是想好好查查,因为在以前的 ...
- Java 银行家算法
实验存档,代码特别烂.. 测试.java package operating.test; import operating.entity.bank.Bank; import operating.ent ...
- 绝世emacs配置for Ubuntu
反正过不了几天就要退役了,把emacs配置放出来造福(祸害)大众? 浓浓的OIER风格,除了方便打代码就没别的用处(F8并不这样认为?),只可惜windows下的弄丢了,只有Ubuntu下的. F1不 ...
- SQL Server中varchar和nvarchar的区别
varchar(n) 长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储大小为输入数据的字节的实际长度,而不是 n 个字节.nvar ...