文档首页/ 数据治理中心 DataArts Studio/ 用户指南/ 数据集成(离线作业)/ 参数配置实践教程/ DLI Load/Truncate_Load/Insert Overwrite写入模式最佳实践
更新时间:2025-11-20 GMT+08:00
分享

DLI Load/Truncate_Load/Insert Overwrite写入模式最佳实践

概述

数据集成服务使用DLI(数据湖探索)作为Lakehouse目标端时,同样提供三种写入模式:LoadTruncate+LoadInsert Overwrite。每种模式都有其独特的适用场景和特点,可以根据不同的业务需求进行选择。

DLI数据写入模式

  • Load模式

    Load模式是DLI最基本的写入方式,直接将数据写入目标DLI表中,不会对目标表进行清理操作,而是以追加的方式写入数据。

    • 特点
      • 不清理目标表:写入数据前不会对目标表进行任何清理操作,新数据会追加到目标表中。
      • 支持增量写入:适用于数据追加场景,即目标表中已存在数据,新数据需要追加到目标表中,能够高效地处理增量数据。
    • 实践样例

      假设源端为MYSQL数据表data,目标表为DLI数据表data,分区字段为dt。

      配置作业,MySQL表中的增量数据写入DLI表中,DLI会根据分区字段dt将数据追加到对应的分区中。

      图1 配置源端目的端数据表

      源端MySQL表

      CREATE TABLE `data` (  `id` varchar(10) DEFAULT NULL,  `dt` date DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      目标端DLI表

      CREATE TABLE `data` (  `id` varchar(10) DEFAULT NULL,  `dt` date DEFAULT NULL) using hudi options (type = 'cow',primaryKey = 'id',preCombineField = 'id');
  • Truncate+Load模式

    Truncate+Load模式先清空目标DLI表中的分区数据,然后加载新的数据。

    • 特点
      • 清理目标区数据:写入数据前会清空目标表选择的分区数据。
      • 分区保留:虽然清空了数据,但分区结构仍然保留,新的数据会根据分区字段重新写入到对应的分区中。
    • 实践样例

      假设源端为MYSQL数据表data,目标表为DLI数据表data,分区字段为dt。

      配置作业,先Truncate删除DLI表中dt=2025-10-21分区数据,然后将MySQL表中的数据重新写入DLI表中,DLI会根据分区字段dt将数据重新组织到对应的分区中。

      图2 配置源端目的端数据表

      源端MySQL表

      CREATE TABLE `data` (  `id` varchar(10) DEFAULT NULL,  `dt` date DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      目标端DLI表

      CREATE TABLE `data` (  `id` varchar(10) DEFAULT NULL,  `dt` date DEFAULT NULL) using hudi options (type = 'cow',primaryKey = 'id',preCombineField = 'id')partitioned by (dt);
  • Insert Overwrite模式

    Insert Overwrite模式会先将数据写入一个临时表,然后使用DLI的INSERT OVERWRITE语法将临时表中的数据覆盖到目标表中。

    • 实现

      这种模式在DLI中通过以下步骤实现:

      1. 创建临时表:首先创建一个临时表,用于暂存写入的数据。
      2. 写入临时表:将数据写入临时表。
      3. 覆盖目标表:使用INSERT OVERWRITE语法将临时表中的数据覆盖到目标表中。
    • 特点
      • 临时表:生成一个临时表,用于暂存写入的数据。
      • 覆盖目标表:使用DLI的INSERT OVERWRITE语法覆盖目标表中的数据,确保数据的一致性。
      • 动态分区与静态分区写入支持:Insert Overwrite模式支持动态分区和静态分区两种写入场景。
        • 动态分区写入:在动态分区写入场景中,源数据中的分区字段值将被自动识别并用于确定目标分区,允许一次性覆盖多个分区,满足多分区数据更新的需求。
        • 静态分区写入:在静态分区写入场景中,需要在写入操作中明确指定目标分区,仅覆盖指定的单个分区,适用于对特定分区进行精确更新的场景。
    • 实践样例

      假设源端为MYSQL数据表data,目标表为DLI数据表data,分区字段为dt。

      源端MySQL表

      CREATE TABLE `data` (  `id` varchar(10) DEFAULT NULL,  `dt` date DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      目标端DLI表

      CREATE TABLE `data` (  `id` varchar(10) DEFAULT NULL,  `dt` date DEFAULT NULL) using hudi options (type = 'cow',primaryKey = 'id',preCombineField = 'id')partitioned by (dt);
      • 静态分区写入

        如果希望将MySQL表中的所有数据写入DLI表的dt=2025-10-21的分区,可以选择INSERT OVERWRITE模式,并在写入操作中指定分区过滤条件为dt=2025-10-21。

        图3 配置参数
      • 动态分区

        如果MySQL表中的数据包含多个分区的数据,希望根据源数据中的分区字段值自动识别并覆盖目标分区,可以选择Insert Overwrite模式,此时,无需指定分区过滤条件,同时确保字段映射配置dt分区字段。

        图4 配置参数
        图5 配置映射关系

总结

通过合理选择Load、Truncate+Load和Insert Overwrite三种DLI数据写入模式,可以根据不同的业务需求高效地进行数据迁移和更新。在实际操作中,建议遵循上述最佳实践建议,确保数据的一致性和系统的性能。

相关文档