ApplyDriver Versione 2

Il codice di questa sezione viene salvato in un file chiamato ApplyDriverV2.java

Codice

Questa nuova versione del driver applicativo utilizza le variabili d'ambiente per determinare quale funzione chiamare (OPERAZIONE o RISULTATO). Utilizza anche una variabile d'ambiente per determinare se emettere informazioni diagnostiche. Si tratta di un'AE solo locale.

// 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");
        }
    }
}

Compilazione

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

Registrazione come funzione scalare applyOperationV2Sf

Questo esempio imposta la variabile d'ambiente APPLY_FUNCTION AE specifica dell'applicazione sulla funzione OPERATION, in modo che l'AE applichi un'operazione alle colonne di una riga.

$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'"

Registrazione come funzione tabella applyOperationV2Tf

Questo esempio imposta anche la variabile d'ambiente APPLY_FUNCTION AE specifica dell'applicazione sulla funzione OPERATION, come sopra. Utilizza un'invocazione di funzione di tabella.

$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'"

Registrazione come tabella Funzione applyResultV2

Questo esempio imposta la variabile d'ambiente APPLY_FUNCTION AE specifica dell'applicazione sulla funzione RESULT, in modo che l'AE applichi un'operazione alla seconda colonna di ogni riga.

$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'"

Esecuzione come tabella Funzione applyResultV2

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

Esecuzione come applyOperationV2Tf e applyResultV2

La funzione SQL applyOperationV2Tf applica l'operatore di addizione alle colonne di una riga e poi trasmette il risultato alla funzione SQL applyResultV2, che applica l'operazione di somma alla seconda colonna di ogni riga.

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

È possibile creare una versione alternativa dell'esempio ApplyDriverV2, che utilizza codice Java di terze parti e open source con un AE Java. Questa versione alternativa di ApplyDriverV2 utilizza un file JAR e viene distribuita in un file JAR. Richiama il metodo principale di ApplyDriverV2. Per il resto, la funzionalità dell'AE è la stessa.

Acquisizione del file JAR open source

Prima di poter eseguire questo esempio, è necessario scaricare e installare i file base64 di terze parti. Per recuperare e compilare il file JAR open source di esempio, eseguire i seguenti passaggi:
  1. Scaricate il file zip del sorgente Java da http://iharder.sourceforge.net/current/java/base64/
  2. Estrarre il contenuto in una directory Linux vuota.
    unzip -j Base64-v<version_number>.zip
  3. Compilare Base64.java:
    [~/installs/base64]$javac Base64.java
  4. Per elencare il contenuto del file JAR, digitate il seguente comando:
    [~/installs/base64]$jar tf Base64.jar
    META-INF/ 
    META-INF/MANIFEST.MF 
    Base64$1.class 
    Base64.class 
    Base64$InputStream.class 
    Base64$OutputStream.class
  5. Creare il file JAR:
    [~/installs/base64]$jar cf Base64.jar *.class
  6. Distribuire il file JAR appena creato:
    /nz/export/ae/utilities/bin/compile_ae --language java --version 3 --db dev \ 
     --template deploy base64.jar

Il file JAR è ora pronto per essere utilizzato con un AE Java.

Codice per JarApplyDriverV2.java

Il seguente AE utilizza la nuova distribuzione 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);
    }
}

Compilare arApplyDriverV2.java

Questo esempio mostra come compilare utilizzando un file JAR di terze parti con il parametro --linkargs e come compilare in un file JAR utilizzando il parametro -exe. Poiché l'esempio si basa sul JAR base64.jar di terze parti, che è stato precedentemente distribuito sul database dev, questo AE deve utilizzare lo stesso database. (Il percorso di base64.jar è definito dal percorso dell'opzione -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"

Registrazione come funzione scalare applyOperationV2SfJar

Questo esempio mostra come registrarsi per utilizzare una classe all'interno di un file JAR utilizzando la variabile d'ambiente AE NZAE_APPEND_CLASSPATH. Poiché l'esempio si basa sul JAR base64.jar di terze parti e sul file jar apply.jar dell'AE, entrambi distribuiti in precedenza sul database dev, questo AE deve utilizzare lo stesso database. La variabile d'ambiente NZAE_APPEND_CLASSPATH consente di impostare la variabile d'ambiente java CLASSPATH (per individuare il file base64.jar distribuito in precedenza). Si noti l'uso di -exe apply.jar, che assicura che apply.jar sia aggiunto anche al CLASSPATH. (Questo presuppone che le fasi di compilazione e registrazione siano entrambe nello stesso database, in questo caso 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'"

Registrazione come tabella Funzione applyOperationV2TfJar

Questo esempio mostra come registrarsi per utilizzare una classe all'interno di un file JAR utilizzando la variabile d'ambiente AE NZAE_APPEND_CLASSPATH, come sopra. Utilizza un'invocazione di funzione di tabella.

$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'"

Registrazione come funzione scalare applyResutV2Jar

Questo esempio mostra come registrarsi per utilizzare una classe all'interno di un file JAR utilizzando la variabile d'ambiente AE NZAE_APPEND_CLASSPATH.

$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'"

Esecuzione di 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