Conceitos básicos do suporte de gravação do Apache Iceberg no Amazon Redshift – Parte 2


Em Conceitos básicos do suporte de gravação do Apache Iceberg no Amazon Redshift – parte 1você aprendeu como criar Iceberg Apache tabelas e gravar dados diretamente de Redshift da Amazon para o seu lago de dados. Você configurou esquemas externos, criou tabelas em ambos Serviço de armazenamento simples da Amazon (Amazon S3) e Tabelas S3e executou operações INSERT enquanto mantinha a conformidade ACID (Atomicidade, Consistência, Isolamento, Durabilidade).

O Amazon Redshift agora oferece suporte a operações DELETE, UPDATE e MERGE para tabelas do Apache Iceberg armazenadas no Amazon S3 e em buckets de tabelas do Amazon S3. Com essas operações, você pode modificar dados em nível de linha, implementar padrões de upsert e gerenciar o ciclo de vida dos dados, mantendo a consistência transacional usando a sintaxe SQL acquainted. Você pode executar transformações complexas no Amazon Redshift e gravar resultados em tabelas do Apache Iceberg que outros mecanismos de análise gostam Amazon EMR ou Amazon Atenas pode consultar imediatamente.

Neste publish você trabalha com buyer e orders conjuntos de dados que foram criados e usados ​​​​no mencionado anteriormente publicar para demonstrar esses recursos em um cenário de sincronização de dados.

Visão geral da solução

Esta solução demonstra operações DELETE, UPDATE e MERGE para tabelas Apache Iceberg no Amazon Redshift usando um padrão comum de sincronização de dados: manutenção de registros de clientes e dados de pedidos em tabelas de preparação e produção. O fluxo de trabalho inclui três operações principais:

  • EXCLUIR – Remover registros de clientes com base em solicitações de cancelamento
  • ATUALIZAR – Modificar informações existentes do cliente
  • MESCLAR – Sincronize os dados do pedido entre as tabelas de preparação e de produção usando padrões de upsert
Conceitos básicos do suporte de gravação do Apache Iceberg no Amazon Redshift – Parte 2

Figura 1: visão geral da solução

A solução usa uma tabela intermediária (orders_stg) armazenado em um bucket de tabela S3 para dados recebidos e tabelas de referência (customer_opt_out) no Amazon Redshift para gerenciar operações do ciclo de vida de dados. Com essa arquitetura, você pode processar alterações com eficiência e, ao mesmo tempo, manter a conformidade com ACID em ambos os tipos de armazenamento.

Pré-requisitos

Para este passo a passo, você deve ter concluído as etapas de configuração de Conceitos básicos do suporte de gravação do Apache Iceberg no Amazon Redshift – parte 1incluindo:

  • Crie um knowledge warehouse do Amazon Redshift (provisionado ou Sem servidor)
  • Configure a função do IAM necessária (RedshifticebergRole) com permissões apropriadas
  • Crie um bucket do Amazon S3 e um bucket de tabela do S3
  • Configurar o banco de dados do AWS Glue Information Catalog e configurar o acesso
  • Configurar permissões do AWS Lake Formation
  • Crie o buyer Tabela Apache Iceberg em buckets padrão do Amazon S3 com dados de amostra do cliente
  • Crie a tabela de pedidos Apache Iceberg em buckets de tabela do Amazon S3 com dados de pedido de amostra
  • Armazém de dados do Amazon Redshift ativado p200 versão ou superior

Preparação de dados

Nesta seção, você configura os dados de amostra necessários para demonstrar as operações MERGE, UPDATE e DELETE. Para preparar seus dados, conclua as seguintes etapas:

  1. Faça login no Amazon Redshift usando Question Editor V2 com o usuário federado opção.
  2. Crie o orders_stg e customer_opt_out tabelas com dados de amostra:
