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)