Data Type
Description
ODPS
转换到ODPS Desc
VARCHAR2(size [BYTE | CHAR])
VARCHAR2(1-4000)
string
单个String列最长允许8MB。Oralce12c最长的varchar(30000)约为30Kb,可以存储。但是如果文本不是需要分析的列,最好还是放在OSS中。
NVARCHAR2(size)
NVARCHAR2(1-4000)
string
单个String列最长允许8MB。
NUMBER [ (p [, s]) ]
无小数位
19位以下:NUMBER(19, 0)
36位以下:NUMBER(36, 0)
有小数位
p and s 小于等于17,例如NUMBER(17,2)
p-s小于等于36,s小于等于18,例如NUMBER(38,2)
其他
无小数位
bigint
decimal
有小数位
double
decimal
string
考虑精度丢失情况,数值1.1在oracle存储和在ODPS存储必须完全相等。所以,这里的相等就是看到的数字全一致。无法对应的数据类型,只能存储为varchar。
FLOAT [(p)]
float(8)
其他
double
参考number
Float中的p指的是二进制的长度,最大可以到126。等同于NUMBER(38)。占22字节。所以,如果数据与NUMBER相同,请参考NUMBER对应关系。
LONG
最长可以到达2Gb长度的字符类型。
无
建议数据存储在OSS
DATE
日期
datetime
因为当前ADS日期类型函数支持不够丰富,统一转为unixtime格式,存储为bigint类型。如果同步到ADS也要存储为日期,转为datetime类型。(oracle 年的范围 -4713 到 +9999)
BINARY_FLOAT
32-bit floating point number. This data type requires 4 bytes.
double
等同于oracle的float(4),number(7)
BINARY_DOUBLE
64-bit floating point number. This data type requires 8 bytes.
double
等同于oracle的float(8), number(17)
TIMESTAMP[(fractional_seconds_precision)]
时间戳
datetime
因为当前ADS日期类型函数支持不够丰富,统一转为unixtime格式,存储为bigint类型。如果同步到ADS也要存储为日期,转为datetime类型。
TIMESTAMP[(fractional_seconds_precision)] WITHTIME ZONE
时间戳,带时区
datetime
因为当前ADS日期类型函数支持不够丰富,统一转为unixtime格式,存储为bigint类型。TIME ZONE 特征丢失。
TIMESTAMP[(fractional_seconds_precision)] WITHLOCAL TIME ZONE
时间戳,带时区
datetime
因为当前ADS日期类型函数支持不够丰富,统一转为unixtime格式,存储为bigint类型。TIME ZONE 特征丢失。
INTERVAL YEAR [(year_precision)] TOMONTH
bigint
时间间隔无对应数据类型,建议转为秒
INTERVAL DAY [(day_precision)] TO SECOND[(fractional_seconds_precision)]
bigint
时间间隔无对应数据类型,建议转为秒
RAW(size)
RAW,类似于CHAR,声明方式RAW(L),L为长度,以字节为单位,作为数据库列最大2000,作为变量最大32767字节。
string
string
Oracle中RAW和Varchar2常用的两个转换函数
1. UTL_RAW.CAST_TO_RAW
该函数按照缺省字符集,将VARCHAR2字符串转换为RAW。
insert into cmpp_submit (dest_terminal_id,msg_content) values('13001081371',UTL_RAW.CAST_TO_RAW('您好!'));
2. UTL_RAW.CAST_TO_VARCHAR2
该函数按照缺省字符集合,将RAW转换为VARCHAR2。
select UTL_RAW.CAST_TO_VARCHAR2(msg_content) from cmpp_deliver;
LONG RAW
LONG RAW,类似于LONG,作为数据库列最大存储2G字节的数据,作为变量最大32760字节
建议数据存储在OSS
ROWID
行唯一识别字符串
string
物理ROWID(Physical Rowid)可以让我们快速的访问某些特定的行。只要行存在,它的物理ROWID就不会改变。高效稳定的物理ROWID在查询行集合、操作整个集合和更新子集是很有用的。例如,我们可以在UPDATE或DELETE语句的WHERE子句中比较UROWID变量和ROWID伪列来找出最近一次从游标中取出的行数据。
UROWID [(size)]
行唯一识别字符串的base-64编码
string
扩展ROWID使用检索出来的每一行记录的物理地址的base-64编码。ROWIDTOCHAR(),ROWIDTOCHAR()
CHAR [(size [BYTE | CHAR])]
定长字符串
string
string
NCHAR[(size)]
定长字符串
string
string
CLOB
字符型大字段数据类型
无
建议数据存储在OSS
NCLOB
字符型大字段数据类型
无
建议数据存储在OSS
BLOB
二进制型大字段数据类型
无
建议数据存储在OSS
BFILE
二进制文件,存储在数据库外的操作系统文件,只读的。把此文件当二进制处理。
无
建议数据存储在OSS