AMDP en ABAP: qué son, para qué sirven y cuándo usarlas

Durante muchos años, la programación ABAP seguía siempre el mismo patrón: leer datos desde la base de datos, traerlos al servidor de aplicaciones y procesarlos allí. El problema es que ese modelo empezó a quedarse corto cuando aparecieron sistemas con millones de registros y procesos cada vez más pesados.

Con SAP HANA cambió la forma de trabajar los datos. En lugar de mover grandes cantidades de información hacia ABAP para procesarlas, ahora podemos ejecutar parte de la lógica directamente en la base de datos gracias al concepto de Code Pushdown.

Aquí es donde entran tecnologías como las CDS Views y las AMDP.

¿Qué es una AMDP?

AMDP significa ABAP Managed Database Procedures. Una AMDP es un procedimiento que se ejecuta directamente en base de datos, es decir, la lógica de negocio se escribe y se ejecuta dentro de la propia base de datos SAP HANA, utilizando el lenguaje SQLScript.

De esta manera, en lugar de traer millones de registros al servidor ABAP para procesarlos allí, la base de datos realiza los cálculos y devuelve únicamente el resultado final ya procesado.

Características principales de AMDP

  • Se ejecutan en la base de datos, no en la capa de aplicación.
  • Se implementan como métodos dentro de una clase ABAP.
  • La clase debe implementar la interfaz IF_AMDP_MARKER_HDB.
  • Los métodos AMDP deben ser estáticos.
  • El código se escribe en SQLScript (no ABAP).
  • Solo funcionan en SAP HANA (no en otras bases de datos).
  • Parámetros permitidos: IMPORTING, EXPORTING, CHANGING. Los parámetros RETURNING no están permitidos.
  • Los parámetros deben ser tipos escalares (integer, char, etc.) o tipos tabla. No se permiten estructuras profundas (deep structures), estructuras anidadas ni tablas anidadas.
  • Los parámetros se pasan por valor, no por referencia.

Cuándo usar AMDP

Las AMDP se utilizan cuando necesitas optimizar operaciones que serían lentas en ABAP y que pueden beneficiarse de la potencia de HANA.

Usos habituales:

  1. Se necesita procesar grandes volúmenes de datos donde el rendimiento de ABAP SQL o CDS Views no es suficiente.
  2. Se requieren cálculos complejos, transformaciones de datos pesadas o agregaciones avanzadas que solo pueden realizarse en la capa de base de datos.
  3. Se busca minimizar la transferencia de datos entre la base de datos y el servidor de aplicaciones.
  4. Se necesitan funcionalidades específicas de SAP HANA no disponibles en Open SQL, como búsqueda difusa, cálculos geoespaciales o conversiones de moneda.
  5. Se requiere lógica procedimental compleja, que incluya bucles y estructuras de control condicional, y que se ejecute directamente en la base de datos

Ventajas y desventajas de usar una AMDP

Ventajas

  • Rendimiento mejorado: Reduce el tiempo de ejecución y el tráfico de red al eliminar la necesidad de transferir grandes volúmenes de datos entre la base de datos y el servidor de aplicaciones.
  • Gestión centralizada: Se gestionan directamente desde ABAP, lo que facilita su transporte, versionado y ciclo de vida.
  • Flexibilidad y potencia: Permite aprovechar funcionalidades avanzadas de SAP HANA mediante SQLScript.
  • Soporte de depuración: Permite el análisis detallado de errores en tiempo de ejecución

Desventajas

  • Dependencia de SAP HANA: No funcionan en otras bases de datos, lo que limita la portabilidad del código.
  • Depuración limitada: Las herramientas de depuración para AMDP no son tan completas como las de ABAP estándar.
  • Posible complejidad innecesaria: Usarlas incorrectamente para tareas simples puede añadir complejidad al sistema y dificultar el mantenimiento.
  • Riesgos de seguridad: Como en cualquier desarrollo SQL, es importante validar correctamente parámetros y evitar construcciones dinámicas inseguras.
  • Limitaciones de edición: Solo se pueden crear y editar en Eclipse (ADT), no en SAP GUI.
  • MANDT no se aplica automáticamente: El concepto de mandante cliente no se maneja automáticamente en AMDP, por lo que se debe gestionar manualmente para evitar la exposición de datos de diferentes compañías

Cómo se define una AMDP (breve ejemplo)

CLASS zcl_mi_amdp DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .

PUBLIC SECTION.
INTERFACES: if_amdp_marker_hdb. «Marca para AMDP en HANA
METHODS: mi_metodo
IMPORTING VALUE(iv_param) TYPE i
EXPORTING VALUE(et_result) TYPE ztt_tabla.
ENDCLASS.

CLASS zcl_mi_amdp IMPLEMENTATION.
METHOD mi_metodo BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY USING ztabla.
et_result = SELECT * FROM ztabla WHERE campo = :iv_param;
ENDMETHOD.
ENDCLASS.

Esto es solo un ejemplo básico: en un caso real puedes incluir lógica más compleja, joins, agregaciones y hasta llamados a otras funciones de HANA.

Tipos de AMDP

AMDP permite dos tipos de objetos en la base de datos:

  • Procedimientos AMDP (BY DATABASE PROCEDURE)
  • Funciones AMDP (BY DATABASE FUNCTION)

Los procedimientos son los más comunes. Las funciones AMDP se suelen usar junto con CDS Table Functions para exponer resultados como una vista.

Dónde se pueden crear/editar AMDP

HerramientaEditar
Eclipse (ADT)✅ Sí
SAP GUI (SE24)❌ No (solo visualización)

La razón principal es que SQLScript no está integrado de forma nativa en el lenguaje ABAP, por lo que la infraestructura de los editores de SAP GUI no puede proporcionar las funcionalidades necesarias (coloreado de sintaxis, completado de código, depuración, etc.). Por ello, SAP decidió que todas las nuevas herramientas de desarrollo de AMDP, CDS y otros objetos relacionados con HANA solo estén disponibles en Eclipse

Las AMDP son una herramienta muy útil para cualquier desarrollador ABAP que trabaje con SAP HANA. y necesite optimizar operaciones complejas o de gran volumen. Te permiten mantener todo el control desde ABAP, mientras aprovechas la velocidad de procesamiento en memoria que HANA ofrece.