閱讀470 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Oracle - ODPS數據類型轉換

ODPS數據類型:

類型

描述

取值範圍

Bigint

8字節有符號整型。請不要使用整型的最小值 (-9223372036854775808),這是係統保留值。

-9223372036854775807 ~ 9223372036854775807

String

字符串,支持UTF-8編碼。其他編碼的字符行為未定義。

單個String列最長允許8MB。

Boolean

布爾型。

True/False

Double

8字節雙精度浮點數。

-1.0 10308 ~ 1.0 10308

Datetime

日期類型。使用東八區時間作為係統標準時間。

0001-01-01 00:00:00 ~ 9999-12-31 23:59:59

decimal

decimal類型支持null值,小數點前36位有效數字,小數點後18位有效數字。
正負無窮, 不支持,如果計算結果為正負無窮,或超出decimal的值域時拋異常,絕對值小於最小可表達範圍時,置0。

 -999999999999999999999999999999999999.999999999999999999 ~ 999999999999999999999999999999999999.999999999999999999
select '1',cast("999999999999999999999999999999999999.999999999999999999" as decimal) from dual;

oracle與ODPS的數據類型映射表

Data Type

Description

ODPS

ODPS Desc

VARCHAR2(size [BYTE | CHAR])

VARCHAR2(1-4000)

string

單個String列最長允許8MBOralce12c最長的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

 

最後更新:2017-07-04 22:32:08

  上一篇:go  CentOS6 mininal 安裝CouchDB2 詳細版
  下一篇:go  程序員選手機那些事兒