ApplyDriverバージョン2

このセクションのコードはApplyDriverV2.javaというファイルに保存される。

コード

この新しいバージョンのアプリケーション・ドライバは、環境変数を使用して、どちらの関数(OPERATIONまたはRESULT)を呼び出すかを決定します。 また、環境変数を使用して、診断情報を出力するかどうかを決定する。 これはローカルAEのみである。

// ApplyDriverV2.java
package org.netezza.education;

import org.netezza.ae.*;

public class ApplyDriverV2 {
    public static final void main(String [] args) {
        NzaeFactory factory = NzaeFactory.Source.getFactory();
 
        if (factory.isLocal()) {
            NzaeInitialization init = new NzaeInitialization();
            Nzae ae = factory.getLocalFunctionApi(init);

            try {
                // determine which function is being invoked
                String whichFunction =
                    ae.getEnvironment().getValue("APPLY_FUNCTION");
                if (whichFunction == null) {
                    ae.userError(
                        "missing APPLY_FUNCTION " +
                        "environment variable");
                    return;
                }
                String printInfo =
                    ae.getEnvironment().getValue("APPLY_INFO");
                if (printInfo != null
                        && printInfo.equalsIgnoreCase("true")) {
                    ApplyUtil.printMetadata(ae);
                    ApplyUtil.printRuntime(ae);
                    ApplyUtil.printSharedLibraries(ae);
                    ApplyUtil.printEnvironment(ae);
                }

                if (whichFunction.equals("OPERATION")) {
                    ApplyOperation.runAe(ae);
                } else if (whichFunction.equals("RESULT")) {
                    ApplyResult.runAe(ae);
                } else {
                    ae.userError("unexpected value for " +
                        "environment variable APPLY_FUNCTION");
                }
            } finally {
                ae.close();
            }
        } else {
            throw new RuntimeException("Expecting Local AE only");
        }
    }
}

コンパイル

$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language java --template compile
--version 3 --db dev \
"ApplyDriverV2.java ApplyOperation.java ApplyResult.java ApplyUtil.java

スカラー関数としての登録applyOperationV2Sf

こ の例では、 AE が行内の列に演算を適用す る よ う 、 AE 環境変数 APPLY_FUNCTION を関数 OPERATION に設定 し ます。

$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language java --template udf
--version 3 --db dev \
     --sig "applyOperationV2Sf(varargs)" --return double \
     --define java_class=org.netezza.education.ApplyDriverV2 --level 1 \
     --environment "'APPLY_FUNCTION'='OPERATION'" \
     --environment "'APPLY_INFO'='true'" \
     --environment "'NZAE_LOG_DIR'='/nz/export/ae/log'"

テーブル関数としての登録applyOperationV2Tf

この例では、アプリケーション固有のAPPLY_FUNCTION AE環境変数も、上記のように関数OPERATIONに設定します。 これはテーブル関数の呼び出しを使用する。

$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language java --template udtf
--version 3 --db dev \
     --sig "applyOperationV2Tf(varargs)" --return "table(result double)" \
     --define java_class=org.netezza.education.ApplyDriverV2 --level 1 \
     --environment "'APPLY_FUNCTION'='OPERATION'" \
     --environment "'APPLY_INFO'='true'" \
     --environment "'NZAE_HOST_ONLY_NZAE_SPIN_FILE_NAME'='/tmp/spin_ae.on'" \
     --environment "'NZAE_LOG_DIR'='/nz/export/ae/log'"

テーブルとしての登録 関数applyResultV2

こ の例では、 AE が各行の 2 列目に演算を適用す る よ う に、 AE 環境変数 APPLY_FUNCTION を関数 RESULT に設定 し ます。

$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language java --template udtf
--version 3 --db dev \
     --sig "applyResultV2(varchar(16), double)" \
     --return "table(result double)" \
     --define java_class=org.netezza.education.ApplyDriverV2 --level 1 \
     --noparallel --environment "'APPLY_FUNCTION'='RESULT'" \
     --environment "'APPLY_INFO'='true'" \
     --environment "'NZAE_LOG_DIR'='/nz/export/ae/log'"

テーブルとして実行 機能applyResultV2

SELECT result FROM edutestdata, TABLE WITH FINAL(applyResultV2('sum', f1))
     WHERE color = 'red';
 RESULT
--------
    101

applyOperationV2TfおよびapplyResultV2として実行中

SQL関数applyOperationV2Tfは、行の列に加算演算子を適用し、その結果をSQL関数applyResultV22にストリーミングします。

SELECT re.result FROM edutestdata,
     TABLE WITH FINAL(applyOperationV2Tf('+', f1, f2, f3, f4)) op,
     TABLE WITH FINAL(applyResultV2('sum', op.result)) re
     WHERE color = 'red';
 RESULT
--------
    413

ApplyDriverV2サンプルの別バージョンを作成することができます。このサンプルは、Java AEでサードパーティやオープンソースのJavaコードを使用しています。 このApplyDriverV22の代替バージョンはJARファイルを使用し、JARファイルにデプロイされる。 ApplyDriverV22のメインメソッドを呼び出す。 それ以外のAEの機能は同じである。

オープンソースJARファイルの取得

