
# 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配置源端目的端数据表   
    ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002484294364.png "点击放大")
    源端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语法将临时表中的数据覆盖到目标表中。
  - 实现 这种模式在Fabric中通过以下步骤实现：
    1. **创建临时表**：首先创建一个临时表，用于暂存写入的数据。
    
    2. **写入临时表**：将数据写入临时表。
    
    3. **覆盖目标表**：使用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配置参数   
      ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002484270612.png "点击放大") 
    
    - **动态分区**
      如果MySQL表中的数据包含多个分区的数据，希望根据源数据中的分区字段值自动识别并覆盖目标分区，可以选择Insert Overwrite模式，此时，无需指定分区过滤条件，同时确保字段映射配置dt分区字段。
      图3配置参数   
      ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002484454338.png "点击放大")
      图4配置映射关系   
      ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002516414303.png "点击放大") 
     
   
 
#### 总结
通过合理选择Insert Into和Insert Overwrite Fabric数据写入模式，可以根据不同的业务需求高效地进行数据迁移和更新。在实际操作中，建议遵循上述最佳实践建议，确保数据的一致性和系统的性能。
