
# Lakeformation写入模式最佳实践
#### 概述
数据集成服务在将上游数据写入Lakeformation时，提供了LOAD和LOAD OVERWRITE两种写入模式。这两种模式都会在表的OBS路径下创建一个临时路径，将上游数据以表对应的文件格式直接写入该临时路径中；然后通过重命名文件的方式将其移动到表的正式目录下。不同之处在于，LOAD模式会直接移动文件，实现数据的新增；而LOAD OVERWRITE模式则会在移动文件前清除已有的分区数据，从而实现数据的更新。这种方式与Hive的LOAD和LOAD OVERWRITE语法相似。
#### 写入模式
- **Load模式**
  **Load**模式是 Lakeformation最基本的写入方式。在表OBS路径下创建一个临时路径，将数据写进该临时的OBS路径的数据文件，在任务结束时将临时文件移到表OBS正式路径下。不会对目标表进行清理操作，而是以新增的方式写入数据。
  - 特点
    - **不清理目标表**：写入数据前不会对目标表进行任何清理操作，新数据会追加到目标表中。
    
    - **支持增量写入**：适用于数据追加场景，即目标表中已存在数据，新数据需要追加到目标表中，能够高效地处理增量数据。
     
  
  - 实践样例 假设源端为MySQL数据表data，目标表为Lakeformation数据表data，分区字段为dt。
    配置作业，MySQL表中的增量数据写入Lakeformation表中，Lakeformation会根据分区字段dt将数据追加到对应的分区中。
    图1配置源端目的端数据表   
    ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002524356362.png "点击放大")
    源端MySQL表结构如下：
    ```
    CREATE TABLE `data` (
      `id` varchar(10) DEFAULT NULL,
      `dt` date DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    ```
    目标端Lakeformation表结构如下：
    图2Lakeformation表结构   
    ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002524519398.png "点击放大") 
   
- **Load Overwrite模式**
  Load Overwrite在表OBS路径下创建一个临时路径，将数据写进该临时的OBS路径的数据文件，在任务结束时，先清空对应分区数据，后临时文件移到表OBS正式路径下。
  - 实现 这种模式在Lakeformation中通过以下步骤实现：
    1. **创建临时** **目录**：首先创建一个临时目录，用于暂存写入的数据。
    
    2. **清空涉及的分区数据**：在作业结束时，将涉及到已有分区数据进行清理。
    
    3. **添加数据文件**：将临时目录的数据文件进行Rename操作，移到对应的分区路径下。
     
  
  - 动态分区与静态分区写入支持
    Load Overwrite模式支持动态分区和静态分区两种写入场景。
    - **动态分区写入**：在动态分区写入场景中，源数据中的分区字段值将被自动识别并用于确定目标分区，允许一次性覆盖多个分区，满足多分区数据更新的需求。
    
    
    
    - **静态分区写入**：在静态分区写入场景中，需要在写入操作中明确指定目标分区，仅覆盖指定的单个分区，适用于对特定分区进行精确更新的场景。
      
  
  - 实践样例 假设源端为MySQL数据表data，目标表为Lakeformation数据表data，分区字段为dt。
    源端MySQL表结构如下：
    ```
    CREATE TABLE `data` (
      `id` varchar(10) DEFAULT NULL,
      `dt` date DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    ```
    目标端Lakeformation表结构如下：
    ```
    create table if not exists "default"."data"(
    "id" varchar(10))
    STORE AS PARQUET
     PARTITION BY ("dt" date)
    ```
    - **静态分区** **写入**
      如果希望将MySQL表中的所有数据写入Lakeformation表的dt=2025-10-21的分区，可以选择LOAD OVERWRITE模式，并在写入操作中指定分区过滤条件为dt=2025-10-21。
      图3配置参数   
      ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002555478215.png "点击放大") 
    
    - **动态分区** **写入**
      Mysql的源端数据包含多个分区的数据，希望源数据中的分区字段值将被自动识别并用于确定目标分区，允许一次性覆盖多个分区，满足多分区数据更新的需求。
      你可以选择【写入模式】为【Load_Overwrite】，【分区过滤条件】为不填入，同时字段映射配置源和目的端分区字段dt。
      图4配置参数   
      ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002524358612.png "点击放大")
      图5配置映射关系   
      ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002524355498.png "点击放大") 
     
   
 
#### 总结
通过合理选择**Load** 和**Load** **Overwrite** 两种数据加载模式，可以根据不同的业务需求高效地进行数据迁移和更新。在实际操作中，建议遵循上述最佳实践建议，确保数据的一致性和系统的性能。