このサンプルを実行する前に、サードパーティのbase64ファイルをダウンロードしてインストールする必要があります。 サンプルのオープン・ソースJARファイルを取得してコンパイルするには、以下の手順を実行します:
  1. Javaソースのzipファイルを'http://iharder.sourceforge.net/current/java/base64/からダウンロードする。
  2. 中身をLinuxの空のディレクトリに展開する。
    unzip -j Base64-v<version_number>.zip
  3. Base64.java:をコンパイルする。
    [~/installs/base64]$javac Base64.java
  4. JARファイルの内容をリストアップするには、以下のコマンドを入力する:
    [~/installs/base64]$jar tf Base64.jar
    META-INF/ 
    META-INF/MANIFEST.MF 
    Base64$1.class 
    Base64.class 
    Base64$InputStream.class 
    Base64$OutputStream.class
  5. JARファイルを作成する:
    [~/installs/base64]$jar cf Base64.jar *.class
  6. 新しくビルドしたJARファイルをデプロイする:
    /nz/export/ae/utilities/bin/compile_ae --language java --version 3 --db dev \ 
     --template deploy base64.jar

これで、JARファイルをJava AEで使用する準備が整った。

JarApplyDriverV2.javaのコード

以下のAEは、新しく配置されたbase64.jar:を使用している:

// JarApplyDriverV2.java
// demonstrates use of 3rd party jar file
package org.netezza.education;

import java.io.IOException;
// from http://iharder.sourceforge.net/current/java/base64/
import sourceforge.iharder.Base64;

public class JarApplyDriverV2 {
    public static final void main(String [] args) {
        try {
            double value = 100;
            String result = Base64.encodeObject(value);
            System.out.println("JarApplyDriverV2: "
                + result);
        } catch (IOException e) {
            System.err.println("JarApplyDriverV2: "
                + e.getMessage());
        }

        ApplyDriverV2.main(args);
    }
}

arApplyDriverV2.javaをコンパイルする

この例では、-linkargs パラメーターを使用してサードパーティーのJARファイルを使用してコンパイルする方法と、-exeパラメーターを使用してJARファイルにコンパイルする方法を示します。 この例は、以前にデータベースdevにデプロイされたサードパーティJARbase64.jarに依存しているため、このAEは同じデータベースを使用しなければならない。 (base64.jarのパスは-linkargsオプションのパスで定義される)

$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language java --template compilejar
--version 3 --db dev \
     --linkargs /nz/export/ae/applications/dev/admin/java/base64.jar \
     --exe apply.jar \
     "JarApplyDriverV2.java ApplyDriverV2.java ApplyOperation.java \
     ApplyResult.java ApplyUtil.java"

スカラー関数としての登録applyOperationV2SfJar

この例では、AE 環境変数 NZAE_APPEND_CLASSPATH を使用して、JAR ファイル内のクラスを使用するために登録する方法を示します。 この例では、サードパーティのJARbase64.jarとAEのjarファイルapply.jarに依存しているため、このAEは同じデータベースを使用しなければならない。 NZAE_APPEND_CLASSPATH環境変数により、java CLASSPATH環境変数を設定することができる(以前にデプロイされたbase64.jarを見つけるため)。 exe-apply.jarを使うことで、apply.jarもCLASSPATHに追加されることに注意。 (これは、コンパイルと登録のステップが同じデータベース(この場合はdev)にあると仮定している)

$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language java --template udf
--version 3 --db dev \
     --sig "applyOperationV2SfJar(varargs)" --return double \
     --define java_class=org.netezza.education.JarApplyDriverV2 \
     --exe apply.jar --level 1 --environment "'APPLY_FUNCTION'='OPERATION'" \
     --environment "'APPLY_INFO'='true'" \
     --environment "'NZAE_LOG_DIR'='/nz/export/ae/log'" \
     --environment "'NZAE_APPEND_CLASSPATH'=\
     '/nz/export/ae/applications/dev/admin/java/base64.jar'"

テーブルとして登録する関数applyOperationV2TfJar

この例では、上記のように AE 環境変数 NZAE_APPEND_CLASSPATH を使用して、JAR ファイル内のクラスを使用するために登録する方法を示します。 これはテーブル関数の呼び出しを使用する。

$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language java --template udtf
--version 3 --db dev \
     --sig "applyOperationV2TfJar(varargs)" --return "table(result double)" \
     --define java_class=org.netezza.education.JarApplyDriverV2 \
     --exe apply.jar --level 1 \
     --environment "'APPLY_FUNCTION'='OPERATION'" \
     --environment "'APPLY_INFO'='true'" \
     --environment "'NZAE_LOG_DIR'='/nz/export/ae/log'" \
     --environment "'NZAE_APPEND_CLASSPATH'=\
     '/nz/export/ae/applications/dev/admin/java/base64.jar'"

スカラー関数としての登録applyResutV2Jar

この例では、AE 環境変数 NZAE_APPEND_CLASSPATH を使用して、JAR ファイル内のクラスを使用するために登録する方法を示します。

$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language java --template udtf
--version 3 --db dev \
     --sig "applyResultV2Jar(varchar(16), double)" 
     --return "table(result double)" \
     --define java_class=org.netezza.education.JarApplyDriverV2 \
     --exe apply.jar --level 1 --noparallel \
     --environment "'APPLY_FUNCTION'='RESULT'" \
     --environment "'APPLY_INFO'='true'" \
     --environment "'NZAE_LOG_DIR'='/nz/export/ae/log'" \
     --environment "'NZAE_APPEND_CLASSPATH'=\
     '/nz/export/ae/applications/dev/admin/java/base64.jar'"

JarApplyDriverV2.javaの実行

SELECT re.result FROM edutestdata,
     TABLE WITH FINAL(applyOperationV2TfJar('+', f1, f2, f3, f4)) op,
     TABLE WITH FINAL(applyResultV2Jar('sum', op.result)) re
     WHERE color = 'red';
RESULT
-------
   413