Este tema responde a las preguntas frecuentes sobre el relleno de datos.
Se recomienda leer primero la guía del usuario Manage data backfilling instances.
Why doesn't parallelism take effect for hourly or minute-level backfill nodes?
Why does an instance enter the Pending (Schedule) state after I specify a data timestamp?
Why are multiple instances generated when I backfill data for the 00:00 to 01:00 time range?
Why do instances enter the Pending (Resources) state during large-scale data backfilling?
Why does a data backfilling error state that the node's run time is outside the selected time range?
Cómo funciona el relleno de datos
La función de relleno de datos permite procesar información de un intervalo de tiempo histórico o futuro. Los parámetros de programación que utiliza un nodo se reemplazan automáticamente con los valores correspondientes, según la marca de tiempo de datos seleccionada. A continuación se muestra un ejemplo de cómo escribir datos incrementales desde una base de datos MySQL hacia una partición basada en tiempo en MaxCompute. En un nodo de sincronización por lotes, el parámetro de programación bizdate=$bizdate debe configurarse en tres lugares: 1) En la configuración del origen de datos, utilice la condición de filtro STR_TO_DATE('${bizdate}','%Y%m%d') <= gmt_modify_time AND gmt_modify_time < DATE_ADD(STR_TO_DATE('${bizdate}','%Y%m%d'), interval 1 day) para filtrar los datos incrementales. 2) En la configuración del destino de datos, establezca la información de partición como pt=${bizdate} y seleccione Insert Overwrite como regla de limpieza. 3) En el panel de configuración de programación, introduzca bizdate=$bizdate en el campo Parameters y seleccione Generate instance for the next day (T+1). El valor ${bizdate} debe ser coherente en las tres configuraciones. De este modo, cada ejecución programada sincronizará únicamente los datos incrementales de la marca de tiempo correspondiente.
Durante un relleno de datos, si distintos nodos tienen parámetros de programación con formatos diferentes, como ${yyyy-mm} y ${yyyy_mm}, cada nodo calcula su valor de forma independiente según su propio formato. El sistema calcula y asigna automáticamente el valor de ejecución actual para cada nodo, con base en la marca de tiempo de datos seleccionada. No se requiere ninguna adaptación adicional para los nodos que usan formatos distintos. Si un nodo se ejecuta correctamente de manera individual, también lo hará durante un relleno de datos.
Por qué falla el paralelismo en nodos horarios y por minuto
-
Síntoma
En un nodo programado por hora o por minuto, las instancias no se ejecutan en paralelo aunque se habilite el paralelismo para el relleno de datos.
-
Causa
La configuración de paralelismo del relleno de datos determina si las instancias de un rango de marcas de tiempo de datos, con granularidad diaria, se ejecutan de forma concurrente. Esta opción no controla la concurrencia de las instancias dentro del mismo día para nodos horarios o por minuto. La concurrencia intradiaria de estos nodos depende de si se configuró una autodependencia. Para obtener más información, consulte Scenario 2: Configure a dependency on the previous cycle.
-
Solución
Si deshabilita el paralelismo, las instancias de distintas marcas de tiempo de datos se ejecutan en serie. La instancia de la siguiente marca de tiempo inicia solo cuando finaliza la anterior.
Si habilita el paralelismo, puede establecer el número de instancias concurrentes (por ejemplo, 2, 3, 4 o 5) para ejecutar en paralelo las instancias de relleno de varias marcas de tiempo.
Escenario de ejemplo: suponga que necesita rellenar una semana de datos para un nodo horario o por minuto.
Si el nodo tiene una autodependencia, las instancias de esa semana se ejecutan de forma secuencial en orden cronológico.
Si el nodo no tiene una autodependencia, todas las instancias de cada día se ejecutan en paralelo.
Por qué las instancias entran en estado Pending (Schedule)
-
Síntoma
Después de especificar una marca de tiempo de datos para el relleno, la instancia no se ejecuta. Permanece en estado Pending (Schedule) y se resalta en amarillo.
-
Causa
Esto ocurre cuando la hora de ejecución programada para la marca de tiempo de datos seleccionada está en el futuro.
-
Solución
Para ejecutar estas instancias de inmediato, seleccione la opción Run Retroactive Instances Scheduled to Run after the Current Time en el cuadro de diálogo Backfill Data.
NotaSi selecciona una marca de tiempo de datos cuya hora de ejecución es futura y no marca esta casilla, la instancia entra en estado Pending (Schedule).
Si selecciona una marca de tiempo de datos cuya hora de ejecución es futura y marca esta casilla, la instancia se ejecuta de inmediato.
Por qué los rellenos recientes quedan en estado pendiente
-
Síntoma
Al rellenar datos con la marca de tiempo de ayer o de hoy, la instancia entra en estado Pending (Schedule).
-
Causa
La programación de la plataforma suele basarse en un modelo T+1. Esto significa que los datos con la marca de tiempo de ayer se procesan mediante una ejecución programada para hoy. Cuando rellena datos de una marca de tiempo específica, vuelve a ejecutar la instancia de ciclo de esa fecha.
Para encontrar la instancia de ciclo programada para hoy, debe filtrar por la marca de tiempo de ayer. En la página Cycle Instance, dentro de Operation Center > Cycle Task O&M, establezca el filtro Data Timestamp en Yesterday para consultar las instancias de ciclo correspondientes y sus estados.
Por qué un relleno genera varias instancias
-
Síntoma
El relleno de datos de un intervalo de tiempo, como de 00:00 a 01:00, genera varias instancias.
-
Causa
La cantidad de instancias generadas depende de la configuración de programación del nodo.
Por ejemplo, si un nodo horario está programado para ejecutarse cada hora de 00:00 a 23:59, el relleno de datos del intervalo de 00:00 a 01:00 genera dos instancias con horas de ejecución programadas a las 00:00 y a las 01:00.
De igual forma, si un nodo está programado para ejecutarse cada 30 minutos, el relleno de datos del intervalo de 00:00 a 01:00 genera tres instancias con horas de ejecución a las 00:00, 00:30 y 01:00.
Por qué los rellenos masivos quedan pendientes de recursos
-
Síntoma
Durante una operación de relleno de datos a gran escala, algunas instancias entran en estado Pending (Resources) y se resaltan en amarillo.
-
Causa
Cada resource group tiene un límite máximo de concurrencia para ejecutar nodos. Si la cantidad de nodos en ejecución simultánea supera este límite, las nuevas instancias se colocan en cola en estado Pending (Resources).
NotaPara solucionar este problema, consulte Waiting for resources.
Por qué aparece el error "run time out of range"
-
Síntoma
Durante el relleno de datos puede aparecer un error que indica que la hora de ejecución del nodo activado está fuera del intervalo de tiempo seleccionado.
-
Causa
Este error ocurre porque la hora de ejecución programada real del nodo queda fuera del intervalo de tiempo especificado. Para los nodos horarios y por minuto, debe especificar una ventana de tiempo de ejecución para el relleno de datos. Por ejemplo, en el cuadro de diálogo Backfill Data, si establece Select a run time window en
00:00 ~ 01:00, pero el nodo activado está programado para otra hora, la operación de relleno falla. Para solucionarlo, ajuste la ventana de tiempo de ejecución de modo que incluya la hora programada del nodo.
Por qué no se generan instancias de relleno
-
Síntoma
Inició una operación de relleno de datos para un nodo, pero no se generaron instancias de relleno.
-
Causa
Las instancias no se generan si la marca de tiempo de datos está fuera del rango de fechas de vigencia del nodo. Asegúrese de que las marcas de tiempo del relleno estén dentro de dicho rango. En el panel de configuración de programación del nodo, puede ver ajustes como estos: Time attribute establecido en Normal scheduling, Rerun attribute sin seleccionar, Auto rerun on error sin seleccionar, un effective date range de 1999-09-09 a 1999-10-22 (la programación solo surte efecto dentro de este rango), Suspend scheduling sin seleccionar, scheduling cycle en Daily y la hora programada a las 00:19. Si la marca de tiempo del relleno de datos queda fuera del effective date range, no se generarán instancias de relleno.
Relleno de datos para nodos semanales y mensuales
-
Descripción: al rellenar datos para nodos semanales o mensuales, debe establecer la marca de tiempo de datos en el día anterior a la hora de ejecución programada. Un nodo programado para ejecutarse un día específico de la semana o del mes solo se ejecuta ese día. En los demás días se generan instancias de ejecución simulada, pero el nodo no se ejecuta realmente. El estado de dicha instancia indica un ciclo de ejecución simulada semanal o mensual. Para obtener más información, consulte Scenario 1: Dry run for weekly/monthly cycle.
NotaLa marca de tiempo de datos para el relleno se calcula así:
data timestamp = Scheduled run date - 1 day.Para obtener más información sobre la relación entre los parámetros de programación, las marcas de tiempo de datos, las horas programadas y las horas de ejecución reales, consulte Supported formats for scheduling parameters.
-
Ejemplo: rellenar datos para un nodo mensual
Para un nodo programado a las 00:00 del primer día de cada mes, debe establecer la marca de tiempo de datos en el último día del mes anterior. Considere un nodo mensual cuyo scheduling cycle está en Monthly y su hora de ejecución es
00 00 00 1 * ?. Para procesar los datos de noviembre de 2022, establezca tanto la fecha de inicio como la de fin de Data Timestamp en 2022-11-30 dentro del cuadro de diálogo Backfill Data y, a continuación, haga clic en OK.
Cómo afecta el límite de instancias en paralelo a los rellenos
Cuando se habilita la configuración de maximum parallel instances para un nodo, este límite aplica tanto a las instancias de relleno de datos como a las instancias de ciclo regulares. Ambas comparten la misma cuota de concurrencia.
Cuando la concurrencia de instancias supera el límite, el sistema limita principalmente las instancias de relleno de datos históricos, es decir, aquellas con marcas de tiempo anteriores a hoy.
El límite máximo de instancias en paralelo aplica solo a las instancias generadas después de habilitar la configuración. Las instancias que ya están en ejecución o en cola no se ven afectadas.
El valor de maximum parallel instances puede ir de 1 a 10 000, y el valor predeterminado es 1.
Qué hacer si un relleno de datos en paralelo mediante openapi reporta Can't update ObjectId BeginTs less than lastCommitTs u "ODPS-0429311 metadata transaction conflict"
-
Causa
Durante un relleno de datos en paralelo, las tareas de distintas marcas de tiempo se ejecutan al mismo tiempo e involucran operaciones DDL de tablas. Algunos ejemplos son instrucciones
ALTER TABLEconcurrentes, una colisión entre una fusión automática y una operación DDL manual, o programaciones superpuestas. Esto provoca un conflicto de transacción de metadatos en MaxCompute o un conflicto DDL. -
Solución
Establezca el parámetro
Parallelismde la API de relleno de datos enfalsepara que las tareas se ejecuten en serie y no modifiquen los metadatos de forma concurrente. Si el conflicto ocurre solo de manera ocasional, un reintento suele resolverlo. -
Información adicional
Después de establecer
Parallelismenfalse, el flujo de trabajo de relleno de datos para varias marcas de tiempo se ejecuta en orden estrictamente serial. La instancia de la siguiente marca de tiempo inicia solo cuando todas las instancias de la marca de tiempo anterior finalizan con éxito. Si falla una tarea de una marca de tiempo ascendente, las instancias de relleno de las marcas de tiempo descendentes permanecen en estado Not Running (mostrado como Creating en versiones anteriores de la API). Actualmente no existe ninguna API para consultar directamente el estado general de la tarea. Solo puede consultar el estado de las instancias por marca de tiempo de datos.
Cómo solucionar una tarea de relleno de datos lenta
-
Compruebe la carga del resource group
Revise el uso del resource group. Si el uso es alto, el resource group está saturado y las tareas se colocan en cola. Reduzca la cantidad de tareas concurrentes o amplíe el resource group.
-
Analice el registro de trabajos de MaxCompute (Logview)
Si el resource group no está saturado pero la tarea sigue siendo lenta, obtenga la URL de Logview y analice la eficiencia de ejecución del SQL. Compruebe si hay inflación de datos; por ejemplo, una operación
JOINcuya salida es mucho mayor que su entrada. Use la información de Input para ubicar el nodo SQL específico y las tablas involucradas. Un caso común es una tabla de dimensiones combinada con una tabla de hechos donde la distribución desigual de los valores de la clave de unión genera un producto cartesiano. Consulte la documentación oficial de MaxCompute para optimizar el SQL.
Cómo solucionar una discrepancia entre el resultado del relleno de datos y la ejecución local del SQL
-
Compruebe la coherencia del entorno
Verifique si el origen de datos conectado a su entorno de producción en DataWorks es exactamente el mismo que usa de forma local. Distinga entre la base de datos de prueba y la base de datos de producción.
-
Compruebe el valor de la partición
Confirme que el valor de partición utilizado en la tarea de relleno de datos (por ejemplo,
ds='20260212') coincida con el valor usado en la consulta local. Revise la lógica que asigna el campo de partición y el formato de la marca de tiempo de datos en la instrucción SQL. -
Unifique la configuración de zona horaria
Agregue
SET odps.sql.timezone = <time zone>;(por ejemplo,SET odps.sql.timezone = America/Cancun;) al inicio de la consulta local. Así se asegura de que los campos de tiempo se analicen sintácticamente de la misma forma que en la tarea de relleno de datos. Esto evita diferencias de cálculo en funciones comoTO_CHARyDATEADD. -
Reproduzca la lógica SQL completa
Ejecute localmente la instrucción SQL completa del registro de ejecución de DataWorks. Incluya toda la lógica de
JOINyCASE, así como los parámetrosSET, en lugar de contar únicamente las filas de la tabla de destino. -
Compruebe en la consola
Ejecute la misma instrucción SQL directamente en la consola de DataWorks para descartar interferencias de su entorno local.