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

MaxCompute:UDF の概要

最終更新日:Mar 26, 2026

MaxCompute には、一般的なデータ処理タスク向けにビルトイン関数が用意されています。ビルトイン関数ではご要件のロジックを表現できない場合、ユーザー定義関数 (UDF) を使用して MaxCompute の機能を拡張できます。

パフォーマンス面では、ビルトイン関数が UDF よりも優れています。可能な限りビルトイン関数をご利用ください。ビルトイン関数で対応できないロジックのみ、UDF を実装してください。

UDF を使用するタイミング

変換ロジックをビルトイン関数で表現できない場合に、UDF を使用します。主な適用シーンは以下のとおりです。

  • カスタム文字列解析やビジネス固有の変換処理

  • 空間データ分析

  • プロジェクト間のデータ処理パイプライン

標準的な集約演算、文字列操作、算術演算については、デプロイ不要でスケール時に大幅に高いパフォーマンスを発揮するビルトイン関数をご利用ください。

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

UDF の種類

広義の UDF には、ユーザー定義スカラー関数 (UDF)、ユーザー定義集計関数 (UDAF)、ユーザー定義テーブル値関数 (UDTF) が含まれます。狭義の UDF は、ユーザー定義スカラー関数のみを指します。

MaxCompute では、以下の 3 種類のコア UDF をサポートしています。

種類入力から出力へのマッピング動作
UDF(ユーザー定義スカラー関数)1 対 1各入力行に対して 1 つの出力値を返す
UDTF(ユーザー定義テーブル値関数)1 対多各入力行に対して、テーブル形式で複数の出力値を返す
UDAF(ユーザー定義集計関数)多対 1複数の入力行を 1 つの出力値に集約する

また、特定のユースケース向けに専用の UDF 種別も提供しています。

種類利用シーン
コード埋め込み型 UDFJava または Python コードを SQL スクリプト内に直接埋め込むことで、開発を簡素化し、可読性を向上させる
SQL UDF再利用可能な SQL ロジックをカプセル化し、コードの重複を削減する
地理空間 UDFHive の地理空間関数を MaxCompute で活用し、空間データを分析する

制限事項と考慮事項

ハード制限

インターネットアクセス — UDF はデフォルトでインターネットにアクセスできません。インターネットアクセスを有効にするには、ネットワーク接続申請を行ってください。承認後、MaxCompute のテクニカルサポートチームより連絡があり、接続設定が行われます。詳細については、「ネットワーク接続申請フォームネットワーク接続の手順」をご参照ください。

VPC アクセス — UDF はデフォルトで仮想プライベートクラウド (VPC) 内のリソースにアクセスできません。VPC アクセスを有効にするには、MaxCompute と VPC の間でネットワーク接続を確立してください。詳細については、「UDF を使用した VPC 内リソースへのアクセス」をご参照ください。

サポート対象外のテーブル種別 — UDF、UDAF、UDTF は、以下のテーブル種別からデータを読み取ることができません。

  • スキーマ進化が実行済みのテーブル

  • 複雑なデータの型を含むテーブル

  • JSON データの型を含むテーブル

  • トランザクションテーブル

考慮事項

メモリ使用量 — UDF がデータスキューを伴う大規模データセットを処理する場合、計算ジョブがデフォルトの JVM メモリ割り当てを超える可能性があります。メモリ制限を増加させるには、セッションレベルで以下のコマンドを実行します。

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

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

UDF の開発

コード埋め込み型 UDFSQL UDF、および 地理空間 UDF の開発プロセスは、標準の UDF、UDTF、UDAF のワークフローとは異なります。これらの種別については、リンク先のドキュメントをご参照ください。

Java

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

Java UDF development workflow
ステップ必須操作プラットフォーム備考
1任意odps-sdk-udf の依存関係を POM ファイルに追加IntelliJ IDEA(Maven)odps-sdk-udfMaven リポジトリ で検索して、最新バージョンを取得できます。例: 0.29.10-public
2必須UDF コードの記述IntelliJ IDEA(Maven)、MaxCompute StudioUDF 開発仕様および一般的な手順(Java)
3必須ローカルマシンでのデバッグまたは単体テストの実行出力結果が期待通りであることを確認してください
4必須コードを JAR ファイルにパッケージ化
5必須JAR をリソースとして MaxCompute プロジェクトにアップロードDataWorks コンソールMaxCompute クライアントMaxCompute Studioアップロード方法は 3 種類あります:DataWorks コンソール(ビジュアル)、MaxCompute クライアント(SQL)、MaxCompute Studio(コード)。プラットフォーム固有のガイドについては、リンク先をご参照ください。
6必須アップロード済み JAR から UDF を作成
7任意クエリ内で UDF を呼び出し

Python

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

Python UDF development workflow
ステップ必須操作プラットフォーム備考
1必須UDF コードの記述MaxCompute StudioUDF 開発仕様および一般的な手順(Python 3)」または「Python 2
2必須ローカルマシンでのデバッグまたは単体テストの実行出力結果が期待通りであることを確認してください
3必須Python ファイルおよび必要なリソース(ファイルリソース、テーブルリソース、サードパーティパッケージ)を MaxCompute プロジェクトにアップロードDataWorks コンソールMaxCompute クライアントMaxCompute Studioアップロード方法は 3 種類あります:DataWorks コンソール(ビジュアル)、MaxCompute クライアント(SQL)、MaxCompute Studio(コード)。プラットフォーム固有のガイドについては、リンク先をご参照ください。
4必須アップロード済みファイルから UDF を作成
5任意クエリ内で UDF を呼び出し

SDK リファレンス

以下の SDK は Java UDF 開発をサポートしています。パッケージおよびクラスの詳細については、「MaxCompute SDK」をご参照ください。

SDK説明
odps-sdk-core基本的な MaxCompute リソースを管理
odps-sdk-commonsJava 向け共通ユーティリティ
odps-sdk-udfUDF API
odps-sdk-mapredMapReduce API
odps-sdk-graphGraph API

UDF の呼び出し

UDF を登録した後は、ビルトイン関数と同様の方法で呼び出せます。

同一プロジェクト内 — 任意の ビルトイン関数と同様に、UDF を直接呼び出します。

プロジェクト間 — プロジェクト B の UDF をプロジェクト A で使用する場合は、プロジェクト名をプレフィックスとして指定して参照します。

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

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

次のステップ

UDF 開発の実践例を確認するには、以下のエンドツーエンドのサンプルをご参照ください。