基礎資料型別 (Elementary Data Type)
MaxCompute2.0支援的基礎資料型別 (Elementary Data Type)如下表所示,新增類型有TINYINT、SMALLINT、 INT、 FLOAT、VARCHAR、TIMESTAMP和BINARY,MaxCompute表中的列必須是下列描述的任意一種類型,詳情如下:
说明 目前MaxCompute SQL及新版本Mapreduce支援的Set命令分為以下兩種方式:
- session層級:要使用新資料類型(Tinyint、Smallint、 Int、 Float、Varchar、TIMESTAMP BINARY),需在建表語句前加上set語句
,並與建表語句一起提交執行。set odps.sql.type.system.odps2=true;
- project層級:即支援對project層級進行新類型開啟。project的Owner可根據需要對project進行設定,命令為:
對setproject的詳細說明請參見:其他動作。- setproject odps.sql.type.system.odps2=true;
涉及INT類型,加上述set語句的時候是32位,不加的時候會被轉換成BIGINT,是64位。
MR類型任務目前暫時不支援操作新資料類型。
類型 | 是否新增 | 常量定義 | 描述 |
---|---|---|---|
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日,精確到毫秒(注釋4) |
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
,不同部分可以寫在不同行上。 - 注釋4:目前查詢顯示的時間值不包含毫秒。Tunnel 命令通過
-dfp
來指定時間格式,可以指定到毫秒顯示,例如tunnel upload -dfp 'yyyy-MM-dd HH:mm:ss.SSS'
,關於Tunnel命令的更多資訊,請參考Tunnel命令操作。
MaxCompute2.0支援的複雜類型如下表所示。
说明 目前MaxCompute SQL及新版本Mapreduce支援的Set命令分為以下兩種方式:
- session層級:要使用新資料類型(Tinyint、Smallint、 Int、 Float、Varchar、TIMESTAMP BINARY),需在建表語句前加上set語句
,並與建表語句一起提交執行。set odps.sql.type.system.odps2=true;
- project層級:即支援對project層級進行新類型開啟。project的Owner可根據需要對project進行設定,命令為:
對setproject的詳細說明請參見:其他動作。- setproject 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) |