ApplyDriver Versión 4

El código de esta sección se guarda en un archivo llamado ApplyDriverV4.java.

Conceptos

ApplyDriverV4 sustituye a ApplyDriverV3 e incluye lógica para obtener conexiones de datos remotas y locales. Esto utiliza los métodos de nivel inferior (menos fáciles de usar) en lugar de la clase NzaeApiGenerator, más fácil de usar pero menos funcional, para soportar los modos local y remoto.

Esta técnica es más útil con EA remotos no lanzados con el sistema de EA. También ilustra cómo funciona NzaeApiGenerator.

Cuando el sistema de ejecución AE lanza un AE remoto, la configuración del punto de conexión suele proceder del entorno AE indirectamente a través de métodos como getRemoteName. Sin embargo, los ajustes del punto de conexión AE pueden ser literales o proceder de cualquier fuente.

Código

// ApplyDriverV4.java
// demonstrates Remote AE
package org.netezza.education;

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import org.netezza.ae.*;

public class ApplyDriverV4 {
    private static final Executor exec =
        Executors.newCachedThreadPool();

    public static final void main(String [] args) {
        NzaeFactory factory = NzaeFactory.Source.getFactory();
 
        if (factory.isLocal()) {
            DataConnection.useApi(factory.getLocalApi());
        } else {
            NzaeConnectionPoint conpt =
                factory.newConnectionPoint();
            conpt.setName(conpt.getRemoteName());
            conpt.setSessionId(conpt.getRemoteSessionId());
            conpt.setTransactionId(
                conpt.getRemoteTransactionId());
            conpt.setDataSliceId(conpt.getRemoteDataSliceId());
            System.out.println("listening on: "
                + " name=" + conpt.getName()
                + ", data slice=" + conpt.getDataSliceId()
                + ", transaction=" + conpt.getTransactionId()
                + ", session=" + conpt.getSessionId());
            NzaeRemoteProtocol remprot =
                factory.createListener(conpt);
            for (;;)
            {
                final NzaeApi api = remprot.acceptConnection();
                Runnable task = new Runnable() {
                    public void run() {
                        DataConnection.useApi(api);
                    }
                }  
                exec.execute(task);
            }
        }
    }
}

Una compilación

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

Registro

Estos registros son para las mismas funciones SQL utilizadas anteriormente, nombradas con diferentes números de versión.

$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language java --template udf
--version 3 --db dev \
     --sig "applyOperationRemV4Sf(varargs)" --return double \
     --define java_class="" --remote --rname apply --level 1 \
     --environment "'APPLY_FUNCTION'='OPERATION'" \
     --environment "'APPLY_INFO'='true'" \
     --environment "'NZAE_LOG_DIR'='/nz/export/ae/log'"

$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language java --template udtf
--version 3 --db dev \
     --sig "applyOperationRemV4Tf(varargs)" --return "table(result double)" \
     --define java_class="" --remote --rname apply --level 1 \
     --environment "'APPLY_FUNCTION'='OPERATION'" \
     --environment "'APPLY_INFO'='true'" \
     --environment "'NZAE_LOG_DIR'='/nz/export/ae/log'"

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

$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language java --template udtf
--version 3 --db dev \
     --sig "cloneRowsRemV4(varargs)" --return "table(any)" \
     --define java_class="" --remote --rname apply --dynamic 2 --level 1 \
     --environment "'APPLY_FUNCTION'='CLONE'" \
     --environment "'APPLY_INFO'='true'" \
     --environment "'NZAE_LOG_DIR'='/nz/export/ae/log'"

Inscripción para el lanzamiento

Este registro es para una función SQL para lanzar este AE remoto.

$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language java --template udtf
--version 3 --db dev \
     --sig "apply_launch_v1(bigint)" --return "TABLE(aeresult varchar(255))" \
     --define java_class=org.netezza.education.ApplyDriverV4 --launch \
     --rname apply --level 1 --environment "'APPLY_FUNCTION'='CLONE'" \
     --environment "'APPLY_INFO'='true'" \
     --environment "'NZAE_LOG_DIR'='/nz/export/ae/log'"

Lanzamiento en el host

SELECT aeresult FROM TABLE WITH FINAL(apply_launch_v1(0));
     AERESULT
---------------------------------------------------
tran: 17928 session: 16522 DATA slc: 0 hardware: 0
machine: hostlnx1 process: 27184 thread: 27185

Ping en el host

SELECT aeresult FROM TABLE WITH FINAL(inza..nzaejobcontrol('ping', 0, 'apply',
     false, NULL, NULL));
                                          AERESULT
--------------------------------------------------------
hostlnx1 27184 (apply dataslc:-1 sess:-1 trans:-1)
thread: 27185 AE Build: 10 nzrep version: 9

Lanzamiento en las SPU

SELECT aeresult FROM _v_dual_dslice, TABLE WITH FINAL(apply_launch_v1(dsid));
     AERESULT
------------------------------------------------------
 tran: 17916 session: 16522 DATA slc: 4 hardware: 1002
 machine: spu0101 process: 21751 thread: 21755

Ping en las SPU

SELECT aeresult FROM _v_dual_dslice, TABLE WITH FINAL(inza..nzaejobcontrol(
     'ping', dsid, 'apply', false, NULL, NULL)); 
     AERESULT
----------------------------------------------------
 spu0101 21751 (apply dataslc:-1 sess:-1 trans:-1)
 thread: 21755 AE Build: 10 nzrep version: 9

En ejecución

SELECT re.result FROM edutestdata, TABLE WITH FINAL(cloneRowsRemV4(f1, f2,
     f3, f4, 'CLONE_COUNT=3, CLONE_COLUMN_NAMES="col1,col2,col3,col4"')),
     TABLE WITH FINAL(applyOperationRemV4Tf('+', col1, col2, col3, col4)) op,
     TABLE WITH FINAL(applyResultRemV4('sum', op.result)) re
     WHERE color = 'red';
 RESULT
--------
   1239

Parada en el host

SELECT aeresult FROM TABLE WITH FINAL(inza..nzaejobcontrol('stop', 0, 'apply',
     false, NULL, NULL));
                          AERESULT
--------------------------------------------------------------
hostlnx1 27184 (apply dataslc:-1 sess:-1 trans:-1) AE stopped

 Stop ApplyDriverV4.java on the S-Blades

SELECT aeresult FROM _v_dual_dslice, TABLE WITH FINAL(inza..nzaejobcontrol('stop',
     dsid, 'apply', false, NULL, NULL));
  AERESULT
--------------------------------------------------------------
 spu0101 21751 (apply dataslc:-1 sess:-1 trans:-1) AE stopped

SELECT aeresult FROM _v_dual_dslice, TABLE WITH
     final(inza..nzaejobcontrol('cleanup', dsid, 'apply', false, NULL, NULL));
 AERESULT
----------
(0 rows)