閱讀595 返回首頁    go 人物


內建函數-下__SQL_大數據計算服務-阿裏雲

MaxCompute SQL中可以使用窗口函數進行靈活的分析處理工作,窗口函數隻能出現在select子句中,窗口函數中不要嵌套使用窗口函數和聚合函數,窗口函數不可以和同級別的聚合函數一起使用。目前在一個MaxCompute SQL語句中,可以使用至多5個窗口函數。

窗口函數的語法

  1. window_func() over (partition by col1, [col2…]
  2. [order by col1 [asc|desc][, col2[asc|desc]…]] windowing_clause)
  • partition by部分用來指定開窗的列。分區列的值相同的行被視為在同一個窗口內。現階段,同一窗口內最多包含1億行數據,否則運行時報錯。
  • order by用來指定數據在一個窗口內如何排序
  • windowing_clause部分可以用rows指定開窗方式,有兩種方式: rows between x preceding|following and y preceding|following表示窗口範圍是從前或後x行到前或後y行。 rows x preceding|following窗口範圍是從前或後第x行到當前行。** x,y必須為大於等於0的整數常量,限定範圍0 ~ 10000,值為0時表示當前行。必須指定order by才可以用rows方式指定窗口範圍。

備注:

  • 並非所有的窗口函數都可以用rows指定開窗方式,支持這種用法的窗口函數有avg、count、max、min、stddev和sum。

COUNT

函數聲明:

  1. bigint count([distinct] expr) over(partition by col1[, col2…]
  2. [order by col1 [asc|desc][, col2[asc|desc]…]] [windowing_clause])

用途:計算計數值。

參數說明:

  • expr:任意類型,當值為NULL時,該行不參與計算。當指定distinct關鍵字時表示取唯一值的計數值。
  • partition by col1[, col2…]:指定開窗口的列。
  • order by col1 [asc|desc], col2[asc|desc]:不指定order by時,返回當前窗口內expr的計數值,指定order by時返回結果以指定的順序排序,並且值為當前窗口內從開始行到當前行的累計計數值。

返回值:Bigint類型。

備注:

  • 當指定distinct關鍵字時不能寫order by。

示例:假設存在表test_src,表中存在bigint類型的列user_id,

  1. select user_id,
  2. count(user_id) over (partition by user_id) as count
  3. from test_src;
  4. +---------+------------+
  5. | user_id | count |
  6. +---------+------------+
  7. | 1 | 3 |
  8. | 1 | 3 |
  9. | 1 | 3 |
  10. | 2 | 1 |
  11. | 3 | 1 |
  12. +---------+------------+
  13. -- 不指定order by時,返回當前窗口內user_id的計數值
  14. select user_id,
  15. count(user_id) over (partition by user_id order by user_id) as count
  16. from test_src;
  17. +---------+------------+
  18. | user_id | count |
  19. +---------+------------+
  20. | 1 | 1 | -- 窗口起始
  21. | 1 | 2 | -- 到當前行共計兩條記錄,返回2
  22. | 1 | 3 |
  23. | 2 | 1 |
  24. | 3 | 1 |
  25. +---------+------------+
  26. -- 指定order by時,返回當前窗口內從開始行到當前行的累計計數值。

AVG

函數聲明:

  1. avg([distinct] expr) over(partition by col1[, col2…]
  2. [order by col1 [asc|desc] [, col2[asc|desc]…]] [windowing_clause])

用途:計算平均值。

參數說明:

  • distinct:當指定distinct關鍵字時表示取唯一值的平均值。
  • expr:Double類型,若輸入為string,bigint會隱式轉換到double類型後參與運算,其它類型拋異常。當值為NULL時,該行不參與計算。Boolean類型不允許參與計算。
  • partition by col1[, col2]…:指定開窗口的列。
  • order by col1 [asc|desc], col2[asc|desc]:不指定order by時返回當前窗口內所有值的平均值,指定order by時返回結果以指定的方式排序,並且返回窗口內從開始行到當前行的累計平均值。

返回值:Double類型。

備注:

  • 指明distinct關鍵字時不能寫order by。

MAX

函數聲明:

  1. max([distinct] expr) over(partition by col1[, col2…]
  2. [order by col1 [asc|desc][, col2[asc|desc]…]] [windowing_clause])

