更新时间:2024-08-08 GMT+08:00
分享

自动建表原理介绍

CDM将根据源端的字段类型进行默认规则转换成目的端字段类型,并在目的端建数据表。

自动建表时的字段类型映射

CDM在数据仓库服务(Data Warehouse Service,简称DWS)中自动建表时,DWS的表与源表的字段类型映射关系如图1所示。例如使用CDM将Oracle整库迁移到DWS,CDM在DWS上自动建表,会将Oracle的NUMBER(3,0)字段映射到DWS的SMALLINT

图1 自动建表的字段映射

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数据类型限制,此场景可能会导致数据写入后精度丢失。
表1 MySQL->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

-

表2 Oracle->Hive自动建表时的字段映射

数据类型(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

-

表3 PostgreSQL、DWS->Hive自动建表时的字段映射

数据类型(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

-

表4 SQL Server->Hive自动建表时的字段映射

数据类型( 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

-

相关文档