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 |
FLOA,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通过coverted_type(已废弃)或logical_type进一步描述类型行为。DWS(写)PARQUET仅使用logical_type,但(读)时兼容coverted_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)] |