用途:計算最大值。

參數說明:

  • expr:除Boolean以外的任意類型,當值為NULL時,該行不參與計算。當指定distinct關鍵字時表示取唯一值的最大值(指定該參數與否對結果沒有影響)。
  • partition by col1[, col2…]:指定開窗口的列。
  • order by col1 [asc|desc], col2[asc|desc]:不指定order by時,返回當前窗口內的最大值。指定order by時,返回結果以指定的方式排序,並且值為當前窗口內從開始行到當前行的最大值。

返回值:同expr類型。

備注:

  • 當指定distinct關鍵字時不能寫order by。

MIN

函數聲明:

  1. min([distinct] expr) over(partition by col1[, col2…]
  2. [order by col1 [asc|desc][, col2[asc|desc]…]] [windowing_clause])

用途:計算最小值。

參數說明:

  • expr:除boolean以外的任意類型,當值為NULL時,該行不參與計算。當指定distinct關鍵字時表示取唯一值的最小值(指定該參數與否對結果沒有影響)。
  • partition by col1[, col2..]:指定開窗口的列。
  • order by col1 [asc|desc], col2[asc|desc]:不指定order by時,返回當前窗口內的最小值。指定order by時,返回結果以指定的方式排序,並且值為當前窗口內從開始行到當前行的最小值。

返回值:同expr類型。

備注:

  • 當指定distinct關鍵字時不能寫order by。

MEDIAN

函數聲明:

  1. double median(double number1,number2...) over(partition by col1[, col2…])
  2. decimal median(decimal number1,number2...) over(partition by col1[,col2…])

用途:計算中位數。

參數說明:

  • number1,number1…:Double類型或decimal類型的1到255個數字。若輸入為string類型或bigint類型會隱式轉換到double類型後參與運算,其他類型拋異常。當輸入值為null時忽略。如果傳入的參數是一個Double類型的數,會默認轉成一個double 的array。

  • partition by col1[, col2…]:指定開窗口的列。

返回值:Double類型。

STDDEV

函數聲明:

  1. double stddev([distinct] expr) over(partition by col1[, col2…]
  2. [order by col1 [asc|desc][, col2[asc|desc]…]] [windowing_clause])
  3. decimal stddev([distinct] expr) over(partition by col1[,col2…] [order by col1 [asc|desc][, col2[asc|desc]…]] [windowing_clause])

用途:總體標準差。

參數說明:

  • expr:Double類型或decimal類型。若輸入為string類型或bigint類型會隱式轉換到double類型後參與運算,其他類型拋異常。當輸入值為NULL時忽略該行。當指定distinct關鍵字時表示計算唯一值的總體標準差。

  • partition by col1[, col2..]:指定開窗口的列。

  • order by col1 [asc|desc], col2[asc|desc]:不指定order by時,返回當前窗口內的總體標準差。指定order by時,返回結果以指定的方式排序,並且值為當前窗口內從開始行到當前行的總體標準差。

返回值:輸入為Decimal類型時返回Decimal類型,否則返回Double類型。

示例:

  1. select window, seq, stddev_pop('11') over (partition by window order by seq) from dual;

備注:

  • 當指定distinct關鍵字時不能寫order by。
  • stddev還有一個別名函數stddev_pop,用法跟stddev一樣。

STDDEV_SAMP

函數聲明:

  1. double stddev_samp([distinct] expr) over(partition by col1[, col2…]
  2. [order by col1 [asc|desc][, col2[asc|desc]…]] [windowing_clause])

用途:樣本標準差。

參數說明:

  • expr:Double類型。若輸入為string類型或bigint類型會隱式轉換到double類型後參與運算,其他類型拋異常。當輸入值為NULL時忽略該行。當指定distinct關鍵字時表示計算唯一值的樣本標準差。
  • partition by col1[, col2..]:指定開窗口的列。
  • order by col1 [asc|desc], col2[asc|desc]:不指定order by時,返回當前窗口內的樣本標準差。指定order by時,返回結果以指定的方式排序,並且值為當前窗口內從開始行到當前行的樣本標準差。

返回值:Double類型。

備注:

  • 當指定distinct關鍵字時不能寫order by。

