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小案例,布布扣,bubuko.com

时间: 2024-12-31 03:51:17

sqoop操作之ETL小案例的相关文章

java 使用xom对象数据序列化为xml、反序列化、Preferences相关操作小案例

package org.rui.io.xml; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.Arrays; import java.util.List; import nu.xom.Document; import nu.

[jQuery学习系列六]6-jQuery实际操作小案例

前言最后在这里po上jQuery的几个小案例. Jquery例子1_占位符使用需求: 点击第一个按钮后 自动去check 后面是否有按钮没有选中, 如有则提示错误消息. <html> <head> <script type="text/javascript"> function check() { String.prototype.format = function(){ var args = arguments; return this.repla

Windows Server之浅谈SMB以及SMB小案例分享

SMB由来 服务器消息区块(英语:Server Message Block,缩写为SMB,服务器消息区块),又称网络文件共享系统(英语:Common Internet File System,缩写为CIFS),一种应用层网络传输协议,由微软开发,主要功能是使网络上的机器能够计算机文件.打印机.串行端口和通讯等资源.它也提供经认证的进程间通信机能.它主要用在装有Microsoft Windows的机器上,在这样的机器上被称为Microsoft Windows Network. SMB版本 OS W

几个数据库的小案例(一):将文本文件中的信息导入数据库的表中

从文本文件添加到数据库用户表的记录(有两个文件:frmMain.cs  SqlHelper.cs  ) //FrmMain.cs//作者:Meusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Fo

4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例

4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例 4.10/4.11/4.12 lvm讲解 lvm讲解 4.10 lvm讲解上 安装下lvm 如果忘记了 lvm包 pvdisplay 查看 4.11 lvm 中 查看物理卷 除了pvdisplay命令还有一个 pvs命令也可以直观查看当前的物理卷 有了物理卷之后再来创建卷组 先用俩个物理卷创建一个卷组 vgcreate vg1 /dev/sdb1 /dev/sdb2 可以查看下卷组vgdiskplay 或者 vgs vgremo

JS小案例分析

a.微博输入删除小案例 <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title></title> <style> * { margin: 0; padding: 0; } ul { list-style: none; } .box { width: 600px; margin: 100px auto; b

数据库查询的一般写法:从登陆验证小案例中得到的一些启示和经验

这几天做了一个登陆验证的案例,主要功能就是:用户输入密码进行登陆,如果输错密码三次则15分钟内不能登陆. 这个案例确实不复杂,但是其中的逻辑第一次理解确实很别扭. 从这个小案例中,我得到了几个启示,并打算以后写类似的程序都执行此标准 1.该项目中,和sql有关的操作统统放到SqlHelper中 ---所有相同的操作都应该单独定义成一个助手类. 2.该项目中,使用了参数化查询有效防止了sql注入漏洞 ---所有关于查询的并且值由用户输入的sql语句,一律不准用字符串拼接 3.该项目中,判断用户是否

android闹钟小案例之功能阐述

最近花了一个星期左右的时间做了一个小闹钟,现在回过头来进行总结下.刚开始接触这个案例,总体觉着没有太大的难度,都是一些基础知识的堆砌,可现实总比理想残酷啊,这几天下来,每天都会有意料之外的bug出现.在debug的过程中,深深体会到了百度一下和谷歌谷歌的用处,基本常见的问题都可以在这里得到提示甚至答案.这篇文章先来介绍下这个案例所实现的功能,接下来再用几遍文章记录所用到的知识点. 功能简介: 1.闹钟基本功能:和平时的闹钟一样,用户在界面选择闹钟响起的时间,到达所设定时间后执行相应的指定操作.

android闹钟小案例之知识点总结

上一篇文章对近期做的小闹钟做了功能阐述,现在来总结下整个开发过程中所用到的一些知识点: 1.TimePicker的监听 TimePicker控件是整个应用的核心,其它的操作都得基于对该控件的正确操控.对该控件的操作重要就是为其设置监听器,在监听事件中获取用户设置的时间. private Calendar calendar=Calendar.getInstance();//创建calendar对象 private class OnTimeChangedListenerImpl implements