Maxcompute基本數據類型
MaxCompute2.0 支持的基本數據類型如下表,新增類型有:TINYINT、SMALLINT、 INT、 FLOAT、VARCHAR、TIMESTAMP 和 BINARY,MaxCompute 表中的列必須是下列描述的任意一種類型,詳情如下:
注意:
若想使用新數據類型,需在 SQL 語句前加語句:set odps.sql.type.system.odps2=true;
類型 | 是否新增 | 常量定義 | 描述 |
---|---|---|---|
TINYINT | 是 | 1Y,-127Y | 8 位有符號整形,範圍 -128 到 127 |
SMALLINT | 是 | 32767S, -100S | 16 位有符號整形, 範圍 -32768 到 32767 |
INT | 是 | 1000,-15645787(註釋1) | 32位有符號整形,範圍-231到231 - 1 |
BIGINT | 否 | 100000000000L, -1L | 64位有符號整形, 範圍-263 + 1到263 - 1 |
FLOAT | 是 | 無 | 32位二進制浮點型 |
DOUBLE | 否 | 3.1415926 1E+7 | 64位二進制浮點型 |
DECIMAL | 否 | 3.5BD, 99999999999.9999999BD | 10 進制精確數字類型,整形部分範圍-1036+1到1036-1, 小數部分精確到 10-18 |
VARCHAR | 是 | 無 ( 註釋2 ) | 變長字符類型,n爲長度,取值範圍 1 到 65535 |
STRING | 否 | “abc”,’bcd’,”alibaba” ‘inc’ ( 註釋3 ) | 字符串類型,目前長度限制爲 8M |
BINARY | 是 | 無 | 二進制數據類型,目前長度限制爲 8M |
DATETIME | 否 | DATETIME ‘2017-11-11 00:00:00’ | 日期時間類型,範圍從0000年1月1日到9999年12月31日,精確到毫秒 |
TIMESTAMP | 是 | TIMESTAMP ‘2017-11-11 00:00:00.123456789’ | 與時區無關的時間戳類型,範圍從0000年1月1日到9999年12月31日 23.59:59.999999999, 精確到納秒 |
BOOLEAN | 否 | TRUE,FALSE | boolean 類型, 取值 TRUE 或 FALSE |
上述的各種數據類型均可爲 NULL。
註釋:
註釋1:對於 INT 常量,如果超過 INT 取值範圍,會轉爲 BIGINT;如果超過 BIGINT 取值範圍,會轉爲 DOUBLE。
在舊版 MaxCompute 中,因爲歷史原因,SQL 腳本中的所有 INT 類型都被轉換爲 BIGINT,例如:
create table a_bigint_table(a int); – 這裏的int實際當作bigint處理
select cast(id as int) from mytable; – 這裏的int實際當作bigint處理
爲與MaxCompute 原有模式兼容,MaxCompute2.0 在未設定 odps.sql.type.system.odps2 爲 true的情況下,仍保留此轉換,但會報告一個警告,提示 INT 被當作 BIGINT 處理了,如果您的腳本有此種情況,建議全部改寫爲BIGINT,避免混淆。
註釋2:VARCHAR 類型常量可通過 STRING 常量的隱式轉換表示。
註釋3:STRING 常量支持連接,例如 ‘abc’ ‘xyz’ 會解析爲 ‘abcxyz’,不同部分可以寫在不同行上。
複雜數據類型
MaxCompute2.0 支持的複雜類型見下表。
注意:
若想使用新數據類型,需在 SQL 語句前加語句:set odps.sql.type.system.odps2=true;
類型 | 定義方法 | 構造方法 |
---|---|---|
ARRAY | array< int >; array< struct< a:int, b:string >> | array(1, 2, 3); array(array(1, 2); array(3, 4)) |
MAP | map< string, string >; map< smallint, array< string>> | map(“k1”, “v1”, “k2”, “v2”); map(1S, array(‘a’, ‘b’), 2S, array(‘x’, ‘y)) |
STRUCT | struct< x:int, y:int>; struct< field1:bigint, field2:array< int>, field3:map< int, int>> | named_struct(‘x’, 1, ‘y’, 2); named_struct(‘field1’, 100L, ‘field2’, array(1, 2), ‘field3’, map(1, 100, 2, 200) |
轉自https://bbs.aliyun.com/read/542089.html
作者詳見源鏈接