SUM

函數聲明:

  1. sum([distinct] expr) over(partition by col1[, col2…]
  2. [order by col1 [asc|desc][, col2[asc|desc]…]] [windowing_clause])

用途:計算匯總值。

參數說明:

  • expr:Double類型或Bigint類型,當輸入為string時隱式轉換為double參與運算,其它類型報異常。當值為NULL時,該行不參與計算。指定distinct關鍵字時表示計算唯一值的匯總值。
  • partition by col1[, col2..]:指定開窗口的列。
  • order by col1 [asc|desc], col2[asc|desc]:不指定order by時,返回當前窗口內expr的匯總值。指定order by時,返回結果以指定的方式排序,並且返回當前窗口從首行至當前行的累計匯總值。返回值:輸入參數是bigint返回bigint, 輸入參數為double或string時,返回double類型。

返回值:輸入參數是bigint返回bigint,輸入參數為double或string時,返回double類型。

備注:

  • 當指定distinct時不能用order by。

DENSE_RANK

命令格式:

  1. bigint dense_rank() over(partition by col1[, col2…]
  2. order by col1 [asc|desc][, col2[asc|desc]…])

用途:計算連續排名。col2相同的行數據獲得的排名相同。

參數說明:

  • partition by col1[, col2..]:指定開窗口的列。
  • order by col1 [asc|desc], col2[asc|desc]:指定排名依據的值。

返回值:Bigint類型。

RANK

命令格式:

  1. bigint rank() over(partition by col1[, col2…]
  2. order by col1 [asc|desc][, col2[asc|desc]…])

用途:計算排名。col2相同的行數據獲得排名順序下降。

參數說明:

  • partition by col2[, col2..]:指定開窗口的列。
  • order by col1 [asc|desc], col2[asc|desc]:指定排名依據的值。

返回值:Bigint類型。

LAG

函數聲明:

  1. lag(expr,bigint offset, default) over(partition by col1[, col2…]
  2. [order by col1 [asc|desc][, col2[asc|desc]…]])

用途:按偏移量取當前行之前第幾行的值,如當前行號為rn,則取行號為rn-offset的值。

參數說明:

  • expr:任意類型。
  • offset:Bigint類型常量,輸入為string,double到bigint的隱式轉換,offset > 0。
  • default:當offset指定的範圍越界時的缺省值,常量,默認值為NULL。
  • partition by col1[, col2..]:指定開窗口的列。
  • order by col1 [asc|desc], col2[asc|desc]:指定返回結果的排序方式。

返回值:同expr類型。

LEAD

函數聲明:

  1. lead(expr, bigint offset, default) over(partition by col1[, col2…]
  2. [order by col1 [asc|desc][, col2[asc|desc]…]])

用途:按偏移量取當前行之後第幾行的值,如當前行號為rn則取行號為rn+offset的值。

參數說明:

  • expr:任意類型。

  • offset:可選,Bigint類型常量,輸入為string,decimal,double到bigint的隱式轉換,offset > 0。

  • default:可選,當offset指定的範圍越界時的缺省值,常量。

  • partition by col1[, col2..]:指定開窗口的列。

  • order by col1 [asc|desc], col2[asc|desc]:指定返回結果的排序方式。

返回值:同expr類型。

示例:

  1. select c_double_a,c_string_b,c_int_a,lead(c_int_a,1) over(partition by c_double_a order by c_string_b) from dual;
  2. select c_string_a,c_time_b,c_double_a,lead(c_double_a,1) over(partition by c_string_a order by c_time_b) from dual;
  3. select c_string_in_fact_num,c_string_a,c_int_a,lead(c_int_a) over(partition by c_string_in_fact_num order by c_string_a) from dual;

PERCENT_RANK

函數聲明:

  1. percent_rank() over(partition by col1[, col2…]
  2. order by col1 [asc|desc][, col2[asc|desc]…])

用途:計算一組數據中某行的相對排名。

參數說明:

  • partition by col1[, col2..]:指定開窗口的列。
  • order by col1 [asc|desc], col2[asc|desc]:指定排名依據的值。

返回值:Double類型,值域為[0, 1],相對排名的計算方式為為:(rank-1)/(number of rows -1)。