CREATE TABLE "iceberg-write-blog@s3tablescatalog".iceberg_write_namespace.orders_stg
(
customer_id BIGINT,
order_id BIGINT,
Total_order_amt DECIMAL(10,2),
Total_order_tax_amt REAL,
tax_pct DOUBLE PRECISION,
order_date DATE,
order_created_at_tz TIMESTAMPTZ,
is_active_ind BOOLEAN
)
USING ICEBERG;
INSERT INTO "iceberg-write-blog@s3tablescatalog".iceberg_write_namespace.orders_stg
(order_date, order_id, customer_id, total_order_amt, total_order_tax_amt, tax_pct, order_created_at_tz, is_active_ind)
VALUES
('2024-11-11', 1016, 10, 167.45, 13.40, 0.08, '2024-11-11 06:55:00-06:00', true),
('2024-11-12', 1017, 15, 34.99, 2.80, 0.08, '2024-11-12 23:30:30-06:00', true),
('2024-11-09', 1014, 9, 500.60, 56.80, 0.09, '2024-11-09 16:20:55-06:00', true),
('2024-11-10', 1015, 5, 329.85, 33.51, 0.08, '2024-11-10 11:45:30-06:00', true);
choose * from "iceberg-write-blog@s3tablescatalog".iceberg_write_namespace.orders_stg;

Figura 2: conjunto de resultados order_stg

Figura 2: conjunto de resultados order_stg

CREATE TABLE dev.public.customer_opt_out
(
customer_id bigint,
customer_name varchar,
opt_out_ind char(1),
cust_rec_upd_ind char(1)
);
INSERT INTO dev.public.customer_opt_out VALUES
(9, 'Customer9 Martinez', 'Y', 'N'),
(12, 'Customer12 Thomas', 'Y', 'N'),
(13, 'Customer13 Albon', 'N', 'Y'),
(14, 'Customer14 Oscar', 'N', 'Y');
choose * from dev.public.customer_opt_out;

Figura 3: conjunto de resultados customer_opt_out

Figura 3: conjunto de resultados customer_opt_out

Agora você pode usar o orders_stg e customer_opt_out tabelas para demonstrar operações de manipulação de dados no orders e buyer tabelas criadas na seção de pré-requisitos.

MESCLAR

MESCLAR insere, atualiza ou exclui condicionalmente linhas em uma tabela de destino com base nos resultados de uma junção com uma tabela de origem. Você pode usar MESCLAR para sincronizar duas tabelas inserindo, atualizando ou excluindo linhas em uma tabela com base nas diferenças encontradas na outra tabela.

Para realizar uma operação MERGE:

  1. Verifique se os dados atuais no pedidos tabela para IDs de pedido 1014, 1015, 1016 e 1017. Você carregou esses dados de amostra em Parte 1:
choose * from "iceberg-write-blog@s3tablescatalog".iceberg_write_namespace.orders
the place order_id in (1014,1015,1016,1017);

Figura 4: dados de pedidos para pedidos existentes em pedidos_stg

Figura 4: dados de pedidos para pedidos existentes em pedidos_stg

O pedidos contém linhas existentes para os IDs de pedido 1014 e 1015.

  1. Execute o seguinte MESCLAR operação usando id_pedido como a coluna-chave para combinar as linhas entre os pedidos e pedidos_stg tabelas:
MERGE INTO "iceberg-write-blog@s3tablescatalog".iceberg_write_namespace.orders
USING "iceberg-write-blog@s3tablescatalog".iceberg_write_namespace.orders_stg
ON orders.order_id = orders_stg.order_id
WHEN MATCHED THEN UPDATE 
SET
customer_id         = orders_stg.customer_id,
total_order_amt     = orders_stg.total_order_amt,
total_order_tax_amt = orders_stg.total_order_tax_amt,
tax_pct             = orders_stg.tax_pct,
order_date          = orders_stg.order_date,
order_created_at_tz = orders_stg.order_created_at_tz,
is_active_ind       = orders_stg.is_active_ind
WHEN NOT MATCHED THEN INSERT
VALUES 
(orders_stg.customer_id,orders_stg.order_id,orders_stg.total_order_amt,orders_stg.total_order_tax_amt,orders_stg.tax_pct,orders_stg.order_date,orders_stg.order_created_at_tz,orders_stg.is_active_ind);

A operação atualiza as linhas existentes (1014 e 1015) e insere novas linhas para IDs de pedidos que não existem no pedidos tabela (1016 e 1017).

  1. Verifique os dados atualizados no pedidos mesa:
