Una dependencia del mismo ciclo significa que el nodo actual espera a que las instancias de sus nodos ascendentes en el ciclo actual se ejecuten correctamente antes de comenzar su propia ejecución. Esto aplica a escenarios donde el nodo actual consume datos producidos por un nodo ascendente en el ciclo actual (el mismo día). DataWorks ofrece varias formas de configurar dependencias del mismo ciclo y admite una función de vista previa de dependencias, lo que permite revisar y ajustar a tiempo las dependencias incorrectas para garantizar que la programación de tareas funcione como se espera.
Principios de configuración
Las dependencias de programación se establecen mediante la relación de coincidencia entre las salidas de nodo y las entradas de nodo: cuando el nombre de salida de un nodo ascendente se especifica como entrada de un nodo descendente, se forma una dependencia. Después de la configuración, el nodo descendente comienza a ejecutarse solo después de que el nodo ascendente se ejecuta correctamente. Antes de configurar, se recomienda confirmar el objetivo y el tipo de dependencia con base en el linaje de tablas de las operaciones de lectura y escritura del nodo. Para obtener más información, consulte Determine dependencies based on table lineage.
Salida de nodo
Una salida de nodo es el nombre de salida del nodo actual. Funciona como un identificador (medio) para que otros nodos establezcan dependencias con este nodo, y no representa los datos reales producidos por el nodo. Otros nodos localizan este nodo a través de su nombre de salida y, de este modo, lo establecen como una dependencia ascendente.
DataWorks genera automáticamente dos nombres de salida para cada nodo:
ID aleatorio: Es único a nivel global y no se puede modificar ni eliminar.
projectName.nodeName: Una salida que incluye el nombre del nodo y se puede modificar. Este nombre de salida no se actualiza automáticamente cuando cambia el nombre del nodo.
Además, DataWorks permite agregar salidas manualmente o usar Parse Inputs and Outputs from Code. Para obtener información sobre la compatibilidad con el análisis de código para diferentes tipos de nodos, consulte Supported node types for automatic code parsing.
Entrada de nodo
Una entrada de nodo se refiere a los nodos ascendentes de los que depende el nodo actual, los cuales se pueden especificar mediante el nombre de salida del nodo ascendente (recomendado), el nombre del nodo o el ID del nodo.
El ID del nodo se genera solo después de que el nodo ascendente se despliega en el entorno de producción.
Directrices de configuración
Para mejorar la eficiencia del desarrollo, se recomienda utilizar la función automatic code parsing para configurar rápidamente las dependencias de nodos durante el desarrollo. Al usar el análisis automático de código, siga estas directrices:
Creación de nodos: Utilice el mismo nombre para el nodo y su tabla de salida.
Desarrollo de código: Evite escribir datos de varios nodos en la misma tabla.
Configuración de dependencias: Configure la tabla de salida del nodo como la salida del nodo.
Paso 1: Acceder al punto de configuración
Abra la página de edición de un nodo de Data Development. En el panel de navegación derecho, haga clic en Schedule Settings. En la sección Scheduling Dependency, configure las dependencias del nodo.
Parent Nodes: Defina de qué tareas ascendentes depende la tarea actual.
Output Name of Current Node: Defina las salidas mediante las cuales otras tareas pueden establecer dependencias con este nodo.
Paso 2: Agregar nodos de dependencia
De forma predeterminada, DataWorks utiliza el linaje de tablas de su código para configurar las dependencias y comprueba automáticamente si estas coinciden con el linaje de datos al enviarlas. Puede elegir si desea habilitar la función de análisis automático antes de enviar. Para obtener más información, consulte Configure automatic parsing before submission.
Si el nodo actual necesita depender de datos producidos por un nodo ascendente el día anterior, o si una tarea horaria o de nivel de minutos depende de su propia instancia del ciclo anterior, puede usar cross-cycle dependencies para una configuración rápida, o bien utilizar intervalos específicos o conjuntos específicos para una configuración más precisa y flexible.
Si la frecuencia de programación del nodo actual difiere de la del nodo ascendente (por ejemplo, una tarea diaria depende de una tarea horaria, o depende de tareas horarias con distintas frecuencias), consulte Scheduling configuration principles and examples for complex dependency scenarios.
Puede configurar las dependencias de las siguientes tres maneras. Independientemente del método, el principio subyacente sigue siendo el mismo.
1. Establecer dependencias de nodo mediante el análisis del linaje de tablas del código
El análisis de código establece automáticamente los nombres de salida y las dependencias ascendentes del nodo al analizar el linaje de tablas en el código del nodo. Después del análisis, las tablas en las que el nodo escribe se agregan automáticamente como salidas del nodo con el formato projectname.tablename, y las tablas que el nodo consulta se agregan automáticamente como entradas del nodo.
Por ejemplo, cuando hace SELECT de una tabla, esta se analiza automáticamente como una dependencia ascendente del nodo actual; cuando hace INSERT en una tabla, esta se analiza automáticamente como una salida del nodo actual. Para conocer las palabras clave compatibles con el análisis automático para cada tipo de nodo, consulte Keywords supported by automatic code parsing for each node type .
-
Configurar dependencias
El análisis de código admite dos métodos: hacer clic manualmente en Parse Inputs and Outputs from Code y Automatic Parsing Before Committing. Ambos métodos funcionan bajo el mismo principio. El método de análisis automático antes de enviar analiza automáticamente las entradas y salidas cuando usted envía el código y le solicita configurar las dependencias.
Por ejemplo, en el espacio de trabajo yunwan_lingyi, existe un nodo de MaxCompute llamado mc2 que depende de la tabla de salida
dws_user_info_all_didel nodo de MaxCompute mc1. El código del nodo mc2 es el siguiente:INSERT OVERWRITE TABLE ads_user_info_1d PARTITION (dt='${workflow.var}') SELECT uid , MAX(region) , MAX(device) , COUNT(0) AS pv , MAX(gender) , MAX(age_range) , MAX(zodiac) FROM dws_user_info_all_di WHERE dt = '${workflow.var}' GROUP BY uid;Después de hacer clic en Parse Inputs and Outputs from Code, el sistema analiza la entrada del nodo actual como la tabla
dws_user_info_all_diy asocia automáticamente el nombre de la tabla de salida del nodo ascendente y el nombre del nodo ascendente:Nombre de salida del nodo ascendente
Nombre de tabla de salida del nodo ascendente
Nombre del nodo ascendente
ID del nodo
Espacio de trabajo
Propietario
Ciclo de programación
Método
Estado de ejecución reciente
Acción
yunwan_lingyi.dws_user_info_all_di
yunwan_lingyi.dws_user_info_all_di
mc1
-
Test Workspace
lingyi01_testcloud_com
Day
Code parsing
No data
Delete
El sistema también analiza la salida de este nodo como la tabla
ads_user_info_1d. El resultado del análisis es el siguiente:Nombre de salida
Nombre de tabla de salida
Nombre del nodo descendente
Propietario
Método
Línea base afectada por el nodo descendente
Acción
ide.505487297_out
-
-
-
Added by system by default
-
Delete
ide.mc2
-
-
-
Manually added
-
Delete
yunwan_lingyi.ads_user_info_1d
yunwan_lingyi.ads_user_info_1d
-
-
Code parsing
-
Delete
En este punto, el nodo mc2 ha completado la configuración de dependencias con el nodo mc1.
-
Modificar dependencias analizadas por código
Si las dependencias analizadas por código no cumplen con lo esperado, o si existen scenarios that do not support scheduling dependencies (tables with non-periodic data production) que requieran eliminar dependencias manualmente, puede consultar el siguiente contenido para modificar las dependencias analizadas automáticamente.
Operación
Descripción
Eliminar manualmente los resultados del análisis
En la lista de dependencias de nodos ascendentes, elimine la entrada inesperada, realice la operación de eliminación y vuelva a analizar. Después de la eliminación, se agrega automáticamente un comentario correspondiente al código para evitar que la dependencia se agregue nuevamente durante el próximo análisis:
--@exclude_input=Remove input --@exclude_output=Remove outputAgregar manualmente entradas y salidas
En el editor de código, haga clic con el botón derecho en un nombre de tabla y seleccione Add Input o Add Output. Después de agregarlo, se añade automáticamente un comentario correspondiente al código.
--@extra_output=Add output --@extra_input=Add inputAlternativamente, puede agregar dependencias consultando manually adding upstream node dependencies through the scheduling configuration panel o setting node dependencies by drawing lines in the workflow panel.
ImportanteDataWorks no permite eliminar directamente una salida de nodo que tiene dependencias descendentes. Hacerlo provocará fallas en la ejecución de tareas descendentes o en la recuperación de datos. Se recomienda primero ajustar las tareas descendentes quitando la dependencia ascendente de los nodos descendentes y luego eliminar la salida del nodo en el nodo ascendente.
-
Escenarios excluidos del análisis automático
Las tablas temporales en DataWorks (tablas con un formato fijo definido en workspace table management, como aquellas cuyos nombres comienzan con
t_) no se analizan automáticamente como salidas del nodo actual ni como dependencias de nodos ascendentes. -
Notas sobre el uso del análisis automático
Al utilizar el análisis automático para configurar dependencias, asegúrese de que las salidas de nodo sean únicas dentro de la región actual. Al usar el análisis automático en escenarios de desarrollo de DataWorks, tenga en cuenta lo siguiente:
Creación de nodos: Cada nodo tiene una salida de nodo predeterminada con el mismo nombre que el nodo. Si existen nodos con el mismo nombre en el mismo espacio de trabajo, debe modificar manualmente la salida de uno de ellos.
Desarrollo de código: El análisis automático utiliza la tabla de salida de un nodo como la salida del nodo. Si dos nodos de programación en el mismo espacio de trabajo insertan datos en la misma tabla, el análisis automático provocará un error en uno de los nodos. Para obtener más información, consulte Multiple nodes write data to the same table, and automatic parsing reports that node output names are the same.
Configuración de dependencias: Si utiliza tareas SQL para procesar las tablas de salida de tareas de sincronización por lotes, para permitir que las tareas SQL dependan rápidamente de las tareas de sincronización por lotes mediante el análisis automático basado en linaje, debe configurar manualmente la tabla de salida del nodo de sincronización por lotes como una salida de nodo, o bien usar el nombre de la tabla de salida de la tarea de sincronización por lotes como el nombre del nodo de sincronización por lotes (la plataforma crea automáticamente una salida de nodo con el mismo nombre que el nodo). De lo contrario, al enviar el nodo SQL descendente, podría producirse el siguiente error: The parent node output name ${projectname.tablename} that the current node depends on does not exist. The current node cannot be submitted. Make sure the parent node with this output name has been submitted.
2. Agregar manualmente dependencias de nodos ascendentes a través del panel de configuración de programación
En el panel de configuración de Scheduling Settings -> Scheduling Dependency -> Same cycle dependence, agregue manualmente las dependencias de nodos ascendentes ingresando la salida del nodo, el nombre del nodo o el ID del nodo. Dado que los nombres de nodo pueden duplicarse, se recomienda utilizar las salidas de nodo para establecer las dependencias.
3. Establecer dependencias de nodo dibujando líneas en el panel de flujo de trabajo
Cuando establece dependencias dibujando líneas en el panel DAG de un workflow, DataWorks agrega automáticamente una salida con el formato _out desde el nodo ascendente hacia el nodo descendente para establecer la dependencia del nodo.
Cuando se elimina una línea de dependencia del panel de flujo de trabajo, la dependencia correspondiente también se quita de la configuración de programación del nodo.
Paso 3: Establecer el tipo de dependencia
Después de establecer las dependencias básicas ascendentes y descendentes, también debe definir cómo se vincula la dependencia; es decir, cómo dependen específicamente las instancias descendientes de las instancias ascendentes. DataWorks proporciona tres métodos de vinculación de dependencias del mismo ciclo, que van de simples a avanzados.
En la lista de Scheduling Settings -> Scheduling Dependency -> Same cycle dependence, seleccione el Dependency Type para cada elemento de dependencia ascendente.
1. Dependencia más cercana (dependencia estándar del mismo ciclo)
Significado: Este es el método de dependencia del mismo ciclo más común y fundamental. Sigue el principio de "vinculación más cercana", donde la instancia descendente se asocia automáticamente y espera a la última instancia producida en el mismo ciclo de negocio por el nodo ascendente, sin necesidad de configuración adicional (existen algunas excepciones; para más detalles, consulte Scheduling configuration principles and examples for complex dependency scenarios).
-
Escenarios aplicables:
Flujos de trabajo ETL diarios, semanales o mensuales estándar.
Relaciones de dependencia uno a uno entre tareas ascendentes y descendentes, como una tarea diaria que depende de otra tarea diaria.
2. Rango especificado (depender de una ventana de tiempo continua)
Cuando una dependencia simple uno a uno no satisface sus necesidades (por ejemplo, cuando la tarea descendente necesita agregar datos de la tarea ascendente durante un periodo de tiempo), puede usar Specified Range para una configuración más flexible.
Esta función requiere que primero habilite el interruptor Advanced Scheduling Dependency Configuration en la configuración de programación del nodo.
-
Método de configuración:
Después de seleccionar el nodo dependiente, haga clic en Configure en la columna Actions y establezca el tipo de dependencia en Specified Range.
Establezca los desplazamientos izquierdo y derecho relativos a la hora programada del nodo actual. El rango de desplazamiento máximo permitido es de -1440 a 1440, en minutos.
Descripción: Esto permite que una tarea descendente dependa de todas las instancias ascendentes dentro de un rango de tiempo continuo. El rango es una "ventana deslizante" calculada dinámicamente en relación con la hora de ejecución programada de la propia tarea descendente, y solo se permiten instancias del día actual y del día anterior dentro del rango especificado.
-
Ejemplo de lógica central: Una tarea descendente horaria depende de otra tarea ascendente horaria, con el rango configurado como
[-2h, +2h].Cuando la instancia descendente de las 12:00 se ejecuta, depende de todas las instancias ascendentes desde las 10:00 hasta las 14:00.
Cuando la instancia descendente de las 13:00 se ejecuta, la ventana de dependencia se "desliza" automáticamente de las 11:00 a las 15:00.
-
Escenarios aplicables:
Agregación de datos entre zonas horarias: Una tarea diaria en China (UTC+8) necesita agregar datos de las 24 tareas horarias en India (UTC+5:30). Puede configurar el rango como
[-3h, 21h]para cubrir con precisión la ventana de tiempo física correspondiente al día hábil local de India.Agregación de ventanas entre días: Una tarea diaria que se ejecuta en la madrugada necesita procesar datos que van desde la tarde anterior hasta la madrugada actual. Por ejemplo, puede configurar el rango como
[-12h, 4h]para depender de instancias horarias ascendentes desde las 12:00 de ayer hasta las 04:00 de hoy.
3. Conjunto especificado (depender de un grupo de instancias fijas discretas)
Cuando su lógica de dependencia está relacionada con instancias de salida específicas y discretas del nodo ascendente, "conjunto especificado" es la mejor opción.
Para usar esta función, primero habilite el interruptor Advanced Scheduling Dependency Configuration en la configuración de programación del nodo.
-
Método de configuración:
Después de seleccionar el nodo dependiente, haga clic en Configure en la columna Actions y establezca el tipo de dependencia en Specified Set.
Establezca los desplazamientos izquierdo y derecho relativos a la hora programada del nodo actual. El rango de desplazamiento máximo permitido es de -1440 a 1440, en minutos.
Descripción: Esto permite que una tarea descendente dependa de un conjunto fijo y discreto de instancias ascendentes. A diferencia de la ventana deslizante del "rango especificado", este conjunto de instancias es estático e idéntico para todas las instancias descendentes.
Ejemplo de lógica central: Una tarea descendente está configurada para depender de las instancias ascendentes de las
{02:00, 06:00, 10:00}. Ya sea la instancia descendente de las 08:00 o la de las 12:00, ambas esperan hasta que las tres instancias específicas finalicen correctamente antes de ejecutarse.-
Escenarios aplicables:
Dependencia de hitos clave: La condición de inicio de la tarea descendente es que los datos en varios puntos clave del día (como instantáneas de la mañana, mediodía y noche) del nodo ascendente estén listos.
Impacto de eliminar o cambiar salidas de nodo
Cuando los cambios en los datos de la tabla de salida de un nodo provocan cambios en las salidas del nodo, o cuando modifica manualmente las salidas del nodo, tenga en cuenta lo siguiente:
Eliminar una salida de nodo no tiene un impacto directo en los datos de la tabla producidos por el nodo.
-
Si una salida de nodo ya tiene dependencias descendentes, cambiarla o eliminarla puede afectar gravemente a las tareas descendentes.
Eliminación de tabla de salida: Cuando una salida de nodo analizada automáticamente cambia debido a un cambio en la tabla de salida, las tareas descendentes pueden convertirse en orphaned nodes que no se programan, o los datos descendentes pueden contaminarse debido a la falta de dependencias de datos.
Cambio de tabla de salida: Si una tabla producida por el nodo actual debe transferirse a otro nodo, siga las instrucciones en Transfer a node output to another node.
Si una salida de nodo tiene dependencias descendentes, antes de eliminar ese nombre de salida, comuníquese con anticipación con los propietarios de las tareas descendentes, infórmeles que se eliminará una salida específica de la tarea actual y pídales que ajusten oportunamente las dependencias de las tareas descendentes para evitar que estas queden huérfanas.
Siguientes pasos: Verificar que las dependencias sean las esperadas
Una vez completada la configuración, verifique que sea correcta para garantizar que la programación de tareas funcione como se espera:
Vista previa de dependencias: Evite retrasos en la programación causados por relaciones de dependencia inesperadas.
Comprobación de envío: Confirme que los cambios en las dependencias sean los esperados al enviar el nodo.
Confirmación de dependencias de nodos autoactivados: Después de desplegar el nodo, confirme en Operation Center que las dependencias de la tarea de programación de producción son las esperadas. Un nodo autoactivado refleja el estado más reciente de la tarea en el entorno de producción, y las relaciones de dependencia de instancias están relacionadas con la forma en que se generan las instancias.
Para obtener más información, consulte Confirm scheduling dependencies.
Preguntas frecuentes
-
P: Después de configurar las dependencias mediante el método de rango especificado o conjunto especificado, si se cambia la hora de programación del nodo ascendente y no hay instancias de las que pueda depender el nodo descendente, ¿qué sucede cuando el nodo descendente alcanza su hora de ejecución?
R: Cuando la instancia del nodo descendente alcanza su hora de ejecución, no se ejecuta porque la instancia ascendente no existe. Su estado en Operation Center es Not Run.
-
P: Si el nodo actual está configurado con una dependencia entre ciclos y el método de dependencia se establece en nodos secundarios de primer nivel u otros nodos, y el nodo seleccionado resulta tener una dependencia de rango especificado o conjunto especificado con el nodo actual, ¿surte efecto la dependencia?
R: Esta configuración puede formar una dependencia circular, por lo que, incluso si se configura, no surte efecto.
-
P: El Nodo A y el Nodo B están programados diariamente. ¿Puedo configurar el Nodo A para que dependa de la instancia del mismo ciclo (día actual) del Nodo B, mientras que el Nodo B depende de la instancia del día anterior del Nodo A a través de una dependencia de rango especificado?
R: No. Las dependencias de rango no admiten dependencias circulares entre días.
Para obtener más preguntas frecuentes, consulte Scheduling dependencies.
Mejores prácticas
Para obtener información sobre cómo configurar dependencias de nodos entre espacios de trabajo o entre flujos de trabajo dentro del mismo espacio de trabajo, consulte Configure cross-workspace or cross-workflow node dependencies.