UDF 全稱為 User Defined Function,即使用者自訂函數。MaxCompute 提供很多內建函數來滿足您的計算需求,同時您還可以通過建立自訂函數來滿足不同的計算需求。UDF 在使用上與普通的 內建函數 類似,Java 和 MaxCompute 的資料類型的對應關係,請參見 參數與傳回值類型

如果您使用 Maven,可以從 Maven 庫 中搜尋 odps-sdk-udf,從而擷取不同版本的 Java SDK,相關配置資訊如下所示:
<dependency>
    <groupId>com.aliyun.odps</groupId>
    <artifactId>odps-sdk-udf</artifactId>
   <version>0.20.7-public</version>
</dependency>
在 MaxCompute 中,您可以擴充的 UDF 有兩種:
UDF 分類 描述
User Defined Scalar Function(通常也稱之為 UDF) 使用者自訂純量值函式(User Defined Scalar Function)。其輸入與輸出是一對一的關係,即讀入一行資料,寫出一條輸出值 。
UDTF(User Defined Table Valued Function) 自訂表格值函數,是用來解決一次函數調用輸出多行資料情境的,也是唯一能返回多個欄位的自訂函數。而 UDF 只能一次計算輸出一條傳回值。
UDAF(User Defined Aggregation Function) 自訂彙總函式,其輸入與輸出是多對一的關係, 即將多條輸入記錄彙總成一條輸出值。可以與 SQL 中的 Group By 語句聯用。具體文法請參見 彙總函式
说明
  • UDF 廣義的說法代表了自訂純量涵式,自訂彙總函式及自訂表格函數三種類型的自訂函數的集合。狹義來說,僅代表使用者自訂純量涵式。文檔會經常使用這一名詞,請讀者根據文檔上下文判斷具體含義 。
  • SQL 陳述式中有使用自訂的函數,提示記憶體不夠。請配置 set odps.sql.udf.joiner.jvm.memory=xxxx;。原因是資料量太大並且有傾斜,任務超出預設設定的記憶體。

MaxCompute的UDF支援跨項目分享,即在project_a中可以使用project_b的UDF。具體的授權可以參考安全指南的授權文檔中的“跨項目空間Table、Resource、Function分享樣本”章節,使用時寫法如select other_project:udf_in_other_project(arg0, arg1) as res from table_t;

UDF 樣本

UDF 的相關樣本請參見 UDF 樣本