¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

ADBC vs AMDP: Comparação de desempenho e programação dinâmica em procedimentos armazenados do HANA

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

Olá Especialistas,

Nosso projeto precisa chamar um procedimento armazenado do HANA decidido em tempo de execução.

Tenho duas opções, usar ADBC ou AMDP.

Qual é melhor em termos de desempenho? E qual é melhor para programação dinâmica?


Alguém pode compartilhar alguma luz sobre isso? Muito obrigado:).

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

4 Respuestas

0
Cargando...

"porque aprendi com meu colega que não podemos chamar uma visualização CDS com parâmetro de entrada (função de tabela no HANA) dentro de um AMDP"

Isso seria novo para mim. Dentro de um AMDP, você está no Native SQLScript como em um procedimento gerado por ADBC. Você pode chamar qualquer coisa que desejar, desde que siga as regras do AMDP para o uso de objetos de esquemas de bancos de dados.

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

Olá Keller,

Obrigado por compartilhar a perspectiva.

Na verdade, o que estou fazendo aqui é construir uma API para que nossa equipe possa manipular procedimentos armazenados no HANA. Eles podem usar a API para criar/excluir/chamar procedimentos/tipos de tabela.

Optarei pelo ADBC no início porque aprendi com meu colega que não podemos chamar uma visão CDS com parâmetros de entrada (função de tabela no HANA) dentro de um AMDP. Esse tipo de limitação não existe em um procedimento armazenado puro do HANA. Já que estamos gerando procedimentos de qualquer maneira, parece que um procedimento puro é mais poderoso que um AMDP.

Em relação ao desempenho, já revisei sua resposta neste blog Desempenho lento no AMDP . Por uma questão de correção, abrirei o parâmetro IS_LOB ao consumidor para que decidam se o parâmetro precisa de manipulação de LOB.

Há algum outro ponto em que devo ter cuidado ou melhorar no tratamento de procedimentos com ADBC?

Quanto à programação dinâmica, aqui está a questão, estou tendo dificuldades para construir um script SQL nativo para criar/chamar procedimentos armazenados.

-------------------------------------------------------------------------------------------
#1 Para o método create_procedure da minha API, preciso abrir um parâmetro de importação it_param para que o consumidor passe os parâmetros de entrada do procedimento, a fim de gerar um script como o seguinte:

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))

......
O problema aqui é que tenho que converter TIPO DE DADOS ABAP para TIPO DE DADOS HANA por conta própria. Consultando o blog Como o SLT mapeia os tipos de dados . Realizei o trabalho no arquivo anexo convert-abap-type-to-hana-type.txt . Poderia revisar se cometi algum erro no código?
-------------------------------------------------------------------------------------------
#2 Para o método call_procedure (apenas caso de parâmetro escalar) da minha API, assim como no método create, também preciso de parâmetros de entrada com tipo ABAP, mas não quero incomodar o consumidor para passar os parâmetros de saída. Retornarei uma tabela interna com todos os parâmetros de saída escalares. Posso conseguir isso? Parece que não é possível a menos que eu procure os parâmetros em "SYS"."PROCEDURE_PARAMETERS" para obter todos os parâmetros de saída com TIPO DE DADOS HANA e então converter TIPO DE DADOS HANA para TIPO DE DADOS ABAP por conta própria. Não tenho certeza se esta é a abordagem correta, poderia compartilhar seus pensamentos sobre isso?
--------------------------------------------------------------------------------------------
#3 Para o método call_procedure_tabular_out (caso de um parâmetro tabular de saída) da minha API. Preciso construir a string de consulta por conta própria conforme mostrado abaixo:
CALL "XXX"."Test"( P_TIMESTAMP=>'20170314121212', P_AMOUNT=>1000, outputParams=>?);
Aqui você pode ver que tenho dois parâmetros P_TIMESTAMP que é CHAR e P_AMOUNT que é DECIMAL. Como posso preencher o valor do parâmetro '20170314121212' e 1000? Todos são referências de dados, poderia simplesmente escrever da seguinte forma:
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...

Qual é melhor em termos de desempenho?

Não deve haver diferença. Ambos executam o SQLScript do procedimento do banco de dados. Somente quando um método AMDP é chamado pela primeira vez, o framework precisa realizar algumas tarefas de configuração.

E qual é melhor para programação dinâmica?

  • ADBC é SQL nativo puramente dinâmico. Você passa declarações SQL arbitrárias como strings para objetos ADBC.
  • AMDP envolve chamadas de procedimentos do banco de dados em classes de objetos ABAP. As classes e suas implementações de procedimentos são definidas em tempo de compilação. Para a instanciação de objetos e chamada de métodos AMDP, você tem as mesmas possibilidades dinâmicas que para classes normais.
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Qual é melhor em termos de desempenho?

Não deveria haver diferença. Ambos executam o SQLScript do procedimento do banco de dados. Apenas quando um método AMDP é chamado pela primeira vez, o framework precisa realizar algumas tarefas de configuração.

E qual é melhor para programação dinâmica?

  • ADBC é puramente SQL dinâmico nativo. Você passa declarações SQL arbitrárias como strings para objetos ADBC.
  • AMDP envolve chamadas a procedimentos de banco de dados em classes de objetos ABAP. As classes e suas implementações de procedimentos são definidas em tempo de compilação. Para instanciação de objetos e chamada de métodos AMDP, você tem as mesmas possibilidades dinâmicas que para classes normais.
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?