自动建表原理介绍
CDM将根据源端的字段类型进行默认规则转换成目的端字段类型,并在目的端建数据表。
自动建表时的字段类型映射
CDM在数据仓库服务(Data Warehouse Service,简称DWS)中自动建表时,DWS的表与源表的字段类型映射关系如图1所示。例如使用CDM将Oracle整库迁移到DWS,CDM在DWS上自动建表,会将Oracle的NUMBER(3,0)字段映射到DWS的SMALLINT。
CDM在Hive中自动建表时,Hive表与源表的字段类型映射关系参见表1、表2、表3及表4。例如使用CDM将MySQL整库迁移到Hive,CDM在Hive上自动建表,会将Oracle的YEAR字段映射到Hive的DATE。
 
   - 针对DECIMAL类型,源端数据源长度超过Hive长度可能导致精度丢失。
 - Hive DECIMAL(P,S)类型1 ≤ precision ≤ 38,0 ≤ scale。源端p > 38位时,Hive按38位创建,s小于0时,按0创建,受Hive数据类型限制,此场景可能会导致数据写入后精度丢失。
 
| 
        数据类型(MySQL)  | 
      
        数据类型(Hive)  | 
      
        说明  | 
     
|---|---|---|
| 
        数值类型  | 
     ||
| 
        tinyint(1),bit(1)  | 
      
        BOOLEAN  | 
      
        -  | 
     
| 
        TINYINT  | 
      
        SMALLINT  | 
      
        -  | 
     
| 
        TINYINT UNSIGNED  | 
      
        SMALLINT  | 
      
        -  | 
     
| 
        SMALLINT  | 
      
        SMALLINT  | 
      
        -  | 
     
| 
        SMALLINT UNSIGNED  | 
      
        INTEGER  | 
      
        -  | 
     
| 
        MEDIUMINT  | 
      
        INTEGER  | 
      
        -  | 
     
| 
        MEDIUMINT UNSIGNED  | 
      
        BIGINT  | 
      
        -  | 
     
| 
        INT  | 
      
        INTEGER  | 
      
        -  | 
     
| 
        INT UNSIGNED  | 
      
        BIGINT  | 
      
        -  | 
     
| 
        BIGINT  | 
      
        BIGINT  | 
      
        -  | 
     
| 
        BIGINT UNSIGNED  | 
      
        DECIMAL(38,0)  | 
      
        -  | 
     
| 
        DECIMAL(P,S)  | 
      
        DECIMAL(P,S)  | 
      
        MySQL最大位数为65位,Hive 1 <= precision <= 38,0 <= scale。MySQL p > 38位时,hive按38位创建,s 小于0时,按0创建。  | 
     
| 
        FLOAT  | 
      
        FLOAT  | 
      
        -  | 
     
| 
        FLOAT UNSIGNED  | 
      
        FLOAT  | 
      
        -  | 
     
| 
        DOUBLE  | 
      
        DOUBLE  | 
      
        -  | 
     
| 
        DOUBLE UNSIGNED  | 
      
        DOUBLE  | 
      
        -  | 
     
| 
        时间类型  | 
     ||
| 
        DATE  | 
      
        DATE  | 
      
        -  | 
     
| 
        YEAR  | 
      
        DATE  | 
      
        -  | 
     
| 
        DATETIME  | 
      
        TIMESTAMP  | 
      
        -  | 
     
| 
        TIMESTAMP  | 
      
        TIMESTAMP  | 
      
        -  | 
     
| 
        TIME  | 
      
        STRING  | 
      
        -  | 
     
| 
        字符类型  | 
     ||
| 
        CHAR(N)  | 
      
        CHAR(N*3)  | 
      
        (n*3<255 )大于255(CHAR_MAX_LENGTH)时,创建为varchar(N*3), 大于65535(VARCHAR_MAX_LENGTH)时创建为String。  | 
     
| 
        VARCHAR(N)  | 
      
        VARCHAR(N*3)  | 
      
        大于65535(VARCHAR_MAX_LENGTH)时创建为String。  | 
     
| 
        BINARY  | 
      
        BINARY  | 
      
        -  | 
     
| 
        VARBINARY  | 
      
        BINARY  | 
      
        -  | 
     
| 
        TINYBLOB  | 
      
        BINARY  | 
      
        -  | 
     
| 
        MEDIUMBLOB  | 
      
        BINARY  | 
      
        -  | 
     
| 
        BLOB  | 
      
        BINARY  | 
      
        -  | 
     
| 
        LONGBLOB  | 
      
        BINARY  | 
      
        -  | 
     
| 
        TINYTEXT  | 
      
        VARCHAR(765)  | 
      
        -  | 
     
| 
        MEDIUMTEXT  | 
      
        STRING  | 
      
        -  | 
     
