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