Você está na página 1de 14

Performance Tunnig de Rotinas de ETL

Kettle tunning e Boas Prticas de Desenvolvimento

O que so rotinas de ETL?


Rotinas ou processos de ETL (Extraction, Transformation and Load) so compostas por: Extrao de dados de mltiplas fontes; Tratamento e Limpeza desses dados; Carga dos dados em uma ou vrias bases de dados (ex: DW). Podem ser feitas por meio de: PL/SQL do banco de dados em utilizado (ex:Oracle); Ferramentas de ETL (ex: PDI Kettle, Microsoft DTS, Talend, etc).

Um pouco sobre o Kettle


O que significa Kettle? Pode significar 2 coisas: 1. Traduo - Chaleira; 2. Acrnimo:

Kettle Extraction Transformation Transportation Loading Enviroment

Um pouco sobre o Kettle


O que esta ferramenta?
Kettle como conhecido, tem o nome oficial de PDI (Pentaho Data Integration). Desenvolvida em Java; Orientado a metadados (XML).
Todos o processos so criados numa interface grfica, sem a necessidade de programao manual.

usado principalmente para projetos de Data Warehouses. Mas pode ser usada tambm para:
Migrao de Dados entre aplicaes e Banco de Dados;

Exportao de Dados;
Integrao entre aplicaes; Entre outros.

Um pouco sobre o Kettle


Como so construidas as ETLs no Kettle?
ETLs no Kettle so representadas graficamente por uma ferramenta de sua sute chamada Spoon. Nesta ferramenta podemos construir as ETL atravs de: Transformations
So compostas por sequncias de steps (processos) interligados por hops. Hops so representaes grficas dos dados transitando pelos steps. So executadas paralelamente (Multi Threading), para cada step representa uma Thread.

Jobs
Executados sequencialmente, essencial para carga de um DW. So processos maiores que podem ser compostos validaes e at mesmo outras transformations e outros jobs.

Um pouco sobre o Kettle


Como so construdas as ETLs no Kettle?
So Construdas com os Steps, que so responsveis por um processo especfico.
Veja o Exemplo:

Um pouco sobre o Kettle


Execuo de uma Transformation:
Primeira linha gerada pelo step de modo As linhas so processadas Processa a Generate RowsPrimeira Linha 1, Paralelo! Convertendo um campo para caixa baixa.
ROW1 ROW2 ROW3

Grava a Linha 1 num Arquivo de Texto

Kettle Performance Tunning


Como otimizar a performance de uma ETL?

Multi Threading Iniciar varias cpias de um step ao mesmo tempo:


Ideal para steps com alto uso de CPU e para mquinas com vrios processadores (Multi-Core). Divide o processo realizado por um step iniciando vrias Threads dele ao mesmo tempo. Reduz a mdia de tempo de acesso ao banco, compensando latncia de rede.

Reduza as roundtrips (idas e voltas) e a mdia de tempo de acesso ao banco de dados utilizando:
Tcnicas de cache. Multi Threading.

S porque funciona no significa que esteja bom.


Na construo de uma ETL, utilize de boas prticas de programao no caso de scripts. Evite muitos steps numa mesma transformation.

Evite o problemtico step JavaScript, ou construa um plugin.


Mesmo sendo a linguagem de script mais rpida para Java, ainda lento por ser linguagem de script. Use steps nativos sempre que possvel, o que resultar em ganho massivo de performance. Caso steps de clculos simples (Calculator) no for suficiente construa um plugin.

Kettle Performance Tunning


Por onde comear?

Kettle Performance Tunnig


Como identificar os Bottlenecks (Gargalos)

ROW1 ROW2 ROW5 ROW4 ROW6 ROW7 ROW3

Kettle Performance Tunnig


Como identificar os Bottlenecks (Gargalos)

O step com o maior input buffer size ser o mais lento. O Kettle possui monitoramento de performance, podemos identificar o gargalos observando o grfico gerado.

Kettle Performance Tunnig


Abstraindo o Buffer Size (RowSet)

A comunicao entre os steps feita atravs do buffer size. Quando o buffer est cheio, o step produtor espera at que tenha lugar para mais linhas no buffer.
BUFFER
ROW5

Buffer alocado para 5 rows

Step esperando para espao no buffer

ROW4 ROW3 ROW2 ROW1

ROW6

Kettle Performance Tunnig


Abstraindo o Buffer Size (RowSet)

A passagem de rows entre os steps feita atravs do buffer size. Quando o buffer est cheio, o step produtor espera at que tenha lugar para mais rows no buffer.
BUFFER
ROW5

Output buffer

ROW4 ROW3 ROW2 ROW1

Input buffer

ROW6

Performance por que importante?


Veja um exemplo:

Você também pode gostar