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

原生数据类型

DLI支持原生数据类型,请参见表1

表1 原生数据类型

数据类型

描述

存储空间

范围

OBS表支持情况

INT

有符号整数

4字节

-2147483648~2147483647

STRING

字符串

-

-

FLOAT

单精度浮点型

4字节

-

DOUBLE

双精度浮点型

8字节

-

DECIMAL(precision,scale)

10进制精确数字类型。固定有效位数和小数位数的数据类型,例如:3.5

  • precision:表示最多可以表示多少位的数字。
  • scale:表示小数部分的位数。

-

1<=precision<=38

0<=scale<=38

若不指定precision和scale,则默认为decimal(38,38)。

BOOLEAN

布尔类型

1字节

TRUE/FALSE

SMALLINT/SHORT

有符号整数

2字节

-32768~32767

TINYINT

有符号整数

1字节

-128~127

BIGINT/LONG

有符号整数

8字节

-9223372036854775808~9223372036854775807

TIMESTAMP

时间戳,表示日期和时间,格式为原始数据。例如:1621434131222

-

-

CHAR

固定长度字符串

-

-

VARCHAR

可变长度字符串

-

-

DATE

日期类型,描述了特定的年月日,以yyyy-mm-dd格式表示,例如:2014-05-29

-

DATE类型不包含时间,所表示日期的范围为0000-01-01~ 9999-12-31。

  • VARCHAR和CHAR在DLI实际存储是STRING型,因此超出长度的字符串不会被截断。
  • FLOAT类型在DLI实际存储是DOUBLE型。

INT

有符号整数,存储空间为4字节,-2147483648~2147483647,在NULL情况下,默认值为0。

STRING

字符串类型。

FLOAT

单精度浮点型,存储空间为4字节,在NULL情况下,采用计算值默认值为0。

由于浮点类型的数据在计算机中的存储方式的限制,在比较两个浮点类型的数据是否相等时,因存在精度问题,不能直接采用“a==b”的方式进行比较,建议使用“(a-b)的绝对值<=EPSILON”这种方式进行比较,EPSILON为允许的误差范围,一般为1.19209290E-07F。若两个浮点数的差值的绝对值在这个范围内就认为相等。

DOUBLE

双精度浮点型,存储空间为8字节,在NULL情况下,采用计算值默认值为0。

由于浮点类型的数据在计算机中的存储方式的限制,在比较两个浮点类型的数据是否相等时,因存在精度问题,不能直接采用“a==b”的方式进行比较,建议使用“(a-b)的绝对值<=EPSILON”这种方式进行比较,EPSILON为允许的误差范围,一般为2.2204460492503131E-16。若两个浮点数的差值的绝对值在这个范围内就认为相等。

DECIMAL

Decimal(p,s)表示数值中共有p位数,其中整数p-s位,小数s位。p表示可储存的最大十进制数的位数总数,小数点左右两侧都包括在内。有效位数p必须是1至最大有效位数38之间的值。s表示小数点右侧所能储存的最大十进制数的位数。小数位数必须是从0到p的值。只有在指定了有效位数时,才能指定小数位数。因此,0 ≤ s ≤ p。例如:decimal(10,6),表示数值中共有10位数,其中整数占4位,小数占6位。

BOOLEAN

布尔类型,包括TRUE与FALSE。

SMALLINT/SHORT

有符号整数,存储空间为2字节,范围为-32768~32767。当为NULL情况下,采用计算值默认为0。

TINYINT

有符号整数,存储空间为1字节,范围为-128~127。当为NULL情况下,采用计算值默认为0。

BIGINT/LONG

有符号整数,存储空间为8字节,范围为-9223372036854775808~9223372036854775807,不支持科学计数法。当为NULL情况下。采用计算值默认为0。

TIMESTAMP

支持传统的UNIX TIMESTAMP,提供达到微秒级别精度的选择。TIMESTAMP是以指定时间和UNIX epoch(UNIX epoch时间为1970年1月1日00:00:00)之间的秒数差定义的。可以向TIMESTAMP隐性转换的数据类型有STRING(必须具有"yyyy-MM-dd HH:MM:SS[.ffffff]"格式。小数点后精度可选)。

CHAR

CHAR的长度是固定的,使用指定长度的固定长度表示字符串。DLI中实际存储为STRING类型。

VARCHAR

VARCHAR生成时会带有一个长度指定数,用来定义字符串中的最大字符数。如果一个向VARCHAR转换的STRING型中的字符个数超过了长度指定数,那么这个STRING会被自动缩短。和STRING类型一样,VARCHAR末尾的空格数是有意义的,会影响比较结果。DLI中实际存储为STRING类型。

DATE

DATE类型只能和DATE、TIMESTAMP和STRING进行显式转换(cast),具体如表2所示。

表2 cast函数转换

显式转换

转换结果

cast(date as date)

相同DATE值。

cast(timestamp as date)

根据本地时区从TIMESTAMP得出年/月/日,将其作为DATE值返回。

cast(string as date)

如果字符串的形式是“yyyy-MM-dd”,将对应年/月/日作为DATE值返回。如果字符串不具有这种形式,返回空。

cast(date as timestamp)

根据本地时区生成并返回对应DATE的年/月/日零点的TIMESTAMP值。

cast(date as string)

根据DATE的年/月/日值生成并返回“yyyy-MM-dd”格式的字符串。