全量表、增量表、拉链表如何生成?

增量表

增量抽取

使用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改为拉链表的分区时间。其他情况都用拉链表数据的原数据。

猜你喜欢

转载自blog.csdn.net/weixin_43648241/article/details/108961783