与Hive、MySQL、Oracle及Hologres的数据类型映射

更新时间:
复制 MD 格式

在进行MaxCompute数据迁移或集成操作时,您需要参照数据类型映射表,设置表字段的数据类型映射关系,以确保数据在不同数据库中能够正确地存储、处理和查询,避免数据丢失或损坏,并且提高工作效率。本文介绍MaxCompute与Hive、Oracle、MySQL及Hologres之间数据类型的映射关系。

与Hive、MySQL、Oracle数据类型映射

MaxCompute与Hive、Oracle、MySQL的数据类型映射表,如下所示。

MaxCompute数据类型

Hive数据类型

Oracle数据类型

MySQL数据类型

BOOLEAN

BOOLEAN

无

说明

Oracle自23C版本开始支持BOOLEAN数据类型。

无

说明

使用过程用TINYINT(1)替代。

TINYINT

TINYINT

NUMBER(3,0)

TINYINT

SMALLINT

SMALLINT

NUMBER(5,0)

SMALLINT

INT

INT

NUMBER(7,0)

MEDIUMINT

INT

INT

NUMBER(10,0)

INT

BIGINT

BIGINT

NUMBER(20,0)

BIGINT

FLOAT

FLOAT

BINARY_FLOAT

说明

Oracle自10g开始有此类型。

FLOAT

DOUBLE

DOUBLE

BINARY_DOUBLE

说明

Oracle自10g开始有此类型。

DOUBLE

DECIMAL

DECIMAL

NUMBER(P,S)

  • DECIMAL

  • NUMERIC

STRING

STRING

  • VARCHAR

  • VARCHAR2

  • CHAR

  • NCHAR

  • NVARCHAR3

  • VARCHAR

  • CHAR

VARCHAR

VARCHAR

  • VARCHAR

  • VARCHAR2

  • CHAR

  • NCHAR

  • NVARCHAR3

VARCHAR

STRING

CHAR

CHAR

CHAR

BINARY

BINARY

RAW

  • BINARY

  • VARBINARY

TIMESTAMP

TIMESTAMP

TIMESTAMP WITH TIME ZONE

TIMESTAMP

TIMESTAMP_NTZ

TIMESTAMP

说明

自Hive 3版本开始支持此类型。

DATETIME

TIMESTAMP

DATE

DATE

DATE

DATE

DATETIME

DATE

DATE

DATETIME

ARRAY

ARRAY

不支持

不支持

MAP

MAP<key,value>

不支持

不支持

STRUCT

STRUCT

不支持

不支持

不支持

UNION

不支持

不支持

不支持

不支持

BLOB

BLOB

与Hologres的数据类型映射

创建Hologres外部表时,MaxCompute与Hologres的数据类型映射如下表所示。

MaxCompute数据类型

Hologres数据类型

支持映射的版本

说明

  • STRING

  • VARCHAR

TEXT

Hologres所有版本

无

BIGINT

INT8

Hologres所有版本

无

INT

  • INT4

  • INT

Hologres所有版本

无

FLOAT

  • FLOAT4

  • REAL

Hologres所有版本

无

DOUBLE

  • FLOAT

  • FLOAT8

Hologres所有版本

无

BOOLEAN

BOOL

Hologres所有版本

无

DATETIME

TIMESTAMP WITH TIME ZONE

Hologres所有版本

MaxCompute的DATETIME是日期时间类型,使用东八区时间作为系统标准时间。范围从0000年1月1日到9999年12月31日,精确到毫秒 。

DECIMAL

NUMERIC

Hologres所有版本

MaxCompute的DECIMAL如果未指定精度,则默认为(38,18),使用IMPORT FOREIGN SCHEMA创建表时系统会自动转换精度。

TIMESTAMP

TIMESTAMP WITH TIME ZONE

Hologres 0.8新增

  • MaxCompute的TIMESTAMP取值范围为0000-01-01 00:00:00.000000000~9999-12-31 23:59:59.999999999,精确到纳秒。

  • Hologres支持的TIMESTAMPTZ精确到毫秒。

    Hologres内部已做精度转换,在读取过程中会自动处理成毫秒。

CHAR(n)

默认为CHAR(n)。

Hologres也支持映射MaxCompute的CHAR(n)为TEXT类型。您需要设置参数set hg_enable_convert_type_for_foreign_table = true,并在建表时将字段类型修改为TEXT。

Hologres 0.8新增

MaxCompute的CHAR(n)为固定长度字符类型,n为长度。最大取值为255。长度不足则使用空格填充。

VARCHAR(n)

默认为VARCHAR(n)。

Hologres也支持映射MaxCompute的VARCHAR(n)为TEXT类型。您需要设置参数set hg_enable_convert_type_for_foreign_table = true,并在建表时将字段类型修改为TEXT。

Hologres 0.8新增

MaxCompute的VARCHAR(n)为变长字符类型,n为长度。取值范围为1~65535。

DATE

DATE

Hologres 0.8新增

无

SMALLINT

默认为INT2。

Hologres也支持映射MaxCompute的SMALLINT为INT8类型。您需要设置参数set hg_enable_convert_type_for_foreign_table = true,并在建表时将字段类型修改为INT8。

Hologres所有版本(0.8版本为 int4, 0.9版本为int2)

无

TINYINT

默认为INT2。

Hologres也支持映射MaxCompute的TINYINT为INT8类型。您需要设置参数set hg_enable_convert_type_for_foreign_table = true,并在建表时将字段类型修改为INT8。

Hologres所有版本(0.8版本为 int4, 0.9版本为int2)

无

CHAR

不支持

不支持

无

ARRAY<INT>

INT4[]

Hologres 0.8新增

无

ARRAY<BIGINT>

INT8[]

Hologres 0.8新增

无

ARRAY<FLOAT>

FLOAT4[]

Hologres 0.8新增

无

ARRAY<DOUBLE>

FLOAT8[]

Hologres 0.8新增

无

ARRAY<BOOLEAN>

BOOLEAN[]

Hologres 0.8新增

无

ARRAY<STRING>

TEXT[]

Hologres 0.8新增

无

BINARY

BYTEA

Hologres 0.9新增

无

ARRAY<TINYINT>

不支持

不支持

无

ARRAY<SMALLINT>

不支持

不支持

无

说明

当MaxCompute数据表中含有Hologres不支持的类型字段时,如果Hologres不访问该字段,则可以正常查询所支持的类型字段。

相关文档

MaxCompute与Hive、MySQL、Oracle内建函数对照表,请参见与Hive、MySQL、Oracle内建函数对照表。