更新时间:2022-07-29 GMT+08:00

支持的数据类型

目前大数据领域,主流文件格式为ORC。GaussDB(DWS)主要支持ORC文件格式。用户利用HIVE将数据导出存储为ORC文件格式,使用GaussDB(DWS)通过只读外表对ORC文件内的数据进行查询分析,因此,需要在ORC文件格式支持的数据类型与GaussDB(DWS)自身支持数据类型间进行匹配,匹配状况如表1所示。同理,GaussDB(DWS)可通过只写外表将数据导出存储为ORC文件格式,使用HIVE读取ORC文件内容,相互之间也需要类型匹配,匹配状况如表2所示:

表1 ORC格式的只读外表与HIVE数据类型匹配关系

类型名称

GaussDB(DWS)外表支持类型

HIVE建表类型

1字节整数

TINYINT(不推荐)

TINYINT

SMALLINT(推荐)

TINYINT

2字节整数

SMALLINT

SMALLINT

4字节整数

INTEGER

INT

8字节整数

BIGINT

BIGINT

单精度浮点数

FLOAT4 (REAL)

FLOAT

双精度浮点型

FLOAT8(DOUBLE PRECISION)

DOUBLE

科学数据类型

DECIMAL[p (,s)] 最大支持38位精度

DECIMAL最大支持38位(HIVE 0.11)

日期类型

DATE

DATE

时间类型

TIMESTAMP

TIMESTAMP

BOOLEAN类型

BOOLEAN

BOOLEAN

Char类型

CHAR(n)

CHAR (n)

VarChar类型

VARCHAR(n)

VARCHAR (n)

字符串(文本大对象)

TEXT(CLOB)

STRING

表2 ORC格式的只写外表与HIVE数据类型匹配关系

类型名称

GaussDB(DWS)内表支持类型(数据源表)

GaussDB(DWS)只写外表对应的类型

HIVE建表类型

1字节整数

TINYINT

TINYINT(不推荐)

SMALLINT

SMALLINT(推荐)

SMALLINT

2字节整数

SMALLINT

SMALLINT

SMALLINT

4字节整数

INTEGER、BINARY_INTEGER

INTEGER

INT

8字节整数

BIGINT

BIGINT

BIGINT

单精度浮点数

FLOAT4 、REAL

FLOAT4、REAL

FLOAT

双精度浮点型

DOUBLE PRECISION、FLOAT8、BINARY_DOUBLE

DOUBLE PRECISION、FLOAT8、BINARY_DOUBLE

DOUBLE

科学数据类型

DECIMAL、NUMERIC

DECIMAL[p (,s)] 最大支持38位精度

precision <=38时,DECIMAL, precision > 38时, STRING

日期类型

DATE

TIMESTAMP[(p)] [WITHOUT TIME ZONE]

TIMESTAMP

时间类型

TIME [(p)] [WITHOUT TIME ZONE]、TIME [(p)] [WITH TIME ZONE]

TEXT

STRING

TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)][WITH TIME ZONE]、SMALLDATETIME

TIMESTAMP[(p)] [WITHOUT TIME ZONE]

TIMESTAMP

INTERVAL DAY (l) TO SECOND (p)、INTERVAL [FIELDS] [ (p) ]

VARCHAR(n)

VARCHAR(n)

BOOLEAN类型

BOOLEAN

BOOLEAN

BOOLEAN

Char类型

CHAR(n)、CHARACTER(n)、NCHAR(n)

CHAR(n)、CHARACTER(n)、NCHAR(n)

n<=255时,CHAR(n), n>255 时,STRING

VarChar类型

VARCHAR(n)、CHARACTER VARYING(n)、VARCHAR2(n)、

VARCHAR(n)

n<=65535时,VARCHAR (n),n>65535时,STRING

NVARCHAR2(n)

TEXT

STRING

字符串(文本大对象)

TEXT、CLOB

TEXT、CLOB

STRING

货币类型

MONEY

NUMERIC

BIGINT

  1. GaussDB(DWS)外表支持NULL定义,HIVE数据表支持并采用相对应的NULL定义。
  2. HIVE数据表中的TINYINT的取值范围为[-128,127],而 GaussDB(DWS) 的TINYINT的取值范围为[0,255], 因此,HIVE表中的TINYINT类型在建GaussDB(DWS)只读外表时最好采用SMALLINT类型,如果使用TINYINT有可能存在读取值与实际值不一致的情况。同样,GaussDB(DWS)的TINYINT类型在导出时,只写外表和HIVE的建表类型也最好采用SMALLINT类型。
  3. GaussDB(DWS)外表的日期和时间类型,不支持时区定义,HIVE不支持时区定义。
  4. HIVE中date类型只有日期,没有时间,GaussDB(DWS)的date类型包含日期和时间。
  5. GaussDB(DWS)支持ORC的压缩格式,包括ZLIB,SNAPPY,LZ4及NONE压缩方式。
  6. 其中FLOAT4格式本身存在不精准问题,求和等操作在不同环境下可能产生不同的结果,在高精度要求场景下建议使用DECIMAL类型代替。
  7. 兼容Teradata数据库模式下,外表不支持DATE类型。