ご利用の Tablestore データが、解析が必要な JSON 文字列などのカスタム構造を持つ場合、ユーザー定義関数 (UDF) を使用して各行にカスタムロジックを適用できます。
仕組み
UDF は Tablestore 内ではなく、MaxCompute 内で実行されます。 MaxCompute は Tablestore から行データを読み取り、そのデータを UDF に渡し、結果を SQL クエリに返します。 開発プロセスでは、Java で UDF ロジックを記述し、それを JAR ファイルとしてパッケージ化し、MaxCompute に登録してから、SQL ステートメントから呼び出します。
前提条件
Tablestore インスタンスとテーブルが作成済みであること。
テーブルにアクセスする権限を持つ MaxCompute プロジェクトが作成済みであること。
ローカルマシンに IntelliJ IDEA がインストール済みであること。
操作手順
IntelliJ に MaxCompute-Java/MaxCompute-Studio プラグインをインストールします。 詳細については、「MaxCompute Studio のインストール」をご参照ください。
プラグインをインストールすると、UDF の開発を開始できます。
次の例は、2 つの文字列を連結する単純な UDF を示しています。 MaxCompute は、カスタムウィンドウ実行ロジックを持つものを含む、より複雑な UDF をサポートしています。 詳細については、「UDF の開発」をご参照ください。
public class ExtractBusID extends UDF { // evaluate メソッドは、UDF のロジック、パラメーター、および戻り値の型を定義します。 public String evaluate(String a, String b) { StringBuilder sb = new StringBuilder(); sb.append(a); sb.append(":"); sb.append(b); return sb.toString(); } }JAR ファイルをパッケージ化して MaxCompute にアップロードします。 詳細については、「パッケージ化、アップロード、登録」をご参照ください。
bin/odpscmd.bat を実行し、SQL クエリで UDF を呼び出します。
次の例では、
test_tableから 1 行のデータを取得し、name列を UDF に 2 回渡し、連結された結果をudf_testとして返します。cloud_metric_extract_md5を実際の登録された関数名に置き換えてください。-- 1 行を選択し、name 列を UDF に 2 回渡し、連結された文字列を返します。 select your_udf_name(name, name) as udf_test from test_table limit 1;結果は次のようになります。
odps@ your_project>select your_udf_name(name, name) as udf_test from test_table limit 1; +-------------------+ | udf_test | +-------------------+ | some_name:some_name | +-------------------+