備注:

  • 目前限製單個窗口內的行數不超過10,000,000條。

ROW_NUMBER

函數聲明:

  1. row_number() over(partition by col1[, col2…]
  2. order by col1 [asc|desc][, col2[asc|desc]…])

用途:計算行號,從1開始。

參數說明:

  • partition by col1[, col2..]:指定開窗口的列。
  • order by col1 [asc|desc], col2[asc|desc]:指定結果返回時的排序的值。

返回值:Bigint類型。

CLUSTER_SAMPLE

函數聲明:

  1. boolean cluster_sample(bigint x[, bigint y])
  2. over(partition by col1[, col2..])

用途:分組抽樣。

參數說明:

  • x:Bigint類型常量,x>=1。若指定參數y,x表示將一個窗口分為x份;否則,x表示在一個窗口中抽取x行記錄(即有x行返回值為true)。x為NULL時,返回值為NULL。
  • y:Bigint類型常量,y>=1,y<=x。表示從一個窗口分的x份中抽取y份記錄(即y份記錄返回值為true)。y為NULL時,返回值為NULL。
  • partition by col1[, col2]:指定開窗口的列。

返回值:Boolean類型。

示例,如表test_tbl中有key,value兩列,key為分組字段,值有groupa,groupb兩組,value為值,如下

  1. +------------+--------------------+
  2. | key | value |
  3. +------------+--------------------+
  4. | groupa | -1.34764165478145 |
  5. | groupa | 0.740212609046718 |
  6. | groupa | 0.167537127858695 |
  7. | groupa | 0.630314566185241 |
  8. | groupa | 0.0112401388646925 |
  9. | groupa | 0.199165745875297 |
  10. | groupa | -0.320543343353587 |
  11. | groupa | -0.273930924365012 |
  12. | groupa | 0.386177958942063 |
  13. | groupa | -1.09209976687047 |
  14. | groupb | -1.10847690938643 |
  15. | groupb | -0.725703978381499 |
  16. | groupb | 1.05064697475759 |
  17. | groupb | 0.135751224393789 |
  18. | groupb | 2.13313102040396 |
  19. | groupb | -1.11828960785008 |
  20. | groupb | -0.849235511508911 |
  21. | groupb | 1.27913806620453 |
  22. | groupb | -0.330817716670401 |
  23. | groupb | -0.300156896191195 |
  24. | groupb | 2.4704244205196 |
  25. | groupb | -1.28051882084434 |
  26. +------------+--------------------+

想要從每組中抽取約10%的值,可以用以下MaxCompute SQL完成:

  1. select key, value
  2. from (
  3. select key, value, cluster_sample(10, 1) over(partition by key) as flag
  4. from tbl
  5. ) sub
  6. where flag = true;
  7. +--------+--------------------+
  8. | key | value |
  9. +--------+--------------------+
  10. | groupa | -1.34764165478145 |
  11. | groupb | -0.725703978381499 |
  12. | groupb | 2.4704244205196 |
  13. +-----+-----------------------+

聚合函數

聚合函數,其輸入與輸出是多對一的關係,即將多條輸入記錄聚合成一條輸出值。可以與SQL中的group by語句聯用。

COUNT

函數聲明:

  1. bigint count([distinct|all] value)

用途:計算記錄數。

參數說明:

  • distinct|all:指明在計數時是否去除重複記錄,默認是all,即計算全部記錄,如果指定distinct,則可以隻計算唯一值數量。
  • value:可以為任意類型,當value值為NULL時,該行不參與計算,value可以為,當count()時,返回所有行數。

返回值:Bigint類型。

示例:

  1. -- 如表tbla有列col1類型為bigint
  2. +------+
  3. | COL1 |
  4. +------+
  5. | 1 |
  6. +------+
  7. | 2 |
  8. +------+
  9. | NULL |
  10. +------+
  11. select count(*) from tbla; -- 值為3,
  12. select count(col1) from tbla; -- 值為2

