Desmistificando os tipos SORTED, HASHED E STANDARD TABLE

Você que trabalha no dia a dia com desenvolvimento ABAP, seja como programador ou analista funcional, já deve estar acostumado com constantes cobranças por maior desempenho na entrega dos projetos e também com questionamentos sobre a qualidade do resultado final das entregas.

Para apoiar profissionais como você a aumentarem a agilidade das entregas e qualidade final dos projetos, existem basicamente dois tipos de tabelas internas que podem ser utilizadas no dia a dia do desenvolvimento ABAP. Estas tabelas podem proporcionar um maior desempenho na programação do código ABAP e quando bem utilizadas evitam uma série de erros durante o processo.

Neste artigo, vamos esclarecer melhor qual a aplicação destas tabelas e as diferenças entre elas, e vamos lhe mostrar como elas podem lhe ajudar a ser um profissional mais produtivo.

O que é uma tabela interna

Uma tabela interna nada mais é do que uma área reservada de memória capaz de armazenar uma estrutura de dados semelhante a uma tabela. Com uma tabela interna você poderá armazenar um conjunto de registros do ERP, como dados de vendas, compras, fornecedores, clientes e assim por diante.

Quais são os tipos de tabela interna disponíveis

                Para as tabelas internas temos duas principais categorizações. As tabelas internas indexadas e não indexadas, conforme detalhado na figura abaixo.

tabelas-internas

As tabelas indexadas possuem um índice explicito em sua estrutura. Já as tabelas não indexadas possuem uma forma diferente de pesquisa dos dados, fazendo de forma direta e não estruturada.

A seguir iremos explorar as tabelas mais utilizadas, que são: Standard, Sorted e Hashed table.

Internal standard table (Tabela interna padrão)

Essas tabelas internas são utilizadas no ABAP quando é necessário alterar os campos chave para pesquisa durante o processamento dos dados. Elas possuem um índice linear que possibilitam o acesso a tabela conforme a necessidade durante o processamento do programa, mantendo o desempenho do código. Para esse tipo de tabela não é possível indicar um índice de acesso único, o que em alguns casos poderá gerar problemas de performance, dependendo do volume de dados.

A standard table é o tipo mais comum utilizado nos programas ABAP e também o mais simples. Para adicionar dados, não é preciso se preocupar com os valores contidos no processamento, e sim em apenas executar a clausula APPEND.

Um ponto importante para se atentar ao utilizar esse tipo de tabela é que ela não possui informações organizadas, e isso pode causar problemas frequentes durante a leitura de dados. Para evitar estes problemas, sempre execute uma ordenação dos dados com a clausula SORT, organizando a tabela com a chave que você deseja pesquisar.

Quando fazer a leitura desses dados com um READ TABLE, lembre-se sempre da clausula BINARY SEARCH, ela é capaz de acelerar sua pesquisa por meio de uma busca binária estruturada dentro da tabela.

Fique atento também que o tempo de acesso à pesquisa da tabela standard sempre será linear, isso significa que quanto mais registros existirem, maior também será o tempo de resposta. Para entender melhor o seu funcionamento, veja como é a sintaxe dessa tabela com um exemplo prático para utilizá-la.

Sintaxe:

DATA: <itab> TYPE STANDARD TABLE OF <db_table>

WITH <default/non-unique> KEY <fld>

WITH HEADER LINE

INITIAL SIZE <n>.

 

Exemplo:

DATA: it_kna1 TYPE TABLE kna1

DATA: w_kna1 TYPE kna1.

WITH NON-UNIQUE KEY name1

WITH HEADER LINE

INITIAL SIZE 0.

SELECT * FROM kna1 INTO TABLE it_kna1.

IF sy-subrc IS INITIAL.

SORT it_kna1 BY name1.

READ TABLE it_kna1 INTO w_kna1 WITH KEY name1 = ‘PAUL’ BINARY SEARCH.

WRITE: / w_kna1-kunnr , w_kna1-land1 , w_kna1-name1.

ENDIF.

 

Internal Sorted table (Tabela interna ordenada)

Neste tipo de tabela interna a informação é ordenada no momento da inserção dos dados. Essas tabelas não possibilitam ao desenvolvedor reordenar as informações durante o processamento do programa ABAP através da clausula SORT. As Internal Sorted tables também possuem um acesso linear da mesma maneira que as tabelas standard, nesse caso, permitem o acesso aos registros pelo seu índice ou pela chave da tabela.

Sempre que o acesso a tabela for feito com a chave, o desenvolvedor terá um tempo de resposta logarítmico diretamente relacionado com o volume de registros. Em virtude dessa forma diferente de acesso aos dados, o tempo de retorno das informações é mais rápido que das tabelas standard, ou seja, quanto mais registros a tabela possuir, maior será a diferença do tempo de resposta entre as duas.

A chave de uma tabela sorted pode ser única ou não, sendo esta definição opcional. Essa tabela é normalmente utilizada quando a equipe já possui uma situação definida e sabe-se que ela não irá se alterar durante o processamento do programa. As condições de acesso sempre serão conforme o definido previamente.

