¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

ADBC vs AMDP: Comparativa de rendimiento y programación dinámica en procedimientos almacenados de HANA

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 48 Vistas
0
Cargando...

Hola Expertos,

Nuestro proyecto necesita llamar a un procedimiento almacenado de hana decidido en tiempo de ejecución.

Tengo dos opciones, usar ADBC o AMDP.

¿Cuál es mejor en términos de rendimiento? ¿Y cuál es mejor para programación dinámica?


¿Alguien puede compartir algo de luz al respecto? ¡Muchas gracias:).

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

"porque aprendí de mi colega que no podemos llamar a una vista CDS con parámetro de entrada (función de tabla en HANA) dentro de un AMDP"

Eso sería nuevo para mí. Dentro de un AMDP estás en Native SQLScript como en un procedimiento generado por ADBC. Puedes llamar a cualquier cosa que desees siempre y cuando siga las reglas de AMDP para el uso de objetos de esquemas de bases de datos.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Keller,

Gracias por compartir la perspectiva.

En realidad, lo que estoy haciendo aquí es construir una API para que nuestro equipo pueda manejar procedimientos almacenados de HANA. Pueden usar la API para crear/eliminar/llamar procedimientos/tipos de tabla.

Me decantaré por ADBC al principio porque aprendí de mi colega que no podemos llamar a una vista CDS con parámetros de entrada (función de tabla en HANA) dentro de un AMDP. Este tipo de limitación no existe en un procedimiento almacenado puro de HANA. Dado que de todos modos estamos generando procedimientos, parece que un procedimiento puro es más potente que un AMDP.

En cuanto al rendimiento, ya revisé tu respuesta en este blog Rendimiento lento en AMDP . Por una cuestión de corrección, abriré el parámetro IS_LOB al consumidor para que decidan si el parámetro necesita manejo de LOB.

¿Hay algún otro punto en el que deba tener cuidado o mejorar en el manejo de procedimientos con ADBC?

En cuanto a la programación dinámica, aquí está la cuestión, estoy teniendo dificultades para construir un script SQL nativo para crear/llamar procedimientos almacenados.

-------------------------------------------------------------------------------------------
#1 Para el método create_procedure de mi API, necesito abrir un parámetro de importación it_param para que el consumidor pase los parámetros de entrada del procedimiento para que pueda generar un script como el siguiente:

CREATE PROCEDURE "XXX"."Test"( <br>   in in_1 NVARCHAR ,<br>   in in_2 DECIMAL(38,2) ,<br>   out out_1 NVARCHAR ,<br>   out out_2 DECIMAL(38,2))

......
El problema aquí es que tengo que convertir TIPO DE DATOS ABAP a TIPO DE DATOS HANA por mi cuenta. Consultando el blog Cómo SLT mapea los tipos de datos . He realizado el trabajo en el archivo adjunto convert-abap-type-to-hana-type.txt . ¿Podrías revisarlo por si cometí algún error en el código?
-------------------------------------------------------------------------------------------
#2 Para el método call_procedure (solo caso de parámetro escalar) de mi API, al igual que en el método create, también necesito parámetros de entrada con tipo ABAP, pero no quiero molestar al consumidor para que pase los parámetros de salida. Devolveré una tabla interna con todos los parámetros de salida escalares. ¿Puedo lograrlo? Parece que no es posible a menos que busque los parámetros en "SYS"."PROCEDURE_PARAMETERS" para obtener todos los parámetros de salida con TIPO DE DATOS HANA y luego convertir TIPO DE DATOS HANA a TIPO DE DATOS ABAP por mi cuenta. No estoy seguro si este es el enfoque correcto, ¿podrías compartir tus pensamientos al respecto?
--------------------------------------------------------------------------------------------
#3 Para el método call_procedure_tabular_out (caso de un parámetro tabular de salida) de mi API. Necesito construir la cadena de consulta por mi cuenta como se muestra a continuación:
CALL "XXX"."Test"( P_TIMESTAMP=>'20170314121212', P_AMOUNT=>1000, outputParams=>?);
Aquí puedes ver que tengo dos parámetros P_TIMESTAMP que es CHAR y P_AMOUNT que es DECIMAL. ¿Cómo puedo completar el valor del parámetro '20170314121212' y 1000? Todos son referencias de datos, ¿podría simplemente escribirlo de la siguiente manera:
lv_script = |CALL "XXX"."Test"( P_TIMESTAMP=>{ ir_param1->* 
            
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¿Cuál es mejor en términos de rendimiento?

No debería haber diferencia. Ambos ejecutan el SQLScript del procedimiento de la base de datos. Solo cuando se llama a un método AMDP por primera vez, el framework tiene que realizar algunas tareas de configuración.

¿Y cuál es mejor para la programación dinámica?

  • ADBC es SQL Nativo puramente dinámico. Pasas declaraciones SQL arbitrarias como cadenas a objetos ADBC.
  • AMDP envuelve las llamadas de procedimientos de la base de datos en clases de objetos ABAP. Las clases y con ellas sus implementaciones de procedimientos se definen en tiempo de compilación. Para la instanciación de objetos y la llamada a métodos AMDP tienes las mismas posibilidades dinámicas que para las clases normales.
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¿Cuál es mejor en términos de rendimiento?

No debería haber una diferencia. Ambos ejecutan el SQLScript del procedimiento de la base de datos. Solo cuando se llama a un método AMDP por primera vez, el marco tiene que realizar algunas tareas de configuración.

¿Y cuál es mejor para la programación dinámica?

  • ADBC es puramente SQL nativo dinámico. Pasas declaraciones SQL arbitrarias como cadenas a objetos ADBC.
  • AMDP envuelve las llamadas a procedimientos de base de datos en clases de objetos ABAP. Las clases y con ellas sus implementaciones de procedimientos se definen en tiempo de compilación. Para la instanciación de objetos y la llamada a métodos AMDP, tienes las mismas posibilidades dinámicas que para clases normales.
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?