自动建表原理介绍
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 | - |