choose * from "iceberg-write-blog@s3tablescatalog".iceberg_write_namespace.orderswhere order_id in (1014,1015,1016,1017);

Figura 5: dados mesclados sobre pedidos deorders_stg

Figura 5: dados mesclados sobre pedidos deorders_stg

O MESCLAR operação executa as seguintes alterações:

  • Atualiza linhas existentes – Os IDs de pedido 1014 e 1015 foram atualizados total_pedido_amt e total_pedido_imposto_amt valores do pedidos_stg mesa
  • Insere novas linhas – Os IDs de pedido 1016 e 1017 são inseridos porque não existem no pedidos mesa

Isso demonstra o padrão upsert, onde MESCLAR atualiza ou insere linhas condicionalmente com base na coluna-chave correspondente.

ATUALIZAR

ATUALIZAR modifica linhas existentes em uma tabela com base em condições ou valores especificados de outra tabela.

Atualize o buyer Tabela Apache Iceberg usando dados do customer_opt_out Tabela nativa do Amazon Redshift. O ATUALIZAR operação usa o cust_rec_upd_ind coluna como um filtro, atualizando apenas as linhas onde o valor é ‘Y’.

Para realizar uma operação UPDATE:

  1. Verifique a corrente customer_name valores para IDs de cliente 13 e 14 em customer_opt_out e buyer (carregou esses dados de amostra em Parte 1) tabelas:
choose * from dev.public.customer_opt_out
the place cust_rec_upd_ind = 'Y';

Figura 6: verifique os dados de clientes existentes em customer_opt_out

Figura 6: verifique os dados de clientes existentes em customer_opt_out

choose customer_id,customer_name from dev.demo_iceberg.buyer
the place customer_id in(13,14);

Figura 7: verifique o nome do cliente existente para clientes de customer_opt_out

Figura 7: verifique o nome do cliente existente para clientes de customer_opt_out

  1. Execute o seguinte ATUALIZAR operação para modificar nomes de clientes com base no cust_rec_upd_ind de customer_opt_out:
UPDATE dev.demo_iceberg.customerSET customer_name = customer_opt_out.customer_name
FROM dev.public.customer_opt_out
WHERE customer_opt_out.cust_rec_upd_ind = 'Y'and buyer.customer_id = customer_opt_out.customer_id;

  1. Verifique as alterações para os IDs de cliente 13 e 14:
choose customer_id,customer_name from dev.demo_iceberg.buyer the place customer_id in(13,14) order by 1;

Figura 8: nomes de clientes atualizados na tabela de clientes

Figura 8: nomes de clientes atualizados na tabela de clientes

O ATUALIZAR operação modifica o customer_name valores baseados na condição de junção com o customer_opt_out mesa. Os IDs de cliente 13 e 14 agora têm nomes atualizados (Customer13 Albon e Customer14 Oscar).

EXCLUIR

EXCLUIR take away linhas de uma tabela com base em condições especificadas. Sem um ONDE cláusula, EXCLUIR take away todas as linhas da tabela.

Excluir linhas do buyer Tabela Apache Iceberg usando dados do customer_opt_out Tabela nativa do Amazon Redshift. O EXCLUIR operação usa o opt_out_ind coluna como filtro, removendo apenas as linhas onde o valor é ‘Y’.

Para executar uma operação DELETE:

  1. Verifique os dados do indicador de opt-out no customer_opt_out mesa:
choose * from dev.public.customer_opt_out
the place opt_out_ind = 'Y';

Figura 9: verificar registros de clientes para cancelamento

Figura 9: verificar registros de clientes para cancelamento

  1. Verifique os dados atuais do cliente para os IDs de cliente 9 e 12:
choose * from dev.demo_iceberg.customerwhere customer_id in(9,12);

Figura 0: verifique os dados dos clientes existentes na tabela de clientes para cancelamento

Figura 10: verifique os dados dos clientes existentes na tabela de clientes para cancelamento

  1. Revise o plano de execução da consulta:
EXPLAINDELETE FROM demo_iceberg.customerUSING public.customer_opt_out
WHERE buyer.customer_id = customer_opt_out.customer_id
AND customer_opt_out.opt_out_ind = 'Y';

