
# CDL作业数据DDL变更说明
DDL变更操作包括创建数据库/表、变更表字段类型、变更表字段名称、表列增/删等数据表结构变化操作。当前CDL仅支持从PgSQL同步数据到Hudi的DDL变更，所有DDL变更操作顺序为：
1. 停止CDL任务。
2. Hudi侧执行DDL变更。
3. 源端库进行DDL变更。
本章节适用于MRS 3.3.0及之后版本，提供了新增字段、修改字段类型、修改字段名称、删除字段等DDL变更操作指导。
#### 新增字段
1. 登录FusionInsight Manager，选择"集群 \> 服务 \> CDL"，单击"CDLService UI"右侧的超链接进入CDLService WebUI界面，在数据同步任务作业列表界面选择需进行DDL变更作业所在行的"更多 \> 停止"，停止CDL作业。
2. 使用客户端安装用户登录安装了客户端的节点，并执行以下命令： 
   **cd** *客户端安装目录*
   **source bigdata_env**
   **source** **Hudi/** **component_env**
   **kinit** *组件业务用户*（如果集群未开启Kerberos认证，请跳过该操作）
   
   
3. 执行以下命令登录spark-sql命令行： 
   **cd** **Spark/spark/bin**
   **./spark-sql**
   
   
4. 执行以下命令： 
   **set hoodie.schema.evolution.enable=true**;
   
   
5. 执行以下命令在表中新增字段： 
   **alter table** *tableName* **add columns(** *columnName* *columnType* **);**
   
   
6. 在源端数据库中新增与Hudi新增的同样列名与数据类型。
7. 在CDL WebUI界面启动[1]停止的任务。
 
#### 修改字段类型
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
字段类型转换时，需要确保源值的数据类型能够正确转换为目标类型。如果数据类型不兼容，转换可能会失败，进而导致任务失败。
- 将数据类型VARCHAR修改为NUMBER
  1. 登录FusionInsight Manager，选择"集群 \> 服务 \> CDL"，单击"CDLService UI"右侧的超链接进入CDLService WebUI界面，在数据同步任务作业列表界面选择需进行DDL变更作业所在行的"更多 \> 停止"，停止CDL作业。
  
  2. 使用客户端安装用户登录安装了客户端的节点，并执行以下命令： **cd** *客户端安装目录*
     **source bigdata_env**
     **source** **Hudi/** **component_env**
     **kinit** *组件业务用户*（如果集群未开启Kerberos认证，请跳过该操作）
     
  
  3. 执行以下命令登录spark-sql命令行： **cd** **Spark/spark/bin**
     **./spark-sql**
     
  
  4. 在Hudi侧执行DDL变更，修改数据类型**string** 为**decimal：**
     **ALTER TABLE** *ddltest* **ALTER COLUMN string TYPE decimal(20,10);**
     
  
  5. 在源数据库中插入数据，数据可以正常写入Hudi。
  
  6. 在源数据库侧，将数据类型VARCHAR修改为NUMBER。
  
  7. 在CDL WebUI界面启动任务，源数据库更新数据。
   
- 将数据类型NUMBER修改为VARCHAR
  1. 登录FusionInsight Manager，选择"集群 \> 服务 \> CDL"，单击"CDLService UI"右侧的超链接进入CDLService WebUI界面，在数据同步任务作业列表界面选择需进行DDL变更作业所在行的"更多 \> 停止"，停止CDL作业。
  
  2. 使用客户端安装用户登录安装了客户端的节点，并执行以下命令： **cd** *客户端安装目录*
     **source bigdata_env**
     **source** **Hudi/** **component_env**
     **kinit** *组件业务用户*（如果集群未开启Kerberos认证，请跳过该操作）
     
  
  3. 执行以下命令登录spark-sql命令行： **cd** **Spark/spark/bin**
     **./spark-sql**
     
  
  4. 在Hudi侧执行DDL变更，修改数据类型decimal为string： **ALTER TABLE** *ddltest* **ALTER COLUMN decimal TYPE string;**
     
  
  5. 在源数据库中插入数据，数据可以正常写入Hudi。
  
  6. 在源数据库侧，将数据类型NUMBER修改为VARCHAR。
  
  7. 在CDL WebUI界面启动任务，源数据库更新数据。
   
- 将数据类型DATE修改为VARCHAR
  1. 登录FusionInsight Manager，选择"集群 \> 服务 \> CDL"，单击"CDLService UI"右侧的超链接进入CDLService WebUI界面，在数据同步任务作业列表界面选择需进行DDL变更作业所在行的"更多 \> 停止"，停止CDL作业。
  
  2. 使用客户端安装用户登录安装了客户端的节点，并执行以下命令： **cd** *客户端安装目录*
     **source bigdata_env**
     **source** **Hudi/** **component_env**
     **kinit** *组件业务用户*（如果集群未开启Kerberos认证，请跳过该操作）
     
  
  3. 执行以下命令登录spark-sql命令行： **cd** **Spark/spark/bin**
     **./spark-sql**
     
  
  4. 在Hudi侧执行DDL变更，修改数据类型date为string： **ALTER TABLE** *ddltest2* **ALTER COLUMN date TYPE string;**
     
  
  5. 在源数据库插入数据，数据可以正常写入Hudi。
  
  6. 在源数据库侧，将数据类型DATE修改为VARCHAR。
  
  7. 在CDL WebUI界面启动任务，源数据库更新数据。
   
 
- 不带时区DATA类型修改为带时区的DATA类型
  1. 登录FusionInsight Manager，选择"集群 \> 服务 \> CDL"，单击"CDLService UI"右侧的超链接进入CDLService WebUI界面，在数据同步任务作业列表界面选择需进行DDL变更作业所在行的"更多 \> 停止"，停止CDL作业。
  
  2. 在源数据库侧，将数据类型timestamp修改为timestamptz。
  
  3. 在源数据库插入数据，数据可以正常写入Hudi。
  
  4. 在CDL WebUI界面启动任务，源数据库更新数据。
   
- 字符扩长
  1. 登录FusionInsight Manager，选择"集群 \> 服务 \> CDL"，单击"CDLService UI"右侧的超链接进入CDLService WebUI界面，在数据同步任务作业列表界面选择需进行DDL变更作业所在行的"更多 \> 停止"，停止CDL作业。
  
  2. 在源数据库将字符长度增大。
  
  3. 在源数据库插入数据，数据成功写入Hudi。
  
  4. 在CDL WebUI界面启动任务，源数据库更新数据。
   
- decimal精度变大
  1. 登录FusionInsight Manager，选择"集群 \> 服务 \> CDL"，单击"CDLService UI"右侧的超链接进入CDLService WebUI界面，在数据同步任务作业列表界面选择需进行DDL变更作业所在行的"更多 \> 停止"，停止CDL作业。
  
  2. 使用客户端安装用户登录安装了客户端的节点，并执行以下命令： **cd** *客户端安装目录*
     **source bigdata_env**
     **source** **Hudi/** **component_env**
     **kinit** *组件业务用户*（如果集群未开启Kerberos认证，请跳过该操作）
     
  
  3. 执行以下命令登录spark-sql命令行： **cd** **Spark/spark/bin**
     **./spark-sql**
     
  
  4. 在Hudi侧执行DDL变更，将decimal类型精度变大： **ALTER TABLE** *ddltest2* **ALTER COLUMN decimal TYPE decimal(** *30* **,** *15* **);**
     
  
  5. 在源数据库侧，将decimal类型精度变大。
  
  6. 在源数据库插入数据，数据可以正常写入Hudi。
  
  7. 在CDL WebUI界面启动任务，源数据库更新数据。
   
#### 修改字段名称
1. 登录FusionInsight Manager，选择"集群 \> 服务 \> CDL"，单击"CDLService UI"右侧的超链接进入CDLService WebUI界面，在数据同步任务作业列表界面选择需进行DDL变更作业所在行的"更多 \> 停止"，停止CDL作业。
2. 使用客户端安装用户登录安装了客户端的节点，并执行以下命令： 
   **cd** *客户端安装目录*
   **source bigdata_env**
   **source** **Hudi/** **component_env**
   **kinit** *组件业务用户*（如果集群未开启Kerberos认证，请跳过该操作）
   
   
3. 执行以下命令登录spark-sql命令行： 
   **cd** **Spark/spark/bin**
   **./spark-sql**
   
   
4. 在Hudi侧执行DDL变更，修改字段名称： 
   **ALTER TABLE** *ddltest* **RENAME COLUMN** *columnName* **TO** *newColumnName* ***;***
   
   
5. 在源数据库修改字段名称。
6. 在CDL WebUI界面启动任务，源数据库更新数据。
 
#### 删除字段
1. 登录FusionInsight Manager，选择"集群 \> 服务 \> CDL"，单击"CDLService UI"右侧的超链接进入CDLService WebUI界面，在数据同步任务作业列表界面选择需进行DDL变更作业所在行的"更多 \> 停止"，停止CDL作业。
2. 使用客户端安装用户登录安装了客户端的节点，并执行以下命令： 
   **cd** *客户端安装目录*
   **source bigdata_env**
   **source** **Hudi/** **component_env**
   **kinit** *组件业务用户*（如果集群未开启Kerberos认证，请跳过该操作）
   
   
3. 执行以下命令登录spark-sql命令行： 
   **cd** **Spark/spark/bin**
   **./spark-sql**
   
   
4. 在Hudi侧执行DDL变更，删除字段： 
   **ALTER TABLE** ddltest**DROP COLUMN** *columnName* **;**
   
   
5. 在CDL WebUI界面启动任务，源数据库更新数据。
 
