• Sqoop(四)增量导入、全量导入、减量导入


    增量导入

    一、说明

      当在生产环境中,我们可能会定期从与业务相关的关系型数据库向Hadoop导入数据,导入数仓后进行后续离线分析。这种情况下我们不可能将所有数据重新再导入一遍,所以此时需要数据增量导入。

      增量导入数据分为两种方式:

        一是基于递增列的增量数据导入(Append方式)。

        二是基于时间列的数据增量导入(LastModified方式)。

    二、增量导入

    方式一:Append方式

      比如:有一个订单表,里面每个订单有一个唯一标识自增列ID,在关系型数据库中以主键形式存在,之前已经将id在1-3的编号的订单导入到了Hive中,现在一段时间后我们需要将近期产生的新的订单数据(id为4、5的两条数据)导入Hive,供后续数仓进行分析。此时我们只需要指定-incremental参数为append,-last-value参数为3即可。表示只从大于3后开始导入。

    1、MYSQL建表

    CREATE TABLE `appendTest` (
      `id` int(11) ,
      `name` varchar(255)
    ) 

    2、导入数据

    insert into appendTest(id,name) values(1,'name1');
    insert into appendTest(id,name) values(2,'name2');
    insert into appendTest(id,name) values(3,'name3');

    3、创建一张跟mysql中的appendTest表一样的hive表appendTest

    sqoop create-hive-table 
    --connect jdbc:mysql://192.168.200.100:3306/yang 
    --username root 
    --password 010209 
    --table appendTest 
    --hive-table appendTest

    4、进行导入,将id>0的三条数据进行导入

    sqoop import 
    --connect jdbc:mysql://192.168.200.100:3306/yang 
    --username root 
    --P 
    --table appendTest 
    --hive-import 
    -m 1  
    --hive-table appendTest
    --incremental append --check-column id --last-value 0

    结果:

    5、查看

     6、向mysql表appendTest再次插入数据

    insert into appendTest(id,name) values(4,'name4');
    insert into appendTest(id,name) values(5,'name5');

    7、再次执行增量导入

    由于上一次导入的时候,,将--last-value设置为0,将id>0的三条数据导入后,现在进行导入了时候需要将last-value设置为3
    sqoop import
    --connect jdbc:mysql://192.168.200.100:3306/yang --username root --P --table appendTest --hive-import -m 1
    --hive-table appendTest
    --incremental append --check-column id --last-value 3

    结果:

    8、查看hive表appendTest

    重要参数说明:

    9、说明

    说明:
    增量抽取,需要指定--incremental append,同时指定按照源表中哪个字段进行增量--check-column id,
    并指定hive表appendTest当前最大值--last-value 3。创建sqoop job的目的是,每次执行job以后,sqoop会自动记录appedndTest的last-value,
    下次再执行时,就会自动指定last-value,不需要手工去改了。

    方式二:lastModify方式

     基于lastModify的方式,要求原表中有time字段,它能指定一个时间戳,让SQoop把该时间戳之后的数据导入至Hive,因为后续订单可能状态会发生变化,变化后time字段时间戳也会发生变化,此时SQoop依然会将相同状态更改后的订单导入Hive,当然我们可以指定merge-key参数为id,表示将后续新的记录与原有记录合并。

     1、Mysql建表

    CREATE TABLE lastModifyTest (
    id INT,
    name VARCHAR (20),
    last_mod TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    );

    2、导入数据

    insert into lastModifyTest(id,name) values(1,'enzo');
    insert into lastModifyTest(id,name) values(2,'din');
    insert into lastModifyTest(id,name) values(3,'fz');
    insert into lastModifyTest(id,name) values(4,'dx');
    insert into lastModifyTest(id,name) values(5,'ef');

    3、HIve建表

    
    
    sqoop create-hive-table 
    --connect jdbc:mysql://192.168.200.100:3306/yang 
    --username root 
    --password 010209 
    --table lastModifyTest 
    --hive-table lastModifyTest 

    4、导入数据,将时间以后的数据进行导入

    sqoop import 
    --connect jdbc:mysql://192.168.200.100:3306/yang 
    --username root 
    --P 
    --table lastModifyTest 
    --hive-import 
    -m 1  
    --hive-table lastModifyTest 
    --incremental lastmodified 
    --check-column last_mod 
    --last-value "2019-05-14 15:17:23"

    结果:

    5、查看数据导入结果

     6、参数说明

    全量导入

    将mysql表中全部数据都导入Hive,下面来查看实例:

    1、MYSQL数据

    2、一次性将mysql表im数据全量导入hive中

    sqoop import 
    --connect jdbc:mysql://192.168.200.100:3306/yang 
    --username root 
    --password 010209 
    --table im 
    --hive-import 
    --hive-table im 
    -m 1

    减量导入

    设置where条件,通过判断条件可以判断减少的数据和增加的数据,控制更加灵活。

    sqoop import 
    --connect jdbc:mysql://192.168.200.100:3306/yang 
    --username root 
    --P 
    --table appendTest 
    --hive-import 
    -m 1  
    --incremental append 
    --where "age>30"
    --check-column id 
    --last-value 0
  • 相关阅读:
    北斗对时设备(GPS校时产品)在数字城市系统中的应用
    京准电子,北斗授时产品取代GPS对时设备服务各行业
    北斗校时系统(GPS授时设备)几种时间同步方法
    网络对时服务器(NTP校时服务器)应用港口信息化系统
    关于医院NTP授时服务器(NTP校时服务器)部署工作
    变电站里NTP校时器(gps网络时间服务器)产品的应用
    C++学习(二十九)(C语言部分)之 顺序表
    C++学习(二十八)(C语言部分)之 文件操作
    C++学习(二十七)(C语言部分)之 预处理命令
    C++学习(二十六)(C语言部分)之 结构体3(联合,枚举)
  • 原文地址:https://www.cnblogs.com/yfb918/p/10858355.html
Copyright © 2020-2023  润新知