[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
相关推荐
q***06472 小时前
Spring Boot 从 2.7.x 升级到 3.3注意事项
数据库·hive·spring boot
心止水j5 小时前
hive分区
数据仓库·hive·hadoop
心止水j5 小时前
Hive 桶表的创建、数据导入、查询与导出
数据仓库·hive·hadoop
8***a8151 天前
从0到1部署Tomcat和添加servlet(IDEA2024最新版详细教程)
hive·servlet·tomcat
5***79002 天前
JavaScript生成器函数
hive·tidb·consul
顧棟3 天前
HDFS元数据与auditlog结合Hive元数据统计分析
hive·hadoop·hdfs
z***89713 天前
【分布式】Hadoop完全分布式的搭建(零基础)
大数据·hadoop·分布式
Kevinyu_3 天前
责任链模式
java·hadoop·责任链模式
yumgpkpm3 天前
腾讯云TBDS与CDH迁移常见问题有哪些?建议由CDH迁移到CMP 7.13 平台(类Cloudera CDP,如华为鲲鹏 ARM 版)
hive·hadoop·zookeeper·flink·spark·kafka·hbase
yumgpkpm4 天前
数据可视化AI、BI工具,开源适配 Cloudera CMP 7.3(或类 CDP 的 CMP 7.13 平台,如华为鲲鹏 ARM 版)值得推荐?
人工智能·hive·hadoop·信息可视化·kafka·开源·hbase