2. Amazon Redshift
Tópicos
Data Lake
Amazon Redshift
Visão geral da arquitetura
Arquitetura do cluster
A abordagem colunar
Distkey, Sortkey e Tunning
Spectrum
Um caso de uso
Tópicos relevantes
Perguntas frequentes
3. Amazon Redshift
Data Lake
Um Data Lake é um repositório centralizado que permite
armazenar [todos ?] os dados estruturados e não
estruturados em qualquer[?] escala e consumi-los em
diferentes tipos de análise ou ferramentas - de painéis e
visualizações a processamento de big data, análise em
tempo real e aprendizado de máquina para orientar
melhores decisões
4. Amazon Redshift
Data Lake
• Dados estruturados
• Dados semi ou não estruturados
• csv, txt, pdf
• Vídeo
• Som
• Imagem
6. Amazon Redshift
Redshift
O Amazon Redshift é um data warehouse rápido e
gerenciável que torna simples e econômica a análise de
todos os seus dados usando ferramentas SQL padrão e
ferramentas de Business Intelligence.
Ele permite executar consultas analíticas complexas em
petabytes de dados estruturados usando otimização
sofisticada de querys, armazenamento colunar de alta
performance e execução maciçamente paralela de
consultas
7. Amazon Redshift
Redshift
:: Características importantes ::O Amazon Redshift é um data warehouse rápido e
gerenciável que torna simples e econômica a análise de
todos os seus dados usando ferramentas SQL padrão e
ferramentas de Business Intelligence.
Ele permite executar consultas analíticas complexas em
petabytes de dados estruturados usando otimização
sofisticada de querys, armazenamento colunar de alta
performance e execução maciçamente paralela de
consultas
10. Amazon Redshift
Redimensionamento Elástico (Elastic Resize)
O Redshift atualiza o snapshot no S3 com os dados
mais recentes
Novos nós são adicionados (scaling up) ou removidos
(scaling down) durante esse período
O cluster está disponível para queries de leitura e
escrita. Queries que estão em espera são alocadas
em uma fila automaticamente
Importante
As opções do Elastic Resize dependem do tipo de nó
12. Amazon Redshift
Distkey e Tipos de Distribuição
Distribuição uniforme
Otimização de joins
Otimização de agregações
Tabelas medias ou
pequenas (<2-3mb)
(ex. Dimensões)
Quando não conseguimos
definir uma distribuição
adequada
O Amazon Redshift distribui os registros em todo o
cluster de acordo com o estilo de distribuição e com
base no valor da coluna DISTKEY, que
apropriadamente coloca uma quantidade semelhante
de linhas em cada fatia do nó.
Se não encontramos a coluna mais apropriada para
distribuição, podemos ‘simular’ a partir de uma coluna
de data, por exemplo:
(concat('1',to_char(dt_pedido,'YYDDD')))::int
Neste caso, pega a data do pedido e converte para o
format Gregoriano
13. Amazon Redshift
A abordagem colunar
Maiores informações em
https://docs.aws.amazon.com/pt_br/redshift/latest/dg/c_columnar_storage_disk_mem_mgmnt.html
14. Amazon Redshift
Zone Maps
(A)
select count(1)
from order_items
where placed_at between '2018-1-1'
and '2019-1-1'
(B)
select
blocknum as block,
minvalue as min,
maxvalue as max
from stv_blocklist, stv_tbl_perm
where stv_blocklist.tbl = stv_tbl_perm.id
and stv_blocklist.slice = stv_tbl_perm.slice
and stv_tbl_perm.name = 'order_items'
and stv_blocklist.col = 1 /* placed_at */
order by blocknum
15. Amazon Redshift
Sortkeys
O Amazon Redshift armazena os dados no cluster de acordo com a chave de classificação definida em cada tabela e o
otimizador de consultas usa esta ordenação para determinar o melhor plano de execução.
Se Sortkey for definido em nível de tabela, o número máximo de colunas permitidas é 400.
Melhores práticas para definição de uma Sortkey:
1. Se dados recentes forem consultados com frequência, considere utilizar uma coluna timestamp como chave principal
2. Se uma coluna for usada com frequência em clausulas where, considere utilizar essa coluna na Sortkey
3. Colunas frequentemente utilizadas em "join" podem ser boas candidatas a Sortkey
Maiores informações em
https://aws.amazon.com/pt/blogs/big-data/amazon-redshift-engineerings-advanced-table-design-playbook-compound-and-interleaved-sort-keys/
16. Amazon Redshift
Sortkeys
Tipos de Sortkey
Compound: Formada por todas as colunas definidas na Sortkey.
Chaves de classificação compostas tendem a acelerar “joins”,
operações de agregação e “order by” ou funções de janela que
utilizem “partition by”
Interleaved: Aplica peso igual a todas as colunas da chave.
Contudo, tem um alto custo de manutenção e pode comprometer o
desempenho em consultas onde não utilizamos todas as colunas
na clausula “where”. Portanto, usemos com cuidado.
17. Amazon Redshift
Tunning
Analyze <type> <Table> Atualiza as estatísticas da tabela
Ex: analyze [compression] us_experimento.sales;
Vaccum (Recuperação de blocos e reordenação)
Vacuum full <tabela>
vacuum delete <tabela> : limpeza física de registros deletados
Vacuum sort only <tabela> : reorganização de sortkeys
** Considere a criação de um script que faça Vacuum (delete|sort only) e Analyze em períodos de pouca
utilização do BD. Em nossa arquitetura, criamos um script que executa Vacuum e Analyze para todas as
DIMENSÕES, iniciando quando a última tabela é atualizada (na madrugada).
Importante: Isso não é uma regra e pode se adequar para cada ambiente
18. Amazon Redshift
Tunning
Exemplo: Analisando a compressão da tabela RS_ORDERS
Note o encode das colunas na criação da tabela
Resultado do analyze
% aproximado de ganho de compactação
19. Amazon Redshift
Tunning
Exemplo: Analisando a compressão da tabela RS_ORDERS
Recriação da tabela com o encode sugerido pelo analyze
Resultado do analyze após recriar a tabela
Note o % estimado redução. Próximo de 0 indica que está com o
encode adequado
20. Amazon Redshift
Tunning select i.schema as schema_location,
i.table as table_name,
i.encoded as are_columns_encoded,
i.diststyle as distyle_and_key,
i.sortkey1 as first_sortkey,
i.sortkey1_enc as sortkey_compression,
i.sortkey_num as no_sort_keys,
i.skew_sortkey1 as sortkey_skew_ratio,
i.size as size_in_blocks_mb,
i.tbl_rows as total_rows,
i.skew_rows as row_skew_ratio,
i.pct_used as percent_space_used,
i.unsorted as percent_unsorted,
i.stats_off as stats_needed
from svv_table_info i
where i.schema = '<schemaname>'
and i.table = '<tablename>'
21. Amazon Redshift
Ainda sobre Tunning
WLM – Work Load Management (Filas de execução)
Atua na coordenação da concorrência de execução das consultas
e a respectiva priorização
22. Amazon Redshift
Ainda sobre Tunning
WLM – Work Load Management (Filas de execução)
Exemplo de filas
Fila 1 com 60% de recursos do cluster para o grupo Tableau
File 2 com 40% de recursos do cluster para o grupo Dev
23. Amazon Redshift
Tunning
Resumo
• COPY (analisa e compacta tabelas automaticamente )
• DISTKEY e SORTKEY influenciam o desempenho
• DISTKEY “ruim” induz cargas de trabalho desequilibradas (Skew)
• Atenção no uso das chave de classificação (SORTKEY)
(Alguns) Tipos de Compactação de colunas
• Raw Encoding
• Zstandard (ZSTD) Encoding
• Byte-Dictionary Encoding
• LZO Encoding
Pontos chave
• Desenho de tabelas
• Tamanho e tipo de dado (Coluna)
• Tipo de compactação (encoding)
• Seleção de Distkey
• Seleção de Sortkey
• Execução de Vacuum
• Execução de Analyze
24. Amazon Redshift
O comando Copy
Carrega dados para uma tabela do Redshift a partir de arquivos
localizados em um bucket do Amazon S3. O comando COPY
espera que os dados de origem estejam em arquivos de
texto UTF-8 delimitados por um caractere. O delimitador
padrão é um caractere de pipe ( | )
Maiores informações em
https://docs.aws.amazon.com/pt_br/redshift/latest/dg/r_COPY.html
copy
orders from 's3://redshift-immersionday-labs/data/orders/orders.tbl'
iam_role 'arn:aws:iam::[Your-AWS_Account_Id]:role/[Your-Redshift-Role]'
region 'us-west-2' lzop delimiter '|' COMPUPDATE PRESET;
25. Amazon Redshift
O comando Copy
Maiores informações em
https://docs.aws.amazon.com/pt_br/redshift/latest/dg/r_COPY.html
copy
orders from 's3://redshift-immersionday-labs/data/orders/orders.tbl'
iam_role 'arn:aws:iam::[Your-AWS_Account_Id]:role/[Your-Redshift-Role]'
region 'us-west-2' lzop delimiter '|' COMPUPDATE PRESET;
Execute o este SQL para
ver os erros gerados a partir de um COPY
select *
from stl_load_errors
where starttime >= <data_inicial>
and starttime <= <data_final>
order by starttime desc
Carrega dados para uma tabela do Redshift a partir de arquivos
localizados em um bucket do Amazon S3. O comando COPY
espera que os dados de origem estejam em arquivos de
texto UTF-8 delimitados por um caractere. O delimitador
padrão é um caractere de pipe ( | )
26. Amazon Redshift
Spectrum
O Redshift Spectrum simplifica o processo de exploração
de arquivos estruturados e semiestruturados (dados
externos) armazenados no S3.
A partir do Spectrum é possível “rodar” consultas SQL
contra arquivos no S3 como se estes fossem tabelas em
um banco de dados
Maiores informações em
https://docs.aws.amazon.com/pt_br/redshift/latest/dg/c-using-spectrum.html#c-spectrum-overview
27. Amazon Redshift
Spectrum
Ex. Executar um SUM
1. Select sum(<coluna>)
from s3.tabela
1. Query compilada pelo leader
node
2. Plano de execução é enviado
aos nós de computação
3. Nós obtém as partições dos
dados a partir do catálogo de
dados
4. Nós enviam requests para o
engine do Spectrum
5. Spectrum escaneia o S3
31. Amazon Redshift
Perguntas frequentes
1) select current_time,
c.relname,
l.database,
l.transaction,
l.pid,
a.usename,
l.mode,
l.granted,
'SELECT pg_terminate_backend('||l.pid ||')'
from pg_locks l
join pg_catalog.pg_class c ON c.oid = l.relation
join pg_catalog.pg_stat_activity a ON a.procpid = l.pid
where l.pid <> pg_backend_pid();
2) SELECT pg_terminate_backend(<PID>);
32. Amazon Redshift
Perguntas frequentes
unload ('
select [coluna-1],
[coluna-2],
[coluna-N]
from tabela'
)
to 's3://datalake/temporarios/tabela.csv'
iam_role 'arn:aws:iam::123456789000:role/Redshift-DL-01'
delimiter as ';'
parallel off
header;
33. Amazon Redshift
João G. Gutheil
Coordenador de BI -Arezzo&Co
Vice-Coordenador do Grupo de Usuários de BI - GUBI - Sucesu/RS
Espec. em Gestão do Conhecimento e Int. Estratégica – UCS
joao.gutheil@arezzo.com.br
jgutheil@gmail.com
https://www.linkedin.com/in/joaogutheil/