Figura 1: plano de consulta para a consulta DELETEO plano de execução mostra verificações do Amazon S3 em busca de tabelas no formato Apache Iceberg, indicando que o Amazon Redshift remove linhas diretamente do bucket do Amazon S3.

Figura 11: plano de consulta para a consulta DELETE. O plano de execução mostra verificações do Amazon S3 em busca de tabelas no formato Apache Iceberg, indicando que o Amazon Redshift take away linhas diretamente do bucket do Amazon S3.

  1. Execute o seguinte EXCLUIR operação:
DELETE FROM demo_iceberg.buyer
USING public.customer_opt_out
WHERE buyer.customer_id = customer_opt_out.customer_id
AND customer_opt_out.opt_out_ind = 'Y';

  1. Verifique se as linhas foram removidas:
choose * from dev.demo_iceberg.buyer the place customer_id in(9,12);

Figura 2: conjunto de resultados da tabela de clientes para cancelamento de cliente após exclusão

Figura 12: conjunto de resultados da tabela de clientes para cancelamento de cliente após exclusão

A consulta não retorna nenhuma linha, confirmando que os IDs de cliente 9 e 12 foram excluídos com êxito do buyer mesa.

Melhores práticas

Depois de realizar vários ATUALIZAR ou EXCLUIR operações, considere executar a manutenção da tabela para otimizar o desempenho de leitura:

  • Para tabelas do AWS Glue – Use otimizadores de tabela AWS Glue. Para obter mais informações, consulte Otimizadores de tabela no Guia do desenvolvedor do AWS Glue.
  • Para tabelas S3 – Use operações de manutenção de tabelas S3. Para obter mais informações, consulte Manutenção de tabelas S3 no Guia do usuário do Amazon S3.

A manutenção de tabelas mescla e compacta arquivos de exclusão gerados por operações Merge-on-Learn, melhorando o desempenho da consulta para leituras subsequentes.

Conclusão

Você pode usar o suporte do Amazon Redshift para operações DELETE, UPDATE e MERGE em tabelas Apache Iceberg para criar arquiteturas de dados que combinem o desempenho do warehouse com a escalabilidade do knowledge lake. Você pode modificar os dados no nível da linha enquanto mantém a conformidade com ACID, oferecendo a mesma flexibilidade com tabelas do Apache Iceberg que você tem com tabelas nativas do Amazon Redshift.

Comece:


Sobre os autores

Sanket Hase

Sanket Hase

Sanket é gerente de engenharia da equipe Amazon Redshift, liderando equipes de execução de consultas nas áreas de análise de knowledge lake, codesign de {hardware} e software program e execução de consultas vetorizadas.

Raghu Kuppala

Raghu Kuppala

Raghu é um arquiteto de soluções especialista em análise com experiência em bancos de dados, armazenamento de dados e espaço analítico. Fora do trabalho, ele gosta de experimentar diferentes culinárias e de passar tempo com a família e amigos.

Ritesh Sinha

Ritesh é um arquiteto de soluções especialista em análise baseado em São Francisco. Ele tem ajudado clientes a criar soluções escaláveis ​​de armazenamento de dados e large knowledge há mais de 16 anos. Ele adora projetar e construir soluções completas e eficientes na AWS. Nas horas vagas, ele adora ler, caminhar e fazer ioga.

Sundeep Kumar

Sundeep Kumar

Sundeep é arquiteto de soluções especialista sênior na Amazon Net Companies (AWS), ajudando clientes a construir plataformas e soluções de knowledge lake e análise. Quando não está construindo e projetando knowledge lakes, Sundeep gosta de ouvir música e tocar violão.

Xiening Dai

Xiening Dai

Xiening é engenheiro de software program principal e trabalha em processamento de consulta Redshift e Information Lake.

Ebrahim Salim Hirani

Abraão é um engenheiro de software program que trabalha em processamento de consultas Redshift e Information Lake.

Sherry Xiao

Sherry Xiao é um engenheiro de software program que trabalha na equipe Redshift Question Engine Execution e Information Lake.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *