zoukankan      html  css  js  c++  java
  • 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 '	' lines terminated by '
    ' 
    stored as textfile;

    create table dept_etl( deptno int, dname string, loc string ) row format delimited fields terminated by ' ' lines terminated by ' ' stored as textfile; create table tmp_result_etl( empno int, ename string, comm double, dname string ) row format delimited fields terminated by ' ' lines terminated by ' ' stored as textfile;

    create table result_etl( empno int, ename string, comm double, dname string ) row format delimited fields terminated by ' ' lines terminated by ' ' 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 '	' --lines-terminated-by '
    ' -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 ' ' --lines-terminated-by ' ' -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 '01' 
    -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 '01'  
    -m 2;
  • 相关阅读:
    51nod 1380 夹克老爷的逢三抽一 堆 脑洞题
    洛谷P2168 荷马史诗 堆 哈夫曼树
    HDU 4343 Interval query 倍增思想, DP
    洛谷P1969 积木大赛 贪心 差分
    codves1052 地鼠游戏 贪心
    hdu6031 Innumerable Ancestors
    Codeforces 278C Learning Languages(并查集) 求连通块
    [LeetCode]80. Remove Duplicates from Sorted Array II删除数组中的重复值
    [LeetCode]86. Partition List分离链表
    [LeetCode]42. Trapping Rain Water雨水填坑
  • 原文地址:https://www.cnblogs.com/luogankun/p/3895433.html
Copyright © 2011-2022 走看看