MaxCompute が提供する組み込み関数がビジネス要件を満たせない場合は、ユーザー定義関数 (UDF) を作成して、多様なビジネス要件を満たすことができます。このトピックでは、DataWorks で視覚的に MaxCompute UDF を作成する方法について説明します。
背景情報
UDF は、既存の関数ライブラリを拡張して、より多くのデータ処理機能を提供するために使用されます。クエリに対するビジネス要件に基づいて、タスクのコードロジックと計算方法を指定できます。詳細については、「概要」をご参照ください。DataWorks で UDF を作成するために使用できる視覚化された方法に加えて、MaxCompute Studio または MaxCompute の CLI を使用して UDF を作成することもできます。詳細については、「MaxCompute Studio を使用して UDF を作成する」および「MaxCompute で CLI を使用して UDF を作成する」をご参照ください。
前提条件
MaxCompute UDF を作成する前に、既存のリソースをアップロードするか、リソースを作成し、視覚的に DataWorks にリソースを追加する必要があります。詳細については、「MaxCompute リソースの作成と使用」をご参照ください。
制限事項
DataWorks では、視覚的にアップロードされた UDF を DataWorks コンソールでのみ表示および管理できます。MaxCompute Studio などの他のツールを使用して MaxCompute 計算エンジンに UDF を追加する場合は、DataWorks DataStudio の [maxcompute 関数] 機能を使用して、UDF を DataWorks に手動でロードする必要があります。ロードが完了すると、DataWorks で UDF を表示および管理できます。詳細については、「MaxCompute 関数の管理」をご参照ください。
関数の登録
ワークフローを作成します。詳細については、「自動トリガーワークフローの作成」をご参照ください。
関数を作成します。
目的のワークフローを展開し、[maxcompute] を右クリックして、[関数の作成] を選択します。
[関数の作成] ダイアログボックスで、[関数名] と [パス] を入力します。
[作成] をクリックします。
表示される設定タブの [関数の登録] セクションで、次の表に示すパラメーターを設定します。
パラメーター
説明
関数タイプ
関数のタイプ。有効な値:[数学演算関数]、[集計関数]、[文字列処理関数]、[日付関数]、[ウィンドウ関数]、[その他の関数]。詳細については、「組み込み関数の使用」をご参照ください。
エンジンインスタンス Maxcompute
MaxCompute 計算エンジン。このパラメーターの値は変更できません。
関数名
関数の名前。SQL ステートメントで関数を参照するために関数名を使用できます。関数名はグローバルに一意である必要があり、関数の登録後は変更できません。
所有者
関数の所有者。デフォルトの所有者は、DataWorks コンソールにログオンするために使用されるアカウントです。このパラメーターの値を変更できます。
クラス名
UDF を実装するクラスの名前。このパラメーターは、
リソース名.クラス名
の形式で設定します。リソース名は、Java または Python パッケージの名前です。DataWorks コンソールで UDF を登録する場合、JAR パッケージや Python リソースなどの MaxCompute リソースを参照できます。このパラメーターの値の形式は、リソースタイプによって異なります。
リソースタイプが JAR の場合、[クラス名] パラメーターを
JAR パッケージ名.実際のクラス名
の形式で設定します。IntelliJ IDEA でcopy reference
ステートメントを実行することで、クラス名をクエリできます。たとえば、
com.aliyun.odps.examples.udf
が Java パッケージ名で、UDAFExample
がクラス名の場合、[クラス名] パラメーターの値はcom.aliyun.odps.examples.udf.UDAFExample
です。リソースタイプが Python の場合、[クラス名] パラメーターを
Python リソース名.実際のクラス名
の形式で設定します。たとえば、
LcLognormDist_sh
が Python リソース名で、LcLognormDist_sh
がクラス名の場合、[クラス名] パラメーターの値はLcLognormDist_sh.LcLognormDist_sh
です。説明リソース名に .jar または .py サフィックスを含める必要はありません。
リソースがコミットおよびデプロイされた後、リソースを使用できます。MaxCompute リソースの作成方法については、「MaxCompute リソースの作成と使用」をご参照ください。
リソース
関数登録に使用するリソースを選択します。
ビジュアルモード:このモードを選択した場合、DataWorks にアップロードまたは追加されたリソースのみを選択できます。
コードエディター:このモードを選択した場合、MaxCompute 計算エンジンのすべてのリソースを選択できます。
説明追加されたリソースのパスを指定する必要はありません。
UDF で複数のリソースが参照されている場合は、リソース名をコンマ (,) で区切ります。
説明
UDF の説明。
式の構文
UDF の構文。例:
test
。パラメーターの説明
サポートされている入力パラメーターと出力パラメーターの説明。
戻り値
オプション。戻り値。例:1。
例
オプション。関数の例。
トップツールバーの
アイコンをクリックして、UDF を保存します。
UDF をコミットします。
トップツールバーの
アイコンをクリックします。
[送信] ダイアログボックスで、[変更の説明] フィールドにコメントを入力します。
[確認] をクリックします。
DataStudio ページに移動します。
DataWorks コンソール にログオンします。上部のナビゲーションバーで、目的のリージョンを選択します。左側のナビゲーションペインで、 を選択します。表示されるページで、ドロップダウンリストから目的のワークスペースを選択し、[データ開発に移動] をクリックします。
MaxCompute 計算エンジンの関数と関数の変更履歴を表示する方法、およびその他の操作を実行する方法については、「MaxCompute 関数の管理」をご参照ください。
関数バージョンの表示と関数のロールバック
[スケジュールされたワークフロー] ペインの [ビジネスフロー] セクションの MaxCompute フォルダーで、MaxCompute 関数の名前を右クリックし、[以前のバージョンの表示] を選択して、関数の以前のバージョンを表示するか、関数をロールバックできます。
ノードでの UDF の使用
ノードで UDF を使用する場合、ノードのコードで UDF の名前を直接参照できます。具体的には、[スケジュールされたワークフロー] ペインで UDF を見つけ、UDF 名を右クリックし、[関数の挿入] を選択します。このようにして、UDF はノードの設定タブに表示されます。
付録 1:UDF の表示
SHOW FUNCTIONS
コマンドを実行して、データソースとして DataWorks ワークスペースに追加された MaxCompute プロジェクトに登録されているすべての UDF を表示できます。MaxCompute はさまざまなタイプの組み込み関数を提供します。詳細については、「概要」をご参照ください。
// 現在のプロジェクトの関数を表示します。
SHOW FUNCTIONS;
付録 2:UDF の詳細の表示
DESCRIBE
コマンドまたは省略形のDESC
コマンドの後に UDF 名を付けて実行すると、UDF の詳細を表示できます。// 省略形の DESC コマンドを使用して、UDF の詳細を表示します。 DESC FUNCTION <function_name>;
DataWorks では、ワークフローで必要な処理ロジックを既存の関数を使用して実装できない場合は、MaxCompute UDF を記述し、対応するリソース (JAR パッケージや Python ファイルなど) をアップロードして関連付けることで、データ処理機能を管理および拡張できます。詳細については、「MaxCompute リソースの管理」をご参照ください。
ベストプラクティス
UDF を作成した後、「特定のユーザーに特定の UDF へのアクセス権を付与する」に記載されている手順に従って、UDF に対するアクセス制御を実装できます。
参考資料
MaxCompute では、Java プログラムを JAR ファイルにパッケージ化し、JAR ファイルを MaxCompute リソースとしてアップロードし、数回クリックするだけで MaxCompute UDF を登録できます。詳細については、「Java プログラムをパッケージ化し、パッケージをアップロードし、MaxCompute UDF を作成する」をご参照ください。
Java で記述された MaxCompute UDF に関する FAQ については、「MaxCompute Java UDF に関する FAQ」をご参照ください。
Python で記述された MaxCompute UDF に関する FAQ については、「MaxCompute Python UDF に関する FAQ」をご参照ください。
FAQ
Q:DataWorks コンソールにアップロードされた特定のリソースに基づいて UDF が登録されると、DataStudio の ODPS SQL ノードで UDF を使用できます。DataAnalysis の SQL Query で UDF を使用できますか?
A:はい、DataAnalysis の SQL Query で UDF を使用できます。DataWorks コンソールに登録された UDF は MaxCompute プロジェクトに保存されます。そのため、UDF は ODPS SQL ノードだけでなく、DataAnalysis の SQL Query でも使用できます。