DataWorks DataStudio でカスタム Java ユーザー定義関数 (UDF) を登録し、E-MapReduce (EMR) クラスターの SQL 機能を拡張します。登録後、EMR SQL ステートメントで関数名を指定して関数を呼び出します。
前提条件
開始する前に、以下を確認してください。
Alibaba Cloud EMR クラスターのセキュリティグループに次のインバウンドルールが追加されていること。
[Field] 値 Action Allow Protocol type Custom TCP Port range 8898/8898 Authorization object 100.104.0.0/16 このセキュリティグループルールにより、DataWorks はご利用の EMR クラスターに接続できます。セキュリティグループルールの変更権限がない場合は、クラスター管理者にお問い合わせください。
お使いのワークスペースに関連付けられた EMR コンピュートエンジンインスタンスです。[EMR] フォルダは、[ワークスペース管理] ページでこの関連付けを完了した後にのみ DataStudio に表示されます。詳細については、「ワークスペースの作成と管理」をご参照ください。
必要な JAR リソースが DataWorks にアップロード済みであること。詳細については、「EMR リソースの作成および使用」をご参照ください。
関数の作成
ステップ 1: DataStudio を開く
DataWorks コンソールにログインします。DataWorks コンソールの上部ナビゲーションバーで、リージョンを選択します。左側ナビゲーションウィンドウで、[データ開発およびガバナンス] > [データ開発] を選択します。ドロップダウンリストからワークスペースを選択し、[データ開発へ移動] をクリックします。
ステップ 2: ワークフローを作成する
関数ノードを整理するために、自動トリガーされるワークフローを作成します。詳細については、「自動トリガーされるワークフローの作成」をご参照ください。
ステップ 3: JAR パッケージを準備する
Java で UDF ロジックを記述し、JAR ファイルとしてパッケージ化し、JAR リソースとして DataWorks にアップロードします。
以下は、文字列を小文字に変換する最小限の Java UDF の例です。
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class ToLowerUDF extends UDF {
public Text evaluate(Text input) {
if (input == null) return null;
return new Text(input.toString().toLowerCase());
}
}Maven を使用してクラスを JAR ファイルとしてパッケージ化します。
mvn clean package -DskipTests次に、結果の JAR ファイルを JAR リソースとして DataWorks にアップロードします。詳細については、「EMR リソースの作成および使用」をご参照ください。
ステップ 4: 関数ノードを作成する
「ビジネスフロー」セクションで、ワークフローをクリックして展開します。[EMR] を右クリックし、「ソリューションの作成」を選択します。
[関数の作成] ダイアログボックスで、[名前]、[エンジンインスタンス]、および[パス] を設定し、[作成] をクリックします。
「構成」タブの[関数情報]セクションで、次のパラメーターを設定します。
パラメーター 説明 関数タイプ 関数のカテゴリです。有効な値:数学演算関数、集計関数、文字列処理関数、日付関数、ウィンドウ関数、その他の関数。UDF (ユーザー定義関数) が計算する内容に基づいて選択します。例えば、テキスト変換ロジックの場合は 文字列処理関数 を選択します。 エンジンインスタンス ワークスペースに関連付けられている EMR クラスターです。デフォルトでは、エンジンインスタンスを変更することはできません。 エンジンタイプ コンピュートエンジンのタイプです。デフォルトでは、エンジンタイプを変更することはできません。 EMR データベース 関数が登録されている EMR クラスター内のデータベースです。ドロップダウンリストから 1 つ選択します。データベースを作成するには、[新しいライブラリ] をクリックし、必須フィールドを入力してから [OK] をクリックします。 関数名 SQL ステートメントで関数を呼び出すために使用される名前です。グローバルに一意である必要があり、作成後に変更することはできません。例: to_lower。所有者 自動的に設定されます。 クラス名 必須。関数を実装するクラスの名前です。 リソース 必須。UDF クラスを含む JAR リソースです。現在のワークスペースからリソースを選択するか、[リソースの作成] をクリックして新しいリソースをアップロードします。 説明 関数の説明です。例: 文字列を小文字に変換します。式の構文 関数の呼び出し構文です。例: to_lower(col_name)。パラメーターの説明 入力パラメーターと出力パラメーターの説明です。例: input: STRING col_name, output: STRING。戻り値 任意。戻り値です。例: 1。例 (任意) 関数の呼び出し方法を示す SQL ステートメントのサンプルです。例: SELECT to_lower(name) FROM my_table LIMIT 10;
ステップ 5: 関数を保存する
上部ツールバーの
アイコンをクリックして、構成を保存します。
ステップ 6: 関数をコミットする
上部ツールバーの
アイコンをクリックします。EMR 関数をコミットする際は、スケジューリング用のリソースグループを選択する必要があります。専用スケジューリングリソースグループを使用することを推奨します。専用リソースグループが利用できない場合は、購入して構成できます。詳細については、「専用スケジューリングリソースグループの作成および使用」をご参照ください。
[コミットノード] ダイアログボックスで、[変更内容] フィールドにコメントを入力します。
[OK] をクリックします。
ステップ 7: UDF をコミットする
上部ツールバーの
アイコンをクリックします。[ノードのコミット] ダイアログボックスで、[変更の説明] フィールドにコメントを入力します。
[OK] をクリックします。