
# 原生数据类型
DLI支持原生数据类型，请参见[表1]。
 表1原生数据类型 
| **数据类型**                 | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                     | **存储空间** | **范围**                                                                                                                                                                            | **OBS表支持情况** | **DLI表支持情况** |
|:---|:---|:---|:---|:---|:---|
| 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。                                                                                                                                     | 是            | 是            |
   
![](https://support.huaweicloud.com/sqlref-spark-dli/public_sys-resources/note_3.0-zh-cn.png)
- 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]所示。
 表2cast函数转换 
| **显式转换**                | **转换结果**                                                  |
|:---|:---|
| 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"格式的字符串。                     |
   