| 
        TEXT  | 
      
        STRING  | 
      
        -  | 
     
| 
        LONGTEXT  | 
      
        STRING  | 
      
        -  | 
     
| 
        其他类型  | 
      
        STRING  | 
      
        -  | 
     
| 
        数据类型(Oracle)  | 
      
        数据类型(Hive)  | 
      
        说明  | 
     
|---|---|---|
| 
        字符类型  | 
     ||
| 
        CHAR(N)  | 
      
        CHAR(N*3)  | 
      
        (n*3<255 )大于255(CHAR_MAX_LENGTH)时,创建为varchar(N*3), 大于65535(VARCHAR_MAX_LENGTH)时创建为String。  | 
     
| 
        VARCHAR(N)  | 
      
        VARCHAR(N*3)  | 
      
        大于65535(VARCHAR_MAX_LENGTH)时创建为String。  | 
     
| 
        VARCHAR2  | 
      
        VARCHAR(N*3)  | 
      
        大于65535(VARCHAR_MAX_LENGTH)时创建为String。  | 
     
| 
        NCHAR  | 
      
        CHAR(N*3)  | 
      
        -  | 
     
| 
        NVARCHAR2  | 
      
        STRING  | 
      
        -  | 
     
| 
        数值类型  | 
     ||
| 
        NUMBER  | 
      
        DECIMAL(P,S)  | 
      
        Hive 1 <= precision <= 38,0 <= scale。MySQL p > 38位时,hive按38位创建,s 小于0时,按0创建。  | 
     
| 
        BINARY_FLOAT  | 
      
        FLOAT  | 
      
        -  | 
     
| 
        BINARY_DOUBLE  | 
      
        DOUBLE  | 
      
        -  | 
     
| 
        FLOAT  | 
      
        FLOAT  | 
      
        -  | 
     
| 
        时间类型  | 
     ||
| 
        DATE  | 
      
        TIMESTAMP  | 
      
        -  | 
     
| 
        TIMESTAMP  | 
      
        TIMESTAMP  | 
      
        -  | 
     
| 
        TIMESTAMP WITH TIME ZONE  | 
      
        STRING  | 
      
        -  | 
     
| 
        TIMESTAMP WITH LOCAL TIME ZONE  | 
      
        STRING  | 
      
        -  | 
     
| 
        INTERVAL  | 
      
        STRING  | 
      
        -  | 
     
| 
        二进制类型  | 
     ||
| 
        BLOB  | 
      
        BINARY  | 
      
        -  | 
     
| 
        CLOB  | 
      
        STRING  | 
      
        -  | 
     
| 
        NCLOB  | 
      
        STRING  | 
      
        -  | 
     
| 
        LONG  | 
      
        STRING  | 
      
        -  | 
     
| 
        LONG_RAW  | 
      
        BINARY  | 
      
        -  | 
     
| 
        RAW  | 
      
        BINARY  | 
      
        -  | 
     
| 
        其他类型  | 
      
        STRING  | 
      
        -  | 
     
| 
        数据类型(PostgreSQL、DWS)  | 
      
        数据类型(Hive)  | 
      
        说明  | 
     
|---|---|---|
| 
        数值类型  | 
     ||
| 
        int2  | 
      
        SMALLINT  | 
      
        -  | 
     
| 
        int4  | 
      
        INT  | 
      
        -  | 
     
| 
        int8  | 
      
        BIGINT  | 
      
        -  | 
     
| 
        real  | 
      
        FLOAT  | 
      
        -  | 
     
| 
        float4  | 
      
        FLOAT  | 
      
        -  | 
     
| 
        float8  | 
      
        DOUBLE  | 
      
        -  | 
     
| 
        smallserial  | 
      
        SMALLINT  | 
      
        -  | 
     
| 
        serial  | 
      
        INT  | 
      
        -  | 
     
| 
        bigserial  | 
      
        BIGINT  | 
      
        -  | 
     
| 
        numeric(p,s)  | 
      
        DECIMAL(P,S)  | 
      
        Hive 1 <= precision <= 38,0 <= scale。MySQL p > 38位时,hive按38位创建,s 小于0时,按0创建。  | 
     
| 
        money  | 
      
        DOUBLE  | 
      
        -  | 
     
| 
        bit(1)  | 
      
        TINYINT  | 
      
        -  | 
     
| 
        varbit  | 
      
        STRING  | 
      
        -  | 
     
| 
        字符类型  | 
     ||
| 
        varchar(n)  | 
      
        VARCHAR(N*3)  | 
      
        大于65535(VARCHAR_MAX_LENGTH)时创建为String。  | 
     
| 
        bpchar(n)  | 
      
        CHAR(N*3)  | 
      
        (n*3<255 )大于255(CHAR_MAX_LENGTH)时,创建为varchar(N*3), 大于65535(VARCHAR_MAX_LENGTH)时创建为String。  | 
     
