更新时间:2024-11-29 GMT+08:00

DDL变更

DDL变更操作包括创建数据库/表、变更表字段类型、变更表字段名称、表列增/删等数据表结构变化操作。当前CDL仅支持从PgSQL同步数据到Hudi的DDL变更,所有DDL变更操作顺序为:

  1. 停止CDL任务。
  2. Hudi侧执行DDL变更。
  3. 源端库进行DDL变更。

本章节提供了新增字段、修改字段类型、修改字段名称、删除字段等DDL变更操作指导。

CDL DDL支持本章节所述的DDL操作,本章节未提及的链路及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停止的任务。

修改字段类型

字段类型转换时,需要确保源值的数据类型能够正确转换为目标类型。如果数据类型不兼容,转换可能会失败,进而导致任务失败。

  • 将数据类型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变更,修改数据类型stringdecimal:

      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界面启动任务,源数据库更新数据。