聚合函數可以和group by一同使用,例如:假設存在表test_src,存在如下兩列:key string類型,value double類型,

  1. -- test_src的數據為
  2. +-----+-------+
  3. | key | value |
  4. +-----+-------+
  5. | a | 2.0 |
  6. +-----+-------+
  7. | a | 4.0 |
  8. +-----+-------+
  9. | b | 1.0 |
  10. +-----+-------+
  11. | b | 3.0 |
  12. +-----+-------+
  13. -- 此時執行如下語句,結果為:
  14. select key, count(value) as count from test_src group by key;
  15. +-----+-------+
  16. | key | count |
  17. +-----+-------+
  18. | a | 2 |
  19. +-----+-------+
  20. | b | 2 |
  21. +-----+-------+
  22. -- 聚合函數將對相同key值得value值做聚合計算。下麵介紹的其他聚合函數使用方法均與此例相同,不一一舉例。

AVG

函數聲明:

  1. double avg(double value)

用途:計算平均值。

參數說明:

  • value:Double類型,若輸入為string或bigint會隱式轉換到double類型後參與運算,其它類型拋異常。當value值為NULL時,該行不參與計算。Boolean類型不允許參與計算。

返回值:Double類型。

示例:

  1. -- 如表tbla有一列value,類型為bigint
  2. +-------+
  3. | value |
  4. +-------+
  5. | 1 |
  6. | 2 |
  7. | NULL |
  8. +-------+
  9. -- 則對該列計算avg結果為(1+2)/2=1.5
  10. select avg(value) as avg from tbla;
  11. +------+
  12. | avg |
  13. +------+
  14. | 1.5 |
  15. +------+

MAX

函數聲明:

  1. max(value)

用途:計算最大值。

參數說明:

  • value:可以為任意類型,當列中的值為NULL時,該行不參與計算。Boolean類型不允許參與運算。

返回值:與value類型相同。

示例:

  1. -- 如表tbla有一列col1,類型為bigint
  2. +------+
  3. | col1 |
  4. +------+
  5. | 1 |
  6. +------+
  7. | 2 |
  8. +------+
  9. | NULL |
  10. +------+
  11. select max(value) from tbla; -- 返回值為2

MIN

命令格式:

  1. MIN(value)

用途:計算最小值。

參數說明:

  • value:可以為任意類型,當列中的值為NULL時,該行不參與計算。Boolean類型不允許參與計算。

示例:

  1. -- 如表tbla有一列value,類型為bigint
  2. +------+
  3. | value|
  4. +------+
  5. | 1 |
  6. +------+
  7. | 2 |
  8. +------+
  9. | NULL |
  10. +------+
  11. select min(value) from tbla; -- 返回值為1

MEDIAN

函數聲明:

  1. double median(double number)

用途:計算中位數。

參數說明:

  • number:Double類型。若輸入為string類型或bigint類型會隱式轉換到double類型後參與運算,其他類型拋異常。當輸入值為NULL時忽略。

返回值:Double類型。

STDDEV

函數聲明:

  1. double stddev(double number)

用途:計算總體標準差。

參數說明:

  • number:Double類型。若輸入為string類型或bigint類型會隱式轉換到double類型後參與運算,其他類型拋異常。當輸入值為NULL時忽略。

返回值:Double類型。

STDDEV_SAMP

命令格式:

  1. double stddev_samp(double number)

用途:計算樣本標準差。

參數說明:

  • number:Double類型。若輸入為string類型或bigint類型會隱式轉換到double類型後參與運算,其他類型拋異常。當輸入值為NULL時忽略。

返回值:Double類型。

SUM

函數聲明:

  1. sum(value)

用途:計算匯總值。

參數說明:

  • value:Double或bigint類型,若輸入為string會隱式轉換到double類型後參與運算,當列中的值為NULL時,該行不參與計算。Boolean類型不允許參與計算。

返回值:輸入為bigint時返回bigint,輸入為double或string時返回double類型。

示例:

  1. -- 如表tbla有一列value,類型為bigint
  2. +------+
  3. | value|
  4. +------+
  5. | 1 |
  6. +------+
  7. | 2 |
  8. +------+
  9. | NULL |
  10. +------+
  11. select sum(value) from tbla; -- 返回值為3

WM_CONCAT

函數聲明:

  1. string wm_concat(string separator, string str)

用途:用指定的spearator做分隔符,鏈接str中的值。

