sqoop操作之ETL小案例
Extraction-Transformation-Loading的缩写,中文名称为数据提取、转换和加载。
将数据从ORACLE中抽取数据,经过hive进行分析转换,最后存放到ORACLE中去。
本案例是纯demo级别,练手使用
一、需求
将emp和dept表的数据分析最后存放到result表。
emp和dept表均为oracle自带的表,表结构如下:
emp表
| EMPNO | NUMBER(4) |
| ENAME | VARCHAR2(10) |
| JOB | VARCHAR2(9) |
| MGR | NUMBER(4) |
| HIREDATE | DATE |
| SAL | NUMBER(7,2) |
| COMM | NUMBER(7,2) |
| DEPTNO | NUMBER(2) |
dept表
| DEPTNO | NUMBER(2) |
| DNAME | VARCHAR2(14) |
| LOC | VARCHAR2(13) |
result表
| EMPNO | 员工号 |
| ENAME | 员工姓名 |
| COMMN | 津贴 |
| DNAME | 部门号 |
二、数据准备
创建hive表
create table emp_etl(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)
row format delimited fields terminated by '\t' lines terminated by '\n'
stored as textfile; create table dept_etl(
deptno int,
dname string,
loc string
)
row format delimited fields terminated by '\t' lines terminated by '\n'
stored as textfile;
create table tmp_result_etl(
empno int,
ename string,
comm double,
dname string
)
row format delimited fields terminated by '\t' lines terminated by '\n'
stored as textfile; create table result_etl(
empno int,
ename string,
comm double,
dname string
)
row format delimited fields terminated by '\t' lines terminated by '\n'
stored as textfile;
导入hive数据
sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521/ORCL \
--username SCOTT --password TIGER \
--table EMP \
--hive-overwrite --hive-import --hive-table emp_etl \
--null-string '' --null-non-string '0' \
--fields-terminated-by '\t' --lines-terminated-by '\n' -m 3; sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521/ORCL \
--username SCOTT --password TIGER \
--table DEPT \
--hive-overwrite --hive-import --hive-table dept_etl \
--null-string '' --null-non-string '0' \
--fields-terminated-by '\t' --lines-terminated-by '\n' -m 3;
三、实现方式
在hive中分析处理,将结果导出到HDFS中,再使用SQOOP将HDFS结果导入到数据库。
1)抽取:ORACLE数据抽取到HIVE。参见前面两步。
2)转换:将查询结果插入到hive表中
INSERT OVERWRITE TABLE result_etl
select a.empno, a.ename, a.comm, b.dname FROM emp_etl a join dept_etl b on (a.deptno = b.deptno);
3)转换:将数据导入到HDFS文件系统中
INSERT OVERWRITE DIRECTORY 'RESULT_ETL_HIVE' SELECT * from result_etl;
4)加载:将HDFS系统中的数据加载到ORACLE中(结果表需要手工创建)
创建ORACLE表用于存放ETL结果
CREATE TABLE RESULT_ETL2(
empno INT,
ename VARCHAR(10),
COMM DOUBLE,
dname VARCHAR(14)
);
sqoop export --connect jdbc:oracle:thin:@192.168.1.107:1521/ORCL \
--username SCOTT --password TIGER \
--table RESULT_ETL2 \
--export-dir /user/hadoop/RESULT_ETL_HIVE \
--fields-terminated-by '\001' \
-m 2;
或者将所有的脚本(除ORACLE创建表外)放到shell文件中,一并执行
#!/bin/sh
. /etc/profile
set -x hql="INSERT OVERWRITE TABLE result_etl
select a.empno, a.ename, a.comm, b.dname FROM emp_etl a join dept_etl b on (a.deptno = b.deptno) "
hive -e "$hql" sqoop export --connect jdbc:oracle:thin:@192.168.1.107:1521/ORCL \
--username SCOTT --password TIGER \
--table RESULT_ETL2 \
--export-dir /user/hadoop/RESULT_ETL_HIVE \
--fields-terminated-by '\001' \
-m 2;
sqoop操作之ETL小案例的更多相关文章
- [jQuery学习系列六]6-jQuery实际操作小案例
前言最后在这里po上jQuery的几个小案例. Jquery例子1_占位符使用需求: 点击第一个按钮后 自动去check 后面是否有按钮没有选中, 如有则提示错误消息. <html> &l ...
- JavaScript apply函数小案例
//回调函数1 function callback(a,b,c) { alert(a+b+c); } //回调函数2 function callback2(a,b) { alert(a+b); } / ...
- MVC 小案例 -- 信息管理
前几次更新博客都是每次周日晚上到周一,这次是周一晚上开始写,肯定也是有原因的!那就是我的 Tomact 忽然报错,无法启动,错误信息如下!同时我的 win10 也崩了,重启之后连 WIFI 的标志也不 ...
- Oracle定时任务小案例
需求简述 一个数据表中包含此数据的录入时间,此数据的初始状态是有效,五天后系统自动置该数据的状态为无效. 方案 写一个存储过程,用于更新字段(改状态): 写一个job,用于定时执行存储过程: 方案逻辑 ...
- JSP +MySQL实现网站的登录与注册小案例
为了练手,我就自己试着做了一个网站的登录与注册的小案例.由于没有做美化处理,所以界面并不是很好看. 网站实现的功能如下: 用户首次注册功能 用户登录功能 项目目录展示: 下面我将会分模块展示 注册模块 ...
- 8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署
这一篇继续完善webnotebook,如果你读过上一篇的内容,你应该知道怎么去挂载webnotebook日志和容器的远程访问,但是这些还远不够,webnotebook 总要和一些数据库打交道吧,比如说 ...
- (24/24) webpack小案例--自己动手用webpack构建一个React的开发环境
通过前面的学习,对webpack有了更深的认识,故此节我们就利用前面相关知识自己动手用webpack构建一个React的开发环境,就算是一个小案例吧. 注:此处使用的开发工具是Webstorm. 1. ...
- node.js(小案例)_实现学生信息增删改
一.前言 本节内容主要对小案例做一个总结: 1.如何开始搭建小项目 2.路由设计 3.模块应用 4.项目源码以及实现过程github地址: 项目演示如下: 二.主要内容 1.项目的关键性js源码: 项 ...
- WEB 小案例 -- 网上书城(四)
针对于这个小案例我们今天讲解结账操作,也是有关这个案例的最后一次博文,说实话这个案例的博文写的很糟糕,不知道该如何去表述自己的思路,所以内容有点水,其实说到底还是功力不够. 处理思路 点击结账,发送结 ...
随机推荐
- pseudo tty破除无法自动输入密码的限制
没有root权限,没有ssh密钥对,又想自动输入密码咋办? #!/usr/bin/python # simplest builtin python pseudo-tty for ssh passwor ...
- ios app 开发中ipa重新签名步骤介绍
作为一个app应用程序开发者,在app应用程序在苹果商店上架前总需要将安装包安装到ios机器上进行测试,这个时候我们就需要打包in house版本的ipa了,打包in house实际上是一个将ipa应 ...
- Unity3D游戏-愤怒的小鸟游戏源码和教程(二)
Unity愤怒的小鸟游戏教程(二) 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果 ...
- dfs、遍历与for
dfs实际上就是若干个递归式连续使用,从而把所有情况全部遍历的方法 首先是递归式的连用,然后注意参数的选取以及变化就行了 1.参数一般有状态参数与开关参数 最简单的dfs就是每次选择只是改变自身状态( ...
- hdu 5185 dp(完全背包)
BC # 32 1004 题意:要求 n 个数和为 n ,而且后一个数等于前一个数或者等于前一个数加 1 ,问有多少种组合. 其实是一道很水的完全背包,但是没有了 dp 的分类我几乎没有往这边细想,又 ...
- jquery中.prev()
☆ 遍历 - .prev()方法:取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合.选择性筛选的选择器. (previous:上一个,上一页,前一个,以前的......) 示例: ...
- 【JVM】jvm至jstack命令
一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...
- python lambda匿名函数
Python的一个很重要的方面就是:函数式编程(functional programming),即可以再原本传递参数和值的地方传递函数. lambda x: x%3 == 0 和以下等价: def b ...
- SolrCloud6.3 单机、集群、内置jetty、tomcat搭建、对collection操作
参考:https://my.oschina.net/u/1416405/blog/821187 1.Solr 单机 1.1.Solr下载 1.solr官网:http://lucene.apache.o ...
- ZH奶酪:Python使用ElementTree解析XML【译】
19.7. xml.etree.ElementTree — The ElementTree XML API 源代码: Lib/xml/etree/ElementTree.py Element类型是一种 ...