Sintaxe:

DATA: <itab> TYPE SORTED TABLE OF <db_table>

WITH <default/non-unique> KEY <fld>

WITH HEADER LINE

INITIAL SIZE <n>.

 

Exemplo:

DATA: it_kna1 TYPE SORTED TABLE OF kna1

WITH NON-UNIQUE KEY land1

WITH HEADER LINE

INITIAL SIZE 0.

DATA: w_kna1 TYPE kna1.

SELECT * FROM kna1 INTO TABLE it_kna1

LOOP AT it_kna1 INTO w_kna1.

WRITE: / w_kna1-kunnr , w_kna1-land1 , w_kna1-name1.

ENDLOOP.

 

Internal Hashed table (Tabela interna hash)

As Internal Hashed table são também conhecidas como tabelas não indexadas. Isso se dá pelo fato de o conteúdo dessa tabela em memória ser criado no formato hashed e não com os valores explícitos como nos dois tipos anteriores. Por esse motivo, não é possível indexar seu conteúdo durante o processamento.

É possível acessar os dados hash desse tipo de tabela apenas especificando sua chave. O tempo de resposta desse sistema de leitura é sempre constante, independentemente do volume de registros que ele possua, desde que a sua busca utilize o algoritmo hash.

A chave de uma tabela hash tem que ser única. Nunca será permitido um índice não único, diferentemente dos outros dois casos que também podem assumir chaves não únicas.

O uso da Internal Hashed table é particularmente adequado quando se possui uma chave de acesso única e exclusiva para cada registro da tabela, pois durante o processamento do programa isso jamais se alterará. Sua declaração é muito similar a criação de tabelas do banco de dados, veja então como é sua sintaxe e como podemos utilizá-la.

 

Sintaxe:

DATA : ITAB TYPE HASHED TABLE OF <DB_TAB>

WITH UNIQUE KEY <FLD_NAME>

WITH HEADER LINE

INITIAL SIZE <N>.

  

Exemplo:

DATA : it_kna1 TYPE HASHED TABLE OF kna1

WITH UNIQUE KEY kunnr

WITH HEADER LINE

INITIAL SIZE 0.

DATA: w_kna1 TYPE kna1.

SELECT * FROM kna1 INTO TABLE it_kna1.

LOOP AT it_kna1 INTO w_kna1.

WRITE : / ‘kunnr’ , w_kna1-kunnr.

WRITE : / ‘land1’ , w_kna1-land1.

WRITE : / ‘name1’ , w_kna1-name1.

ULINE.

ENDLOOP.

 

Comparativo entre os principais tipos de tabela

Abaixo segue uma tabela comparando os três tipos de tabela que até aqui explanamos.

Standard Table Sorted Table Hashed Table
Tabela padrão, sem ordenação e consulta ordenada padrão. Dados quando inseridos são ordenados automaticamente. Os dados dentro da sua tabela se transformam num código hash.
Para ler registros você pode utilizar a chave ou um índice da tabela Para ler registros você pode utilizar a chave ou um índice da tabela. Para ler registros você pode utilizar apenas a chave da tabela
Para ler um registro você pode utilizar um meio linear ou uma pesquisa binária. Para ler um registro você só pode utilizar uma pesquisa binária com a tabela já ordenada. Para ler um registro você só pode utilizar um algoritmo hash.
Podemos ordenar as tabelas conforme nossa necessidade. A tabela é criada com sua lógica de ordenação pré-determinada, impossibilitando reordená-la. Sem meios de ordenação.
Para inserir um registro na tabela você pode utilizar INSERT ou APPEND. Para inserir um registro na tabela você só pode utilizar INSERT. Para inserir um registro na tabela você só pode utilizar INSERT.
Utilizamos esse tipo de tabela quando precisamos acessar registros em diferentes pontos do meu programa com uma chave diferente. Utilizamos esse tipo de tabela quando nossa lógica de leitura é dependente de uma condição ou chave e isso não será alterado ou reordenado conforme o processamento do meu programa. Utilizamos esse tipo de tabela quando em nosso programa temos uma condição única e exclusiva de acesso aos dados de uma determinada tabela e isso jamais muda durante o processamento

 

Considerações finais

Sabemos que existem diversas formas de se desenvolver um código, seja um software de grande complexidade ou algumas customizações. Para realizar este trabalho com a melhor qualidade e desempenho possível, cabe a nós entendermos e utilizarmos as melhores práticas disponíveis e fazer o uso da melhor maneira.

Ao fazer o uso correto das tabelas aqui citadas, os profissionais envolvidos nas customizações do código ABAP estarão mais preparados a utilizarem os melhores recursos da solução, evitando erros e otimizando seu tempo de desenvolvimento.

Quer saber mais sobre como otimizar o desenvolvimento ABAP? Fale agora mesmo com a QAMETRIK!

chamada_conheca-qametrik


Voltar