參數說明:

  • separator:String類型常量,分隔符。其他類型或非常量將引發異常。
  • str:String類型,若輸入為bigint,double或者datetime類型會隱式轉換為string後參與運算,其它類型報異常。

返回值:String類型。

備注:

  • 對語句”select wm_concat(‘,’, name) from test_src;”,若test_src為空集合,這MaxCompute SQL條語句返回NULL值。聚合函數,其輸入與輸出是多對一的關係,即將多條輸入記錄聚合成一條輸出值。可以與SQL中的group by語句聯用。

其他函數

CAST

函數聲明:

  1. cast(expr as <type>)

用途:將表達式的結果轉換成目標類型,如cast(‘1’ as bigint)將字符串”1”轉為整數類型的1,如果轉換不成功或不支持的類型轉換會引發異常。

備注:

  • cast(double as bigint),將double值轉換成bigint。
  • cast(string as bigint) 在將字符串轉為bigint時,如果字符串中是以整型表達的數字,會直接轉為bigint類型。如果字符串中是以浮點數或指數形式表達的數字,則會先轉為double類型,再轉為bigint類型。
  • cast(string as datetime) 或 cast(datetime as string)時,會采用默認的日期格式yyyy-mm-dd hh:mi:ss。

COALESCE

函數聲明:

  1. coalesce(expr1, expr2, ...)

用途:返回列表中第一個非NULL的值,如果列表中所有的值都是NULL則返回NULL。

參數說明:

  • expri是要測試的值。所有這些值類型必須相同或為NULL,否則會引發異常。

返回值:返回值類型和參數類型相同。

備注:

  • 參數至少要有一個,否則引發異常。

DECODE

函數聲明:

  1. decode(expression, search, result[, search, result]...[, default])

用途:實現if-then-else分支選擇的功能。

參數說明:

  • expression:要比較的表達式。
  • search:和expression進行比較的搜索項。
  • result:search和expression的值匹配時的返回值。
  • default:可選項,如果所有的搜索項都不匹配,則返回此default值,如果未指定,則會返回NULL。

返回值:返回匹配的search;如果沒有匹配,返回default;如果沒有指定default,返回NULL。

備注:

  • 至少要指定三個參數。
  • 所有的result類型必須一致,或為NULL。不一致的數據類型會引發異常。所有的search和expression類型必須一致,否則報異常。
  • 如果decode中的search選項有重複時且匹配時,會返回第一個值。

示例:

  1. select
  2. decode(customer_id,
  3. 1, 'Taobao',
  4. 2, 'Alipay',
  5. 3, 'Aliyun',
  6. NULL, 'N/A',
  7. 'Others') as result
  8. from sale_detail;

上麵的decode函數實現了下麵if-then-else語句中的功能:

  1. if customer_id = 1 then
  2. result := 'Taobao';
  3. elsif customer_id = 2 then
  4. result := 'Alipay';
  5. elsif customer_id = 3 then
  6. result := 'Aliyun';
  7. ...
  8. else
  9. result := 'Others';
  10. end if;

但需要用戶注意的是,通常情況下MaxCompute SQL在計算NULL = NULL時返回NULL,但在decode函數中,NULL與NULL的值是相等的。在上述事例中,當customer_id的值為NULL時,decode函數返回”N/A”。

GREATEST

函數聲明:

  1. greatest(var1, var2, …)

用途:返回輸入參數中最大的一個。

參數說明:

  • var1,var2可以為bigint,double,datetime或者string。若所有值都為NULL則返回NULL。

返回值:

  • 輸入參數中的最大值,當不存在隱式轉換時返回同輸入參數類型。
  • NULL為最小值。
  • 當輸入參數類型不同時,double,bigint,string之間的比較轉為double;string,datetime的比較轉為datetime。不允許其它的隱式轉換。

ORDINAL

函數聲明:

  1. ordinal(bigint nth, var1, var2, …)

用途:將輸入變量按從小到大排序後,返回nth指定的位置的值。

參數說明:

  • nth:Bigint類型,指定要返回的位置,為NULL時返回NULL。
  • var1,var2:類型可以為bigint,double,datetime或者string。

