原生数据类型
DLI支持原生数据类型,请参见表1。
数据类型 | 描述 | 存储空间 | 范围 | OBS表支持情况 |
|---|---|---|---|---|
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所示。

