DataArts Fabric SQL写入模式最佳实践
概述
数据集成服务将上游数据写入DataArts Fabric 时,提供 Insert Into与Insert Overwrite两种SQL级写入模式。两者均通过FabricWriter采用“文件落盘+原子入库”的两级提交机制:首先创建一个临时Fabric表,将上游数据以该临时表对应的文件格式直接写入华为云OBS目录;随后通过执行INSERT/OVERWRITE SQL,将临时表中的数据以事务级方式一次性加载至FabricSQL正式表中。由于数据直接写入OBS文件,具备优异的写入性能,实现高吞吐、低锁表、可回滚的批量数据集成。
Fabric写入模式
- Insert Into模式
Insert Into模式是Fabric最基本的写入方式,直接将数据写入目标Fabric表中,不会对目标表进行清理操作,而是以追加的方式写入数据。
- 特点
- 不清理目标表:写入数据前不会对目标表进行任何清理操作,新数据会追加到目标表中。
- 支持增量写入:适用于数据追加场景,即目标表中已存在数据,新数据需要追加到目标表中,能够高效地处理增量数据。
- 实践样例
假设源端为MySQL数据表data,目标表为Fabric数据表data,分区字段为dt。
配置作业,MySQL表中的增量数据写入Fabric表中,Fabric会根据分区字段dt将数据追加到对应的分区中。
图1 配置源端目的端数据表
源端MySQL表
CREATE TABLE `data` ( `id` varchar(10) DEFAULT NULL, `dt` date DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;
目标端Fabric表
create table if not exists "default"."data"("id" varchar(10))STORE AS PARQUET PARTITION BY ("dt" date)
- 特点
- Insert Overwrite模式
Insert Overwrite模式会先将数据写入一个临时表,然后使用Fabric的INSERT OVERWRITE语法将临时表中的数据覆盖到目标表中。
- 实现
- 创建临时表:首先创建一个临时表,用于暂存写入的数据。
- 写入临时表:将数据写入临时表。
- 覆盖目标表:使用INSERT OVERWRITE语法将临时表中的数据覆盖到目标表中。
- 特点
- 临时表:生成一个临时表,用于暂存写入的数据。
- 覆盖目标表:使用Fabric的INSERT OVERWRITE语法覆盖目标表中的数据,确保数据的一致性。
- 动态分区与静态分区写入支持:Insert Overwrite模式支持动态分区和静态分区两种写入场景。
- 动态分区写入:在动态分区写入场景中,源数据中的分区字段值将被自动识别并用于确定目标分区,允许一次性覆盖多个分区,满足多分区数据更新的需求。
- 静态分区写入:在静态分区写入场景中,需要在写入操作中明确指定目标分区,仅覆盖指定的单个分区,适用于对特定分区进行精确更新的场景。
- 实践样例
假设源端为MySQL数据表data,目标表为Fabric数据表data,分区字段为dt。
源端MySQL表
CREATE TABLE `data` ( `id` varchar(10) DEFAULT NULL, `dt` date DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;
目标端Fabric表
create table if not exists "default"."data"("id" varchar(10))STORE AS PARQUET PARTITION BY ("dt" date)- 静态分区
如果希望将MySQL表中的所有数据写入Fabric表的dt=2025-10-21的分区,可以选择INSERT OVERWRITE模式,并在写入操作中指定分区过滤条件为dt=2025-10-21。
图2 配置参数
- 动态分区
如果MySQL表中的数据包含多个分区的数据,希望根据源数据中的分区字段值自动识别并覆盖目标分区,可以选择Insert Overwrite模式,此时,无需指定分区过滤条件,同时确保字段映射配置dt分区字段。
图3 配置参数
图4 配置映射关系
- 静态分区
- 实现
总结
通过合理选择Insert Into和Insert Overwrite Fabric数据写入模式,可以根据不同的业务需求高效地进行数据迁移和更新。在实际操作中,建议遵循上述最佳实践建议,确保数据的一致性和系统的性能。