返回值:

  • 排在第nth位的值,當不存在隱式轉換時返回同輸入參數類型。
  • 有類型轉換時,double,bigint,string之間的轉換返回double。string,datetime之間的轉換返回datetime。不允許其它的隱式轉換。
  • NULL為最小。

示例:

  1. ordinal(3, 1, 3, 2, 5, 2, 4, 6) = 2

LEAST

函數聲明:

  1. least(var1, var2, …)

用途:返回輸入參數中最小的一個。

參數說明:

  • var1,var2可以為bigint,double,datetime或者string。若所有值都為NULL則返回NULL。

返回值:

  • 輸入參數中的最小值,當不存在隱式轉換時返回同輸入參數類型。
  • NULL為最小。
  • 有類型轉換時,double,bigint,string之間的轉換返回double。string,datetime之間的轉換返回datetime。不允許其它的隱式類型轉換。

UUID

命令格式:

  1. string uuid()

用途:返回一個隨機ID,形式示例:”29347a88-1e57-41ae-bb68-a9edbdd94212”。

SAMPLE

函數聲明:

  1. boolean sample(x, y, column_name)

用途:對所有讀入的column_name的值,sample根據x,y的設置做采樣,並過濾掉不滿足采樣條件的行。

參數說明:

  • x,y:Bigint類型,表示哈希為x份,取第y份。y可省略,省略時取第一份,如果省略參數中的y,則必須同時省略column_name。x,y為整型常量,大於0,其它類型或小於等於0時拋異常,若y>x也拋異常。x,y任一輸入為NULL時返回NULL。
  • column_name是采樣的目標列。column_name可以省略,省略時根據x,y的值隨機采樣。任意類型,列的值可以為NULL。不做隱式類型轉換。如果column_name為常量NULL會報異常。

返回值:Boolean類型。

備注:

  • 為了避免NULL值帶來的數據傾斜,因此對於column_name中為NULL的值,會在x份中進行均勻哈希。如果不加column_name,則數據量比較少時輸出不一定均勻,在這種情況下建議加上column_name,以獲得比較好的輸出結果。

示例:假定存在表tbla,表內有列名為cola的列,

  1. select * from tbla where sample (4, 1 , cola) = true;
  2. -- 表示數值會根據cola hash為4份,取第1份
  3. select * from tbla where sample (4, 2) = true;
  4. -- 表示數值會對每行數據做隨機哈希分配為4份,取第2份

CASE WHEN表達式

MaxCompute提供兩種case when語法格式,如下所述:

  1. case value
  2. when (_condition1) then result1
  3. when (_condition2) then result2
  4. ...
  5. else resultn
  6. end
  7. case
  8. when (_condition1) then result1
  9. when (_condition2) then result2
  10. when (_condition3) then result3
  11. ...
  12. else resultn
  13. end

case when表達式可以根據表達式value的計算結果靈活返回不同的值, 如以下語句根據shop_name的不同情況得出所屬區域

  1. select
  2. case
  3. when shop_name is null then 'default_region'
  4. when shop_name like 'hang%' then 'zj_region'
  5. end as region
  6. from sale_detail;

說明:

  • 如果result類型隻有bigint,double,統一轉double再返回;
  • 如果result類型中有string類型,統一轉string再返回,如果不能轉則報錯(如boolean型);
  • 除此之外不允許其它類型之間的轉換;

IF

函數聲明:

  1. if(testCondition, valueTrue, valueFalseOrNull)

用途:判斷testCondition是否為真,如果為真,返回valueTrue,如果不滿足則返回另一個值(valueFalse或者Null)。

參數說明:

  • testCondition:要判斷的表達式, boolean類型;
  • valueTrue: 表達式testCondition為True的時候,返回的值。
  • valueFalseOrNull:不滿足表達式testCondition時2,返回的值,可以設為Null.返回值:返回值類型和參數valueTrue或者valueFalseOrNul的類型一致。示例:
  1. select if(1=2,100,200) from dual;
  2. 返回值:
  3. +------------+
  4. | _c0 |
  5. +------------+
  6. | 200 |
  7. +------------+

最後更新:2016-11-23 17:16:09

  上一篇:go 內建函數-上__SQL_大數據計算服務-阿裏雲
  下一篇:go Java UDF__UDF_SQL_大數據計算服務-阿裏雲