すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:UDAF の概要

最終更新日:Mar 26, 2026

ユーザー定義集計関数 (UDAF) は、複数の入力レコードを単一の出力値にマップします。集約ロジックがビルトイン関数でカバーできない場合に UDAF を使用します。MaxCompute では、Java または Python で記述された UDAF がサポートされています。

UDAF の使用タイミング

ビルトイン関数は分散処理向けに最適化されており、UDAF よりもパフォーマンスが優れています。ユースケースがビルトイン関数でカバーされる場合は、常にビルトイン関数を使用してください。

ビルトイン関数で表現できない集約ロジック(例:カスタム統計モデル、ドメイン固有のスコアリング、複数フィールドを用いた重み付き集約など)が必要な場合は、UDAF を記述してください。

UDAF の種類

種類言語ランタイム
Java UDAFJavaJVM
Python 2 UDAFPythonPython 2.7
Python 3 UDAFPythonCPython 3.7.3

実装の詳細については、「Java UDAF」、「Python 2 UDAF」、および「Python 3 UDAF」をご参照ください。

開発プロセス

Java UDAF

次の図は、Java UDAF の開発ワークフローを示しています。

Write a UDF in Java
ステップ必須説明プラットフォーム参考資料
1いいえodps-sdk-udf SDK の依存関係を POM ファイルに追加します。例:<dependency><groupId>com.aliyun.odps</groupId><artifactId>odps-sdk-udf</artifactId><version>0.29.10-public</version></dependency>。最新バージョンは Maven リポジトリ で検索してください。IntelliJ IDEA (Maven)
2はいUDAF を記述します。IntelliJ IDEA (Maven) および MaxCompute StudioJava での UDF の開発
3はいローカルマシンまたは単体テストで UDAF をデバッグします。
4はいコードを JAR ファイルにパッケージ化します。
5はいJAR ファイルをリソースとして MaxCompute プロジェクトにアップロードします。MaxCompute クライアント (odpscmd)、MaxCompute Studio、DataWorksMaxCompute クライアント: リソースの追加UDF の作成; MaxCompute Studio: Java プログラムをパッケージ化し、パッケージをアップロードして MaxCompute UDF を作成する; DataWorks: MaxCompute リソースの作成と使用MaxCompute 関数の作成と使用
6はいアップロードした JAR ファイルに基づいて UDF を作成します。
7いいえクエリ内で UDAF を呼び出します。

Python UDAF

次の図は、Python UDAF の開発ワークフローを示しています。

Write a UDF in Python
ステップ必須説明プラットフォーム参考資料
1はいUDAF を記述します。MaxCompute StudioPython UDF の開発
2はいローカルマシンまたは単体テストで UDAF をデバッグします。
3はいPython ファイルおよび必要なリソース(ファイルリソース、テーブルリソース、サードパーティ製パッケージ)を MaxCompute プロジェクトにアップロードします。MaxCompute クライアント (odpscmd)、MaxCompute Studio、DataWorksMaxCompute クライアント: リソースの追加UDF の作成; MaxCompute Studio: Python プログラムをアップロードして MaxCompute UDF を作成する; DataWorks: リソースを使用して関数を登録する
4はいアップロードした Python ファイルまたは必要なリソースに基づいて UDF を作成します。
5いいえクエリ内で UDAF を呼び出します。

制限事項

UDAF はインターネットにアクセスできません。インターネットアクセスを有効にするには、ネットワーク接続申請を提出してください。承認後、MaxCompute のテクニカルサポートチームが接続の設定をサポートします。詳細については、「ネットワーク接続プロセス」をご参照ください。

注意事項

  • パフォーマンス:ビルトイン関数は UDAF よりもパフォーマンスが優れています。ユースケースがビルトイン関数でカバーされる場合は、常にビルトイン関数を使用してください。

  • メモリ:大規模なデータ量やデータスキューにより、UDAF を使用する SQL ステートメントがデフォルトのメモリ割り当てを超える場合、次のコマンドをセッションレベルで実行して上限を引き上げてください。

    set odps.sql.udf.joiner.jvm.memory=xxxx;

    詳細については、「MaxCompute UDF のよくある質問」をご参照ください。

  • 名前の衝突:UDAF がビルトイン関数と同じ名前を持つ場合、MaxCompute は UDAF を呼び出します。ビルトイン関数を呼び出すには、:: をプレフィックスとして付けてください。例:select ::concat('ab', 'c');

UDAF の呼び出し

同一プロジェクト内: UDAF を、ビルトイン関数 を呼び出すのと同じ方法で呼び出します。

プロジェクト間:プロジェクト名をプレフィックスとして使用します。次の例では、プロジェクト A 内からプロジェクト B の udf_in_other_project を呼び出しています。

select B:udf_in_other_project(arg0, arg1) as res from table_t;

クロスプロジェクトリソース共有の設定については、「パッケージに基づくクロスプロジェクトリソースアクセス」をご参照ください。