Utilice un nodo de asignación para pasar los resultados de una consulta o la salida de un nodo anterior a los nodos posteriores. Este nodo es compatible con ODPS SQL, Python 2 y Shell. Asigna automáticamente el último resultado de la consulta o la última salida al parámetro de salida integrado (outputs). Los nodos posteriores pueden hacer referencia a este parámetro para obtener la salida.
Notas de uso
Requisitos de versión: disponible únicamente en DataWorks Standard Edition y versiones posteriores.
Permisos: su cuenta de RAM debe estar agregada al workspace de destino y tener asignado el rol de developer o workspace administrator. Para más información, consulte Add members to a workspace.
Conceptos clave: paso y referencia de parámetros
La función principal de un nodo de asignación es el paso de parámetros, que transfiere los datos generados por un nodo anterior hacia los nodos posteriores.
Nodo de asignación anterior: genera los datos. Asigna automáticamente la última salida o el último resultado de la consulta a un parámetro de salida del nodo llamado
outputs.Nodo de negocio posterior: recibe y utiliza los datos. Agregue un parámetro de entrada del nodo (por ejemplo,
param) en la configuración del nodo y asígnelo al parámetrooutputsdel nodo de asignación anterior. De esta manera podrá hacer referencia a los datos en su código.
Formato de salida según el lenguaje
El formato de salida del nodo de asignación varía según el lenguaje:
Lenguaje | Origen de la salida | Formato de salida |
ODPS SQL | Salida de la última instrucción | La salida se pasa como una matriz bidimensional a los nodos posteriores. |
Python 2 | Salida de la última instrucción | La salida se convierte en una cadena y se divide por coma ( Por ejemplo, si la última línea del nodo de asignación genera |
Shell | Salida de la última instrucción |
Procedimiento
En el siguiente ejemplo se pasa la salida de un nodo de asignación ODPS SQL a un nodo Shell. En la práctica, cualquier nodo puede funcionar como nodo posterior.
-
Configure el nodo de asignación anterior
Cree y edite un nodo de asignación dentro de un flujo de trabajo. En la página del editor de código, seleccione ODPS SQL, Python o Shell según lo requiera. Después, escriba el código que genere el resultado que desea pasar a los nodos posteriores.
-
Configure el nodo Shell posterior
Cree un nodo Shell. En la página del editor del nodo Shell, haga referencia al resultado del nodo anterior:
En la página del editor del nodo Shell, haga clic en Scheduling configuration a la derecha y seleccione la pestaña Node context.
En la sección Input parameters, haga clic en Add.
-
En el cuadro de diálogo que aparece, seleccione el parámetro
outputsdel nodo de asignación anterior y especifique un nombre de parámetro para el parámetro de entrada del nodo actual (por ejemplo,param).Una vez completada la configuración, el nodo posterior establece automáticamente una dependencia con el nodo de asignación anterior.
Cuando termine de configurar el parámetro, haga referencia en el código del nodo Shell posterior al valor que proviene del nodo anterior mediante el formato
${param}.
-
Ejecute y compruebe
Haga doble clic en el nombre del flujo de trabajo. En la página del editor del flujo de trabajo, haga clic en el ícono Run de la barra de herramientas para ejecutarlo y comprobar si el resultado referenciado es correcto. También puede enviar el nodo al entorno de producción, ir a Operation Center y ejecutar una prueba de humo para validar la ejecución.
Límites
Alcance: los parámetros del nodo de asignación solo se pueden pasar a los nodos posteriores inmediatos. No se admite el paso entre niveles no consecutivos.
Límite de tamaño: el valor de salida no puede superar los 2 MB. Si la salida excede este límite, el nodo de asignación falla.
-
Restricciones de sintaxis:
No se admiten comentarios en el código del nodo de asignación. Agregar comentarios puede provocar resultados de ejecución anómalos.
La cláusula WITH no es compatible con el modo ODPS SQL.
Ejemplos por lenguaje
El formato de salida (outputs) y el método de referencia para los nodos posteriores varían según el lenguaje.
Ejemplo 1: pasar el resultado de una consulta ODPS SQL
Los resultados de las consultas SQL se pasan a los nodos posteriores como una matriz bidimensional.
-
Configuración del nodo anterior (nodo de asignación - SQL)
Suponga que el código SQL es el siguiente y que la consulta devuelve dos filas y dos columnas:
SELECT 'beijing', '1001' UNION ALL SELECT 'hangzhou', '1002'; -
Configuración y salida del nodo posterior (nodo Shell)
En el nodo Shell, agregue un parámetro de entrada llamado
regiony haga referencia al parámetrooutputsdel nodo SQL anterior.Escriba el siguiente código para leer los datos:
echo "Entire result set: ${region}" echo "First row: ${region[0]}" echo "First row, second field: ${region[0][1]}"DataWorks analiza sintácticamente el parámetro de forma directa y aplica una sustitución estática. La salida es la siguiente:
Entire result set: beijing,1001 hangzhou,1002 First row: beijing,1001 First row, second field: 1001
Ejemplo 2: pasar los resultados de salida de Python 2
La salida de la instrucción print de Python 2 se divide por comas (,) y se pasa a los nodos posteriores como una matriz unidimensional.
-
Configuración del nodo anterior (nodo de asignación - Python 2)
El código de Python 2 es el siguiente:
print 'Electronics, Clothing, Books'; -
Configuración y salida del nodo posterior (nodo Shell)
En el nodo Shell, agregue un parámetro de entrada llamado
typesy haga referencia al parámetrooutputsdel nodo de asignación anterior.Escriba el siguiente código para leer los datos:
# Directly output the entire one-dimensional array echo "Entire result set: ${types}" # Output elements by index echo "Second element: ${types[1]}"DataWorks analiza sintácticamente el parámetro de forma directa y aplica una sustitución estática. La salida es la siguiente:
Entire result set: Electronics,Clothing,Books Second element: Clothing
La lógica de procesamiento de los nodos Shell es similar a la de Python 2, por lo que no se repite aquí.
Preguntas frecuentes
-
P: ¿Por qué aparece el error "find no select sql in sql assignment!" en el modo ODPS SQL?
R: Al script de ODPS SQL le falta una instrucción SELECT. Agregue una instrucción SELECT. La cláusula WITH no es compatible con el modo ODPS SQL, por lo que usarla también desencadena este error.
-
P: ¿Por qué la salida no coincide con lo esperado en el modo Shell o Python?
R: Compruebe si los elementos de salida contienen comas. De ser así, escape las comas en el nodo de asignación y restáurelas en el nodo posterior.
-
P: ¿Un nodo posterior puede recibir salidas de varios nodos de asignación anteriores?
R: Sí. Asigne distintos parámetros de entrada para recibir las salidas de diferentes nodos de asignación.
-
P: ¿El nodo de asignación admite lenguajes distintos de ODPS SQL, Python 2 y Shell?
R: El nodo de asignación solo es compatible con ODPS SQL, Python 2 y Shell. Sin embargo, algunos tipos de nodos, como EMR Hive, Hologres SQL, EMR Spark SQL, AnalyticDB for PostgreSQL, ClickHouse SQL y MySQL, incluyen capacidades integradas de asignación de parámetros que logran el mismo resultado.
Documentación relacionada
Si el nodo posterior es de tipo for-each o do-while, consulte Configure a for-each node y Configure a do-while node para conocer las instrucciones sobre cómo usar estos nodos junto con los nodos de asignación.