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

MaxCompute:UDTF の概要

最終更新日:Mar 27, 2026

ユーザー定義テーブル値関数 (UDTF) を使用すると、Java または Python でカスタム関数を記述することで、MaxCompute のビルトイン機能を拡張できます。UDTF は 1 行の入力を読み取り、複数行を返します。出力はテーブルとして扱われます。

MaxCompute には、EXPLODE などのビルトイン UDTF が含まれています。詳細については、「その他の関数」および「複合型関数」をご参照ください。

UDTF の利用シーン

ビルトイン関数でロジックを表現できない場合 (たとえば、入力行ごとに可変数の出力行を出力する必要がある場合や、変換がパーティション内の行全体にわたって蓄積された状態に依存する場合) は、UDTF を使用します。

ビルトイン関数は MaxCompute の分散エンジン向けに最適化されており、大規模な環境では UDTF よりも優れた性能を発揮します。ユースケースに対応できる場合は、常にビルトイン関数を使用してください。

サポートされている言語

言語 バージョン
Java
Python 2 2.7
Python 3 CPython 3.7.3

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

制限事項

  • インターネットアクセス: UDF はデフォルトではインターネットにアクセスできません。インターネットアクセスを有効にするには、ネットワーク接続申請フォームに記入してください。承認後、MaxCompute テクニカルサポートチームがお客様に連絡し、接続を確立します。詳細については、「ネットワーク接続プロセス」をご参照ください。

  • 同じ SELECT 内に他の列を含めない: UDTF を呼び出す SELECT 文は、他の列や式を参照できません。次の文は無効です。

    -- Invalid: mixes a UDTF with another column
    select value, user_udtf(key) as mycol ...
  • ネスト不可: UDTF は他の UDTF 内にネストできません。次の文は無効です。

    -- Invalid: user_udtf2 is nested inside user_udtf1
    select user_udtf1(user_udtf2(key)) as mycol...;
  • GROUP BY、DISTRIBUTE BY、および SORT BY と互換性なし: UDTF は、これらの句と同じ SELECT 文に含めることはできません。次の文は無効です。

    -- Invalid: UDTF used with GROUP BY
    select user_udtf(key) as mycol ... group by mycol;

注意事項

メモリ: UDF ジョブがデータスキューのある大量のデータを処理する場合、ジョブがデフォルトの JVM メモリ割り当てを超過する可能性があります。メモリを増やすには、セッションレベルで次のコマンドを実行します。

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

MaxCompute UDF に関する FAQ トピックの全リストについては、「MaxCompute UDF に関するよくある質問」をご参照ください。

名前の競合: UDF がビルトイン関数と同じ名前を共有している場合、MaxCompute は UDF を呼び出します。ビルトイン関数を明示的に呼び出すには、:: をプレフィックスとして付けます。

select ::concat('ab', 'c');

開発プロセス

手順は Java と Python でわずかに異なります。

Java

ステップ 必須 説明 ツール
1 いいえ Maven SDK 依存関係を POM ファイルに追加します。最新バージョンを取得するには、odps-sdk-udfMaven リポジトリで検索します。スニペットの例: <dependency><groupId>com.aliyun.odps</groupId><artifactId>odps-sdk-udf</artifactId><version>0.29.10-public</version></dependency> IntelliJ IDEA (Maven)
2 はい UDTF コードを記述します。 IntelliJ IDEA (Maven) または MaxCompute Studio
3 はい UDTF をご利用のオンプレミス環境のマシンで、または単体テストを通じてデバッグします。
4 はい UDTF を JAR ファイルにパッケージ化します。
5 はい JAR ファイルをリソースとしてご利用の MaxCompute プロジェクトにアップロードします。 MaxCompute クライアントMaxCompute Studio、または DataWorks
6 はい アップロードされた JAR ファイルを使用して UDTF を登録します。
7 いいえ SQL クエリで UDTF を呼び出します。

ステップ 2 については、「Java で UDF を開発する」をご参照ください。ステップ 5 については、「リソースを追加する」および「関数を作成する」をご参照ください。MaxCompute Studio を使用してパッケージ化と登録を 1 つのフローで実行するには、「Java プログラムをパッケージ化し、パッケージをアップロードして MaxCompute UDF を作成する」をご参照ください。

Write a UDF in Java

Python

ステップ 必須 説明 ツール
1 はい UDTF コードを記述します。 MaxCompute Studio
2 はい オンプレミス環境または単体テストを通じて UDTF をデバッグします。
3 はい Python ファイルまたは必要なリソース (ファイルリソース、テーブルリソース、サードパーティパッケージ) を MaxCompute プロジェクトにアップロードします。 MaxCompute クライアントMaxCompute Studio、または DataWorks
4 はい アップロードされたファイルに基づいて UDTF を登録します。
5 いいえ SQL クエリで UDTF を呼び出します。

ステップ 1 については、「Python で UDF を開発する」をご参照ください。ステップ 3 については、「リソースを追加する」および「関数を作成する」をご参照ください。MaxCompute Studio を使用してアップロードと登録を 1 つのフローで実行するには、「Python プログラムをアップロードして MaxCompute UDF を作成する」をご参照ください。

Write a UDF in Python

UDTF の呼び出し

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

プロジェクト間: プロジェクト A 内からプロジェクト B の UDTF を呼び出すには、次の構文を使用します。

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

プロジェクト間リソース共有の詳細については、「パッケージベースのプロジェクト間リソース共有」をご参照ください。

次のステップ