Todos los productos
Search
Centro de documentos

MaxCompute:Depuración

Última actualización: Sep 05, 2026

Hay tres herramientas de depuración disponibles, ordenadas de la más ligera a la más compleja:

  1. Visualizar el plan de ejecución: consulte cómo PyODPS optimiza y combina sus operaciones antes de ejecutarlas.

  2. Inspeccionar el SQL compilado: compruebe el código SQL que PyODPS genera para el backend de SQL de MaxCompute.

  3. Ejecutar localmente con pandas: descargue una muestra pequeña e itere rápidamente sin programar un trabajo de MaxCompute.

Visualizar el plan de ejecución

Si visualiza el plan de ejecución antes de ejecutar un cálculo, identificará dónde se combinan las operaciones en una sola etapa y dónde existen límites explícitos entre etapas. Esto revela posibles cuellos de botella, como operaciones que no se pueden paralelizar, antes de que afecten los trabajos en producción.

Requisitos previos: instale graphviz y el paquete de Python graphviz.

Llame al método .visualize() en cualquier DataFrame para representar su gráfico de cálculo.

Ejemplo: operaciones combinadas en una sola etapa

Cuando ningún límite de caché separa las operaciones, PyODPS las combina automáticamente:

>>> df = iris.groupby('name').agg(id=iris.sepalwidth.sum())
>>> df = df[df.name, df.id + 3]
>>> df.visualize()

El gráfico muestra que PyODPS combina las operaciones groupby y de filtrado de columnas en una sola etapa.

Ejemplo: operaciones divididas en dos etapas

Si inserta .cache() entre las operaciones, forzará un límite de etapa:

>>> df = iris.groupby('name').agg(id=iris.sepalwidth.sum()).cache()
>>> df2 = df[df.name, df.id + 3]
>>> df2.visualize()

Ahora el gráfico muestra dos etapas porque la llamada a .cache() crea un límite de ejecución explícito. Al comparar estos dos gráficos, queda claro dónde ocurren las divisiones de etapa y dónde es posible combinarlas.

Inspeccionar el SQL compilado

Llame al método .compile() para ver el código SQL que PyODPS genera para el backend de SQL de MaxCompute. Úselo para comprobar que la consulta generada coincide con lo que necesita antes de enviar un trabajo.

>>> df = iris.groupby('name').agg(sepalwidth=iris.sepalwidth.max())
>>> df.compile()
Stage 1:

SQL compiled:

SELECT
  t1.`name`,
  MAX(t1.`sepalwidth`) AS `sepalwidth`
FROM test_pyodps_dev.`pyodps_iris` t1
GROUP BY
  t1.`name`

Ejecutar localmente con pandas

Para iterar más rápido, descargue una muestra pequeña de datos desde MaxCompute y ejecútela con el backend de cálculo de pandas. Como PyODPS usa el servicio MaxCompute Tunnel para descargar los datos directamente, se omite por completo el programador del backend de SQL de MaxCompute. Por lo tanto, no hay tiempos de espera por la programación de trabajos.

A continuación se muestran las operaciones que activan una descarga mediante Tunnel en lugar de un trabajo de SQL de MaxCompute:

Tabla sin particiones: seleccione todas o algunas filas, filtre columnas o cuente filas. El filtrado de columnas no calcula los valores de estas.

>>> iris.count()
>>> iris['name', 'sepalwidth'][:10]

Tabla con particiones: seleccione filas de todas las columnas de partición o de las primeras, filtre columnas o cuente filas.

>>> df[:10]
>>> df[df.ds == '20160808']['f0', 'f1']
>>> df[(df.ds == '20160808') & (df.hh == 3)][:10]
>>> df[(df.ds == '20160808') & (df.hh == 3) & (df.mm == 15)]

Alternar entre el modo local y el de producción

Use un indicador DEBUG para alternar entre la ejecución local con pandas y la ejecución completa en MaxCompute:

>>> DEBUG = True
>>> if DEBUG:
>>> df = iris[:100].to_pandas(wrap=True)
>>> else:
>>> df = iris

Establezca DEBUG = True durante el desarrollo para descargar los datos de forma local. Establezca DEBUG = False antes de ejecutar en producción para que el cálculo completo se ejecute en MaxCompute.

Nota

La ejecución local y la ejecución en MaxCompute no son equivalentes. Algunos programas que superan la depuración local pueden fallar en MaxCompute debido a las restricciones del sandbox. Pruebe siempre en el entorno de producción antes de confiar en los resultados locales.