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

    科技2025-07-20  6

    增量表

    增量抽取

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

    Processed: 0.012, SQL: 8