| 
        char(n)  | 
      
        CHAR(N*3)  | 
      
        (n*3<255 )大于255(CHAR_MAX_LENGTH)时,创建为varchar(N*3), 大于65535(VARCHAR_MAX_LENGTH)时创建为String。  | 
     
| 
        bytea  | 
      
        BINARY  | 
      
        -  | 
     
| 
        text  | 
      
        STRING  | 
      
        -  | 
     
| 
        时间类型  | 
     ||
| 
        interval  | 
      
        STRING  | 
      
        -  | 
     
| 
        date  | 
      
        DATE  | 
      
        -  | 
     
| 
        time  | 
      
        STRING  | 
      
        -  | 
     
| 
        timetz  | 
      
        STRING  | 
      
        -  | 
     
| 
        timestamp  | 
      
        TIMESTAMP  | 
      
        -  | 
     
| 
        timestamptz  | 
      
        TIMESTAMP  | 
      
        -  | 
     
| 
        布尔类型  | 
     ||
| 
        bool  | 
      
        BOOLEAN  | 
      
        -  | 
     
| 
        其他类型  | 
      
        STRING  | 
      
        -  | 
     
| 
        数据类型( SQL Server)  | 
      
        数据类型(Hive)  | 
      
        说明  | 
     
|---|---|---|
| 
        数值类型  | 
     ||
| 
        TINYINT  | 
      
        SMALLINT  | 
      
        -  | 
     
| 
        SMALLINT  | 
      
        SMALLINT  | 
      
        -  | 
     
| 
        INT  | 
      
        INT  | 
      
        -  | 
     
| 
        BIGINT  | 
      
        BIGINT  | 
      
        -  | 
     
| 
        DECIMAL  | 
      
        DECIMAL(P,S)  | 
      
        Hive 1 <= precision <= 38,0 <= scale。MySQL p > 38位时,hive按38位创建,s 小于0时,按0创建。  | 
     
| 
        NUMERIC  | 
      
        DECIMAL(P,S)  | 
      
        Hive 1 <= precision <= 38,0 <= scale。MySQL p > 38位时,hive按38位创建,s 小于0时,按0创建。  | 
     
| 
        FLOAT  | 
      
        DOUBLE  | 
      
        -  | 
     
| 
        REAL  | 
      
        FLOAT  | 
      
        -  | 
     
| 
        SMALLMONEY  | 
      
        DECIMAL(10,4)  | 
      
        -  | 
     
| 
        MONEY  | 
      
        DECIMAL(19,4)  | 
      
        -  | 
     
| 
        BIT(1)  | 
      
        TINYINT  | 
      
        -  | 
     
| 
        时间类型  | 
     ||
| 
        DATE  | 
      
        DATE  | 
      
        -  | 
     
| 
        DATETIME  | 
      
        TIMESTAMP  | 
      
        -  | 
     
| 
        DATETIME2  | 
      
        TIMESTAMP  | 
      
        -  | 
     
| 
        DATETIMEOFFSET  | 
      
        STRING  | 
      
        -  | 
     
| 
        TIME(p)  | 
      
        STRING  | 
      
        -  | 
     
| 
        TIMESTAMP  | 
      
        BINARY  | 
      
        -  | 
     
| 
        字符类型  | 
     ||
| 
        CHAR(n)  | 
      
        CHAR(n*3)  | 
      
        (n*3<255 )大于255(CHAR_MAX_LENGTH)时,创建为varchar(N*3), 大于65535(VARCHAR_MAX_LENGTH)时创建为String。  | 
     
| 
        VARCHAR(n)  | 
      
        VARCHAR(n*3)  | 
      
        (n*3<255 )大于255(CHAR_MAX_LENGTH)时,创建为varchar(N*3), 大于65536(VARCHAR_MAX_LENGTH)时创建为String。  | 
     
| 
        NCHAR(n)  | 
      
        VARCHAR(n*3)  | 
      
        (n*3<255 )大于255(CHAR_MAX_LENGTH)时,创建为varchar(N*3), 大于65537(VARCHAR_MAX_LENGTH)时创建为String。  | 
     
| 
        NVARCHAR(n)  | 
      
        VARCHAR(n*3)  | 
      
        (n*3<255 )大于255(CHAR_MAX_LENGTH)时,创建为varchar(N*3), 大于65538(VARCHAR_MAX_LENGTH)时创建为String。  | 
     
| 
        二进制类型  | 
     ||
| 
        BINARY  | 
      
        BINARY  | 
      
        -  | 
     
| 
        VARBINARY  | 
      
        BINARY  | 
      
        -  | 
     
| 
        TEXT  | 
      
        STRING  | 
      
        -  | 
     
| 
        其他类型  | 
      
        STRING  | 
      
        -  | 
     
  
    