Sqoop的全量导入和增量导入

全量导入

上传到hdfs脚本

sqoop import \
 --connect jdbc:mysql://10.6.207.146:3306/test_db \
 --username scfl \
 --password scfl123 \
 --query “select * from test_table where \$CONDITIONS” \
 --target-dir /user/root/person_all \ 
 --fields-terminated-by “,” \
 --hive-drop-import-delims \
 --null-string "\\N" \
 --null-non-string "\\N" \
 --split-by id \
 --m 6 \

脚本中的参数说明

参数说明
–querySQL查询语句
– target-dirHDFS目标目录(确保目录不存在,否则会报错,因为Sqoop在导入数据至HDFS时会自己在HDFS上创建目录)
–hive-drop-import- delims删除数据中包含的Hive默认分隔符(^A, ^B, \n)
–null-stringstring类型空值的替换符(Hive中Null用\n表示)
–null-non-string非string类型空值的替换符
–split-by数据切片字段(int类型,m>1时必须指定)
-mMapper任务数,默认为4

直接加载到hive脚本

/usr/bin/sqoop import \
--connect jdbc:mysql://10.6.207.146:3306/test_db \
--username scfl \
--password scfl123 \
--table user \
--fields-terminated-by ',' \
--delete-target-dir \
--num-mappers 1 \
--hive-import \
--hive-database default \
--hive-table hive_test2

脚本中的参数说明

参数说明
–hive-table导入数据到具体表(表可以不存在)

增量导入

在生产环境中,系统可能会定期从与业务相关的关系型数据库向HIVE导入数据,导入数仓后进行后续离线分析。所以此时不可能再将所有数据重新导一遍,此时我们就需要增量数据导入这一模式了。比如将每天新增订单抽取出来

增量数据导入分两种,一是基于递增列的增量数据导入(Append方式),二是基于时间列的增量数据导入(LastModified方式)。

1.Append方式(基于自增列)

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

# Append方式的全量数据导入
 sqoop import \
   --connect jdbc:mysql://192.168.xxx.xxx:3316/testdb \
   --username root \
   --password 123456 \
   --query “select order_id, name from order_table where \$CONDITIONS” \
   --target-dir /user/root/orders_all \ 
   --split-by order_id \
   --m 6  \
   --incremental append \
   --check-column order_id \
   --last-value 5201314

重要参数说明:

参数说明
–incremental append基于递增列的增量导入(将递增列值大于阈值的所有数据增量导入Hadoop)
–check-column递增列(int)
–last-value阈值(int)

2.lastModify方式(基于时间列)

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

# 将时间列大于等于阈值的数据增量导入HDFS
 sqoop import \
   --connect jdbc:mysql://192.168.xxx.xxx:3316/testdb \
   --username root \
   --password transwarp \
   --query “select order_id, name from order_table where \$CONDITIONS” \
   --target-dir /user/root/order_all \ 
   --split-by id \
   -m 4  \
   --incremental lastmodified \
   --merge-key order_id \
   --check-column time \
   # remember this date !!!
   --last-value “2014-11-09 21:00:00”  

重要参数说明:

参数说明
–incremental lastmodified基于时间列的增量导入(将时间列大于等于阈值的所有数据增量导入Hadoop)
–check-column时间列(int)
–last-value阈值(int)
–merge-key合并列(主键,合并键值相同的记录)
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值