DWS外表与HIVE/SPARK、ORC及PARQUET数据类型的映射关系
使用外表读取Hive/Spark数据或其他第三方组件的ORC/Parquet数据时,由于不同平台数据类型存在差异,可能导致读取过程中数据不兼容问题。本节阐述了DWS外表数据类型与这些数据源数据类型之间的映射关系,通过正确配置外表字段数据类型,确保数据在DWS中能被准确识别、处理和查询,从而避免数据丢失,保障业务数据完整获取。
具体的外表语法请参考CREATE FOREIGN TABLE (SQL on OBS or Hadoop)。
DWS外表与HIVE/SPARK数据类型映射关系
表1以DWS外表支持的类型为基准,某些在HIVE/SPARK中支持的类型比如INTERVAL、UNION等,在DWS外表中不支持。
类型名称 | DWS外表类型 | HIVE类型 | SPARK类型 |
|---|---|---|---|
1字节整数 |
| TINYINT | BYTE,TINYINT |
2字节整数 | SMALLINT | SMALLINT | SHORT,SMALLINT |
4字节整数 | INTEGER | INT,INTEGER | INT,INTEGER |
8字节整数 | BIGINT | BIGINT | LONG,BIGINT |
单精度浮点 | FLOAT,REAL | FLOAT | FLOAT,REAL |
双精度浮点 | FLOAT8,DOUBLE | DOUBLE | DOUBLE |
科学数据 | DECIMAL[p (,s)] | DECIMAL | DECIMAL |
日期类型 | DATE | DATE | DATE |
时间类型 | TIMESTAMP WITHOUT TIME ZONE | TIMESTAMP | TIMESTAMP_NTZ |
TIMESTAMP WITH TIME ZONE | TIMESTAMP,TIMESTAMP_LTZ | ||
布尔类型 | BOOLEAN | BOOLEAN | BOOLEAN |
Char类型 | CHAR(n) | CHAR | CHAR(length) |
Varchar类型 | VARCHAR(n) | VARCHAR | VARCHAR(length) |
NVARCHAR2 | |||
text类型 | TEXT(CLOB) | STRING | STRING |
二进制类型 | BYTEA | BINARY | BINARY |
复杂类型 | JSON | ARRAY | ARRAY |
MAP | MAP | ||
STRUCT | STRUCT |
DWS外表与ORC数据类型映射关系
- “ORC类型”是ORC格式规范定义的内部类型,通常无需特别关注,在HIVE/SPARK定义不明确的场景下,可作为创建DWS外表的参考。
- DWS外表写入ORC文件时存在明确的一对一类型对应关系,但在(读)场景下,除了推荐的类型对应关系外,还存在一些可以兼容读取的场景,表2列出了这些兼容的情况。
类型分类 | ORC类型 | DWS外表类型(读) | DWS外表类型(写) |
|---|---|---|---|
整数类型 | boolean (1 bit) | BOOLEAN | BOOLEAN |
tinyint (8 bit) |
| TINYINT(不推荐) | |
smallint (16 bit) | SMALLINT | SMALLINT | |
int (32 bit) | INTEGER | INTEGER | |
bigint (64 bit) | BIGINT | BIGINT | |
浮点类型 | float | FLOAT4 | FLOAT4 |
double | FLOAT8 | FLOAT8 | |
字符串类型 | string |
|
|
char |
| CHAR (n) | |
varchar | VARCHAR(n) | VARCHAR (n) | |
二进制类型 | binary | BYTEA | BYTEA |
科学数据 | decimal | DECIMAL[p (,s)] | DECIMAL[p (,s)] |
时间类型 | timestamp |
|
|
timestamp with local time zone |
| 不支持 | |
date |
| DATE | |
复杂类型 | struct |
| 不支持 |
list |
| 不支持 | |
map |
| 不支持 | |
union | 不支持 | 不支持 |
DWS外表与PARQUET数据类型映射关系
“PARQUET类型”指PARQUET格式规范定义的内部存储类型,PARQUET通过converted_type(已废弃)或logical_type进一步描述类型行为。DWS(写)PARQUET仅使用logical_type,但(读)时兼容converted_type。
PARQUET类型 | DWS外表类型(读) | DWS外表类型(写) |
|---|---|---|
BOOLEAN | BOOLEAN | BOOLEAN |
INT32 |
|
|
INT64 |
|
|
INT96 |
| 不支持 |
FLOAT | FLOAT4 | FLOAT4 |
DOUBLE | FLOAT8 | FLOAT8 |
BYTE_ARRAY |
|
|
FIXED_LEN_BYTE_ARRAY | DECIMAL[p (,s)] | DECIMAL[p (,s)] |

