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ファイルの取得
- Javaソースのzipファイルを'http://iharder.sourceforge.net/current/java/base64/からダウンロードする。
- 中身をLinuxの空のディレクトリに展開する。
unzip -j Base64-v<version_number>.zip - Base64.java:をコンパイルする。
[~/installs/base64]$javac Base64.java - JARファイルの内容をリストアップするには、以下のコマンドを入力する:
[~/installs/base64]$jar tf Base64.jar META-INF/ META-INF/MANIFEST.MF Base64$1.class Base64.class Base64$InputStream.class Base64$OutputStream.class - JARファイルを作成する:
[~/installs/base64]$jar cf Base64.jar *.class - 新しくビルドした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