[sqoop]导入数据

一、覆盖导入

例如维度表,每次导入的数据需要覆盖上次导入的数据。

hive-overwrite参数:实现覆盖导入

hive-import参数:表示向hive表导入

hive-table参数:指定目标hive库表

bash 复制代码
sqoop import \
--connect jdbc:mysql://hadoop1:3306/source?useSSL=false \
--username root \
--password 123456 \
--table customer \
--hive-import \
--hive-table ods.customer \
--hive-overwrite

二、增量导入

sqoop提供增量导入模式,用于只导入比已经导入行新的数据行。

--check-column 在确定应该导入哪些行时,指定被检查的列。

--incremental 指定sqoop怎样确定哪些行是新行。有效值是append、lastmodified

--last-value 指定已经导入数据的被检查列的最大值(第一次需要指定,以后会自动生成)

sqoop支持两种类型的增量导入:append和lastmodified。可以使用--incremental参数指定增量导入的类型。

当被导入表的新行具有持续递增的行id值时,应该使用append模式。指定行id为--check-column的列。sqoop导入那些被检查列的值比--last-value给出的值大的数据行。

sqoop支持的另一个表修改策略叫做lastmodified模式。当源表的数据行可能被修改,并且每次修改都会更新一个last-modified列为当前时间戳时,应该使用lastmodified模式。那些被检查的时间戳比--last-value给出的时间戳新的数据行被导入。

增量导入命令执行后,在控制台输出的最后部分,会打印出后续导入需要使用的last-value,当周期性执行导入时,应该用这种方式指定--last-value参数的值,以确保只导入新的活修改过的数据。可以通过一个增量导入的保存作业自动执行这个过程,这是适合重复执行增量导入的方式。(这个值可以从日志看到)。

1)建立sqoop增量导入作业

bash 复制代码
sqoop job \
--create myjob_1 \
-- \
import \
--connect "jdbc:mysql://hadoop1:3306/source?useSSL=false&user=root&password=123456" \
--table sales_order \
--columns "order_number,customer_number,pruduct_code,order-date,entry_date,order_amount" \
--where "entry_date<current_date()" \ 
--hive-import \
--hive-table ods.sales_order \
--incremental append \
--check-columns entry_date \
--last-value '1900-01-01'
复制代码
说明:
select current_date() 2023-07-12 
entry_date是个时间戳 年-月-日 时:分:秒.毫秒
上面的语句建立一个名为myjob_1的sqoop作业。使用--where参数是为了导入前一天的数据。例如,在2点执行此作业,则不会导入0到2点这个两个小时产生的销售订单数据。

2)查看此时作业中保存的last-value,结果如下显示

bash 复制代码
sqoop job --show myjob_1 | grep last.value

可以看到,last-value的值为初始的'1900-01-01'

3)首次执行作业

bash 复制代码
sqoop job -exec myjob_1

因为last-value的值为'1900-01-01',所以这次会导入全部数据,查询ods.sals_order,最后结果如下所示

4)查看此时作业中保存的last-value,结果显示如下

bash 复制代码
sqoop job --show myjob_1 | grep last.value

可以看到,last-value的值为当前最大值'2016-06-30 05:20:47.0'

5)在Mysql该表增加两条数据

一条7月3日,一条7月4日

6)再次执行sqoop作业,因为last-value的值为'2016-06-30 05:20:47'。所以这次只会导入entry_date比'2016-06-30 05:20:47'大的数据

bash 复制代码
sqoop job -exec myjob_1

7)查看此时作业中保存的last-value,结果如下所示

因为当前为7月4号,所以只导入了7月3号的数据

8)实际生产中在shell脚本里直接写sqoop执行语句就行

bash 复制代码
sqoop job --exec myjob_1
相关推荐
牛奶咖啡1318 小时前
大数据Hadoop运维应用实践——双NameNode高可用Hadoop集群架构(上)
hadoop·高可用hadoop集群搭建·给服务器做免密信任·修改服务器主机名称·服务器本地配置主机名与ip映射·服务器配置jdk环境·服务器安装zooker
jjjava2.02 天前
SpringMVC入门指南:从零掌握核心要点
数据仓库·hive·hadoop
ljs6482739513 天前
Hadoop集群部署常见问题
大数据·hadoop·分布式
TTBIGDATA3 天前
【Ambari Plus】14.Hue 安装
大数据·hadoop·ambari·hdp·hue·cdh·bigtop
AllData公司负责人3 天前
数据库同步平台|AIIData数据中台实现OceanBase、达梦数据库、OpenGauss、人大金仓、Hive、TDengine 一键接入Doris
大数据·数据库·hive·mysql·oceanbase·tdengine
2501_942389553 天前
特斯拉的车辆摄像头每四天为AI训练集采集的数据量
人工智能·hadoop·zookeeper·oracle·时序数据库·memcache
AllData公司负责人4 天前
数据同步平台|AIIData数据中台实现MySQL、Hive、Kafka 一键接入Doris
大数据·数据库·hive·mysql·kafka·实时同步
牛奶咖啡134 天前
大数据Hadoop运维应用实践——Hadoop大数据平台基础与架构(hadoop伪分布式的安装部署)
大数据·hadoop·分布式·hadoop是什么?有啥用?·hadoop的适用与不适用场景·hadoop伪分布式的安装部署·hadoop分布式存储操作
TTBIGDATA5 天前
【Ambari Plus】15.Livy 安装
大数据·运维·hadoop·ambari·hdp·cdh·bigtop
李昊哲小课5 天前
Ubuntu26.04-Hadoop3.5.0搭建hive4.2.0
数据仓库·hive·数仓