日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

文檔

2.0數據類型版本

更新時間:

本文為您介紹MaxCompute 2.0數據類型版本的定義、使用場景、支持的數據類型以及與其它數據類型版本的差異。

定義

項目空間選擇數據類型版本為2.0數據類型版本時,項目空間的數據類型屬性參數定義如下。

setproject odps.sql.type.system.odps2=true; --打開MaxCompute 2.0數據類型。
setproject odps.sql.decimal.odps2=true; --打開Decimal 2.0數據類型。
setproject odps.sql.hive.compatible=false; --關閉Hive兼容模式。

適用場景

適用于在2020年04月之前無存量數據的MaxCompute項目,且該項目依賴的產品組件支持2.0數據類型版本。

基礎數據類型

類型

常量示例

描述

TINYINT

1Y、-127Y

8位有符號整型。

取值范圍:-128~127。

SMALLINT

32767S、-100S

16位有符號整型。

取值范圍:-32768~32767。

INT

1000、-15645787

32位有符號整型。

取值范圍:-2 31~2 31-1。

BIGINT

100000000000L、-1L

64位有符號整型。

取值范圍:-2 63+1~2 63 -1。

BINARY

  • unhex('FA34E10293CB42848573A4E39937F479')

  • X'616263'

二進制數據類型,目前長度限制為8 MB。

說明
  • X'num [...]'格式中num是16進制的數字,可以是0~9或者是A~F。例如X'616263',實際代表的是abc,因為字符a的ASCII編碼是0x61,字符b的ASCII編碼是0x62,字符c的ASCII編碼是0x63X'616263'在語義上等效于unhex('616263')

  • 假如字符串長度不是偶數,系統會在前面補0,例如X'616'等效于X'0616'

  • 必須要使用半角單引號,不能使用雙引號,例如X"616263"不會被解釋成BINARY類型常量。

FLOAT

3.14F、cast(3.14159261E+7 as float)

32位二進制浮點型。

說明

由于計算機存儲以及內部計算邏輯,用FLOAT類型進行計算時會有精度損失,如果對精度要求比較高,需要將FLOAT數據類型轉換成DECIMAL類型進行計算。

DOUBLE

3.14D、3.14159261E+7

64位二進制浮點型。

說明

由于計算機存儲以及內部計算邏輯,用DOUBLE類型進行計算時會有精度損失,如果對精度要求比較高,需要將DOUBLE數據類型轉換成DECIMAL類型進行計算。

DECIMAL(precision,scale)

3.5BD、99999999999.9999999BD

10進制精確數字類型。

  • precision:表示最多可以表示多少位的數字。取值范圍:1 <= precision <= 38

  • scale:表示小數部分的位數。取值范圍: 0 <= scale <= 18

如果不指定以上兩個參數,則默認為decimal(38,18)

說明
  • 同一個表中不能同時存在新老Decimal數據類型。

  • 執行setproject odps.sql.hive.compatible=true;命令開啟Hive兼容模式時,Decimal(precision, scale)類型在數據導入(Tunnel Upload)和SQL運算過程中,如果數據的小數位數超過scale的大小,則會進行四舍五入的處理。如果整數部分超出限制,則會報錯。

  • 當參數odps.sql.decimal.tostring.trimzero值為true時去掉小數點后末尾的零,為false時保留小數點后末尾的零,默認值為true。只對表里取數生效,對靜態值不生效。

VARCHAR(n)

變長字符類型,n為長度。

取值范圍:1~65535。

CHAR(n)

固定長度字符類型,n為長度,最大取值為255。長度不足則會填充空格,但空格不參與比較。

STRING

"abc"、'bcd'、"alibaba"、'inc'

字符串類型,目前長度限制為8 MB。

DATE

DATE'2017-11-11'

日期類型,格式為yyyy-mm-dd

取值范圍:0001-01-01~9999-12-31。

DATETIME

DATETIME'2017-11-11 00:00:00'

日期時間類型。

取值范圍:0001-01-01 00:00:00.000~9999-12-31 23:59:59.999,精確到毫秒。

TIMESTAMP

TIMESTAMP'2017-11-11 00:00:00.123456789'

時間戳類型。

取值范圍:0001-01-01 00:00:00.000000000~9999-12-31 23:59:59.999999999,精確到納秒。

說明

TIMESTAMP類型本身與時區無關,在任何時區,TIMESTAMP類型存儲的都是從Epoch(UTC 1970-01-01 00:00:00)開始的一個偏移量。您可以通過內建函數對TIMESTAMP類型數據執行與時區相關的計算,如cast(<a timestamp> as string)將TIMESTAMP類型數據按照當前時區值轉換成STRING類型。

TIMESTAMP_NTZ

TIMESTAMP_NTZ '2017-11-11 00:00:00.123456789'

無時區時間戳類型。

取值范圍:0000-01-01 00:00:00.000000000~9999-12-31 23:59:59.999999999。關于TIMESTAMP_NTZ數據類型介紹,詳情請參見MaxCompute TIMESTAMP_NTZ數據類型介紹

BOOLEAN

True、False

BOOLEAN類型。

取值范圍:True、False。

數據類型說明如下:

  • 上述的各種數據類型均可以為NULL。

  • SQL中的INT關鍵字是32位整型。

    --將a轉換為32位整型。
    cast(a as INT)
  • 整型常量的語義會默認為INT類型。例如SELECT 1 + a;中的整型常量1會被作為INT類型處理。如果常量過長,超過了INT的值域而又沒有超過BIGINT的值域,則會作為BIGINT類型處理;如果超過了BIGINT的值域,則會被作為DOUBLE類型處理。

  • 隱式轉換

    • 部分隱式類型轉換會被禁用。例如,STRING->BIGINT、STRING->DATETIME、DOUBLE->BIGINT、DECIMAL->DOUBLE、DECIMAL->BIGINT有精度損失或者報錯的風險。禁用類型可以通過CAST函數強制進行數據類型轉換。

    • VARCHAR類型常量可以通過隱式轉換為STRING常量。

  • 表、函數以及UDF

    • 參數涉及2.0數據類型的內置函數,在2.0數據類型版本下可以正常使用。

    • UDF包含的數據類型都會按照2.0數據類型進行解析重載。

    • 分區列支持STRING、VARCHAR、CHAR、TINYINT、SMALLINT、INT、BIGINT數據類型。

  • STRING常量支持連接,多(2個及以上)個字符串放一起,會自動連接成一個字符串,例如執行 select 'abc' 'efg' 'ddt';,返回結果為abcefgddt

  • 給DECIMAL字段插入常量時,常量的寫法需要與常量定義中的格式保持一致。例如下面示例代碼中的3.5BD

    insert into test_tb(a) values (3.5BD)
  • DATETIME查詢顯示的時間值不包含毫秒。Tunnel命令通過-dfp來指定時間格式,可以指定到毫秒顯示,例如tunnel upload -dfp 'yyyy-MM-dd HH:mm:ss.SSS'。關于Tunnel命令的更多信息,請參見Tunnel命令

復雜數據類型

類型

定義方法

構造方法

ARRAY

  • array<int>

  • array<struct<a:int, b:string>>

  • array(1, 2, 3)

  • array(struct(1, 2), struct(3, 4))

MAP

  • map<string, string>

  • map<smallint, array<string>>

  • map("k1", "v1","k2","v2")

  • map(1S, array("a", "b"), 2S, array('z','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))

JSON

JSON

JSON '123'

說明
  • MaxCompute的復雜數據類型可以被嵌套使用,相關的內建函數說明請參見ARRAYMAPSTRUCTJSON

  • MaxCompute的復雜數據類型最大Size建議不要超過1 MB,即復雜數據類型里存的數據大小不能超過1 MB,否則會造成計算過程OOM的錯誤。

與其他數據類型版本的差異

  • DML語法行為差異

    • 集合操作中的LIMIT語句行為不同。

      例如,對于SELECT * FROM t1 UNION ALL SELECT * FROM t2 limit 10;

      • 1.0數據類型版本下時為SELECT * FROM t1 UNION ALL SELECT * FROM ( SELECT * FROM t2 limit 10) t2;

      • 2.0數據類型版本下時為SELECT * FROM (SELECT * FROM t1 UNION ALL SELECT * FROM t2 ) t limit 10;

      ORDER BY、DISTRIBUTE BY、SORT BY和CLUSTER BY操作也具有上述行為特點。

    • IN表達式的類型解析不同。

      例如a in (1, 2, 3)

      • 1.0數據類型版本時,要求IN后面的括號里的所有值的類型必須一致。

      • 2.0數據類型版本時,IN后面的括號里的所有值支持隱式類型轉換一致即可。

    • INSERT語句轉換規則不同。
      • Hive兼容數據類型:源數據類型如果可以顯式轉換為表中的數據類型,系統會自動插入轉換函數并允許運行。
      • 1.0和2.0數據類型版本:源數據類型需要隱式轉換為表中的數據類型,否則報錯。
        --在Hive模式下成功,在其他模式下報錯。
        create table t (a bigint); 
        insert into table select 1.5; 
  • 函數行為差異
    • + -*/、POW函數
      • Hive兼容數據類型版本:在數據溢出時繞回(即數據超出范圍后返回初始值)。
      • 1.0和2.0數據類型版本:在數據溢出時報告異常,其它模式下返回NULL。
    • >>==<<=
      • Hive兼容數據類型版本:在比較DOUBLE類型數據時,直接比較Double值。
      • 1.0和2.0數據類型版本:在比較DOUBLE類型數據時,如果小數點后15位以前數據相同,認為數據相同。15位以后的數據不作比較。
    • 位操作運算符&|^
      • Hive兼容數據類型版本:返回參數類型。
      • 1.0和2.0數據類型版本:返回類型為BIGINT。
    • LENGTH、LENGTHB、FIND_IN_SET、INSTR、SIZE、HASH、SIGN函數
      • Hive兼容數據類型版本:返回類型為INT。
      • 1.0和2.0數據類型版本:返回類型為BIGINT。
    • FLOOR、CEIL
      • Hive兼容數據類型版本:如果參數為DECIMAL類型,在Hive兼容數據類型版本下返回類型仍為DECIMAL。
      • 1.0和2.0數據類型版本:如果參數為DECIMAL類型,在1.0和2.0數據類型版本下返回類型為BIGINT。
    • FROM_UNIXTIME
      • Hive兼容數據類型版本:返回值為STRING類型。
      • 1.0和2.0數據類型版本:返回值為DATETIME類型。
    • CONCAT_WS
      • Hive兼容數據類型版本:如果一個被連接的輸入字符串為NULL,此字符串被忽略。
      • 1.0和2.0數據類型版本:如果一個被連接的輸入字符串為NULL,則返回NULL。
    • FIND_IN_SET
      • Hive兼容數據類型版本:空字符串認為匹配字符串尾部。
        --Hive兼容模式下 
        find_in_set("","") 結果是1。
        find_in_set("", "a,") 結果是2。
      • 1.0和2.0數據類型版本:空字符串認為不匹配返回0。
    • REGEXP_(EXTRACT/REPLACE)
      • Hive兼容數據類型版本:REGEXP的模式定義符合Java regex規范。
      • 1.0和2.0數據類型版本:REGEXP的模式定義符合MaxCompute規范。
    • SUBSTR
      string substr(string <str>, bigint <start_position>[, bigint <length>])

      start_position:必填,為BIGINT類型,默認起始位置為1。

      • Hive兼容數據類型版本:當start_position為0時,與起始位置為1時相同。

      • 1.0和2.0數據類型版本:當start_position為0時,返回NULL。