增量表
增量抽取
使用sqoop将业务系统数据库的表数据导入到hdfs中,因为要导入的是增量数据,所以需要
指定更新字段,这个字段有变化就是增量数据
再就是
指定上一次更新的时间
增量导入模板:
bin/sqoop import \
--connect jdbc:mysql://doitedu01:3306/realtimedw?characterEncoding=utf8\&useUnicode=true \
--username root \
--password ABC123abc.123 \
--table stu \
--target-dir '/sqoopdata/incr/stu/2020-09-05' \
--incremental lastmodified \
--check-column update_time \
--last-value '2020-09-05 00:00:00' \
--fields-terminated-by '\001' \
--as-textfile \
-m 1
注意: 使用sqoop生成的数据时存放在hdfs中的指定目录下,所以还需要load到hive表中,才能查询使用。在load之前我们应该先建表分区,再导入!
全量表
假如现在有2号的全量表,要生成3号的全量表,那么就需要2号的增量数据,将2号的全量表和3号的增量表合并起来,就能的到3号的全量表数据。
生成全量表数据有两步:
1、生成表的jar包,其实就相当于schema信息
指定表名,指定表jar包存放的位置,指定jar包名
bin/sqoop codegen \
--connect jdbc:mysql://doitedu01:3306/realtimedw \
--username root \
--password ABC123abc.123 \
--table stu \
--bindir /opt/apps/code/stu \
--class-name Stu \
--as-parquetfile
2、再使用merger命令将增量数据和先前的全量数据合并
指定先前全量表的位置(hdfs路径)–onto
指定增量表的位置(hdfs路径) --newdata
指定新的全量表的位置
指定表jar包位置
指定jar名
指定合并的行
bin/sqoop merge \
--new-data /user/hive/warehouse/test.db/stu_newdata/dt=2020-09-03 \
--onto /user/hive/warehouse/test.db/stu/dt=2020-09-02 \
--target-dir /user/hive/warehouse/test.db/stu/dt=2020-09-03 \
--jar-file /opt/apps/code/stu/Stu.jar \
--class-name Stu \
--merge-key id
拉链表
增量表的数据可以单独生成一部分数据
拉链表的数据left join 增量表,然后有哪些要修改的呢?
能join上的,而且拉链表中数据的end_dt是‘9999-12-31’,这种数据就应该
把end_dt改为拉链表的分区时间。其他情况都用拉链表数据的原数据。