基礎資料型別 (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 odps.sql.type.system.odps2=true;
    
    對setproject的詳細說明請參見:其他動作

涉及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 odps.sql.type.system.odps2=true;
    
    對setproject的詳細說明請參見:其他動作
類型 定義方法 構造方法
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)