原生数据类型
DLI支持原生数据类型,请参见表1。
数据类型 |
描述 |
存储空间 |
范围 |
OBS表支持情况 |
DLI表支持情况 |
---|---|---|---|---|---|
INT |
有符号整数 |
4字节 |
-2147483648~2147483647 |
是 |
是 |
STRING |
字符串 |
- |
- |
是 |
是 |
FLOAT |
单精度浮点型 |
4字节 |
- |
是 |
是 |
DOUBLE |
双精度浮点型 |
8字节 |
- |
是 |
是 |
DECIMAL(precision,scale) |
10进制精确数字类型。固定有效位数和小数位数的数据类型,例如:3.5
|
- |
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所示。
显式转换 |
转换结果 |
---|---|
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”格式的字符串。 |