Atualização incremental para visualizações materializadas do Amazon Redshift em tabelas de information lake


Redshift da Amazon é um information warehouse em nuvem rápido e totalmente gerenciado que torna econômica a análise de seus dados usando SQL padrão e ferramentas de enterprise intelligence. Você pode usar o Amazon Redshift para analisar dados estruturados e semiestruturados e consultar information lakes e bancos de dados operacionais de forma integrada, usando {hardware} projetado pela AWS e ajuste baseado em machine studying automatizado (ML) para oferecer desempenho de preço de alto nível em escala.

Amazon Redshift oferece desempenho de preço pronto para uso. No entanto, ele também oferece otimizações adicionais que você pode usar para melhorar ainda mais esse desempenho e obter tempos de resposta de consulta ainda mais rápidos do seu information warehouse.

Uma dessas otimizações para reduzir o tempo de execução da consulta é pré-calcular os resultados da consulta na forma de um visão materializada. Visualizações materializadas no Redshift aceleram a execução de consultas em tabelas grandes. Isto é útil para consultas que envolvem agregações e junções de múltiplas tabelas. As visualizações materializadas armazenam um conjunto de resultados pré-computados dessas consultas e também oferecem suporte ao recurso de atualização incremental para tabelas locais.

Os clientes usam tabelas de information lake para obter armazenamento econômico e interoperabilidade com outras ferramentas. Com formatos de tabela abertos (OTFs), como o Apache Iceberg, os dados são continuamente adicionados e atualizados.

O Amazon Redshift agora oferece a capacidade de atualizar gradativamente suas visualizações materializadas em tabelas de information lake, incluindo arquivos abertos e formatos de tabela, como Apache Iceberg.

Nesta postagem, mostraremos passo a passo quais operações são suportadas em formatos de arquivo abertos e tabelas de information lake transacionais para permitir a atualização incremental da visualização materializada.

Pré-requisitos

Para percorrer os exemplos nesta postagem, você precisa dos seguintes pré-requisitos:

  1. Você pode testar a atualização incremental de visualizações materializadas em tabelas de information lake padrão em sua conta usando um information warehouse e um information lake existentes do Redshift. No entanto, se quiser testar os exemplos usando dados de amostra, baixe os dados de amostra. Os arquivos de amostra são ‘|’ arquivos de texto delimitados.
  2. Um AWS Identification and Entry Administration (IAM) função anexada ao Amazon Redshift para conceder o permissões mínimas obrigado a usar Espectro Redshift com Serviço de armazenamento simples da Amazon (Amazon S3) e Cola AWS.
  3. Defina a função do IAM como padrão função no Amazon Redshift.

Atualização incremental de visualização materializada em tabelas de information lake padrão

Nesta seção, você aprenderá como criar e atualizar de forma incremental visualizações materializadas no Amazon Redshift em arquivos de texto padrão no Amazon S3, mantendo a atualização dos dados com uma abordagem econômica.

  1. Carregar o primeiro arquivo, buyer.tbl.1baixado do Pré-requisitos seção no bucket S3 desejado com o prefixo buyer.
  2. Conecte-se ao grupo de trabalho sem servidor do Amazon Redshift ou ao cluster provisionado do Redshift usando Editor de consultas v2.
  3. Crie um esquema externo.
    create exterior schema datalake_mv_demo
    from information catalog   
    database 'datalake-mv-demo'
    iam_role default;

    Atualização incremental para visualizações materializadas do Amazon Redshift em tabelas de information lake

  4. Crie uma tabela externa chamada buyer no esquema externo datalake_mv_demo criado na etapa anterior.
    create exterior desk datalake_mv_demo.buyer(
            c_custkey int8,
            c_name varchar(25),
            c_address varchar(40),
            c_nationkey int4,
            c_phone char(15),
            c_acctbal numeric(12, 2),
            c_mktsegment char(10),
            c_comment varchar(117)
        ) row format delimited fields terminated by '|' saved as textfile location 's3:///buyer/';

  5. Valide os dados de amostra no cliente externo.
    choose * from datalake_mv_demo.buyer;

  6. Crie uma visão materializada na tabela externa.
    CREATE MATERIALIZED VIEW customer_mv 
    AS
    choose * from datalake_mv_demo.buyer;

  7. Valide os dados na visão materializada.
    choose * from customer_mv restrict 5;

  8. Carregar um novo arquivo buyer.tbl.2 no mesmo bucket S3 e buyer localização do prefixo. Este arquivo contém um registro adicional.
  9. Usando Editor de consultas v2 atualize a visualização materializada customer_mv.
    REFRESH MATERIALIZED VIEW customer_mv;

  10. Valide a atualização incremental da visualização materializada quando o novo arquivo for adicionado.
    choose mv_name, standing, start_time, end_time
    from SYS_MV_REFRESH_HISTORY
    the place mv_name="customer_mv"
    order by start_time DESC;

  11. Recuperar o número atual de linhas presentes na visualização materializada customer_mv.
    choose rely(*) from customer_mv;

  12. Excluir o arquivo existente buyer.tbl.1 do mesmo bucket S3 e prefixo buyer. Você só deveria ter buyer.tbl.2 no buyer prefixo do seu bucket S3.
  13. Usando Editor de consultas v2atualize a visualização materializada customer_mv de novo.
    REFRESH MATERIALIZED VIEW customer_mv;

  14. Verifique se a visualização materializada é atualizada incrementalmente quando o arquivo existente é excluído.
    choose mv_name, standing, start_time, end_time
    from SYS_MV_REFRESH_HISTORY
    the place mv_name="customer_mv"
    order by start_time DESC;

  15. Recuperar a contagem de linhas atual na visualização materializada customer_mv. Deve agora ter um registro como presente no buyer.tbl.2 arquivo.
    choose rely(*) from customer_mv;

  16. Modifique o conteúdo do baixado anteriormente buyer.tbl.2 arquivo alterando a chave do cliente de 999999999 para 111111111.
  17. Salve o arquivo modificado e carregue-o novamente no mesmo bucket do S3, substituindo o arquivo existente no buyer prefixo.
  18. Usando Editor de consultas v2atualize a visualização materializada customer_mv
    REFRESH MATERIALIZED VIEW customer_mv;

  19. Valide se a visualização materializada foi atualizada incrementalmente depois que os dados foram modificados no arquivo.
    choose mv_name, standing, start_time, end_time
    from SYS_MV_REFRESH_HISTORY
    the place mv_name="customer_mv"
    order by start_time DESC;

  20. Valide se os dados na visualização materializada refletem as alterações de dados anteriores 999999999 para 111111111.
    choose * from customer_mv;

Atualização incremental de visualização materializada em tabelas de information lake do Apache Iceberg

Iceberg Apache é um formato de tabela aberta de information lake que está se tornando rapidamente um padrão do setor para gerenciamento de dados em information lakes. O Iceberg apresenta novos recursos que permitem que vários aplicativos trabalhem juntos nos mesmos dados de maneira transacionalmente consistente.

Nesta seção, exploraremos como Redshift da Amazon pode integrar-se perfeitamente com o Apache Iceberg. Você pode usar essa integração para criar visualizações materializadas e atualizá-las de forma incremental usando uma abordagem econômica, mantendo a atualização dos dados armazenados.

  1. Faça login no Console de gerenciamento da AWSVá para Amazon Atenase execute o SQL a seguir para criar um banco de dados em um catálogo do AWS Glue.
    create database iceberg_mv_demo;

  2. Crie uma nova tabela Iceberg
    create desk iceberg_mv_demo.class (
      catid int ,
      catgroup string ,
      catname string ,
      catdesc string)
      PARTITIONED BY (catid, bucket(16,catid))
      LOCATION 's3:///iceberg/'
      TBLPROPERTIES (
      'table_type'='iceberg',
      'write_compression'='snappy',
      'format'='parquet');

  3. Adicione alguns dados de amostra a iceberg_mv_demo.class.
    insert into iceberg_mv_demo.class values
    (1, 'Sports activities', 'MLB', 'Main League Basebal'),
    (2, 'Sports activities', 'NHL', 'Nationwide Hockey League'),
    (3, 'Sports activities', 'NFL', 'Nationwide Soccer League'),
    (4, 'Sports activities', 'NBA', 'Nationwide Basketball Affiliation'),
    (5, 'Sports activities', 'MLS', 'Main League Soccer');

  4. Valide os dados de amostra em iceberg_mv_demo.class.
    choose * from iceberg_mv_demo.class;

  5. Conecte-se ao grupo de trabalho sem servidor do Amazon Redshift ou ao cluster provisionado do Redshift usando Editor de consultas v2.
  6. Crie um esquema externo
    CREATE exterior schema iceberg_schema
    from information catalog
    database 'iceberg_mv_demo'
    area 'us-east-1'
    iam_role default;

  7. Consulte os dados da tabela Iceberg do Amazon Redshift.
    SELECT *  FROM "dev"."iceberg_schema"."class";

  8. Crie uma visão materializada usando o esquema externo.
    create MATERIALIZED view mv_category as
    choose  * from
    "dev"."iceberg_schema"."class";

  9. Valide os dados na visão materializada.
    choose  * from
    "dev"."iceberg_schema"."class";

  10. Usando Amazon Atenasmodifique a tabela Iceberg iceberg_mv_demo.class e insira dados de amostra.
    insert into class values
    (12, 'Concert events', 'Comedy', 'All stand-up comedy performances'),
    (13, 'Concert events', 'Different', 'Normal');

  11. Usando Editor de consultas v2atualize a visualização materializada mv_category.
    Refresh  MATERIALIZED view mv_category;

  12. Valide a atualização incremental da visualização materializada depois que os dados adicionais forem preenchidos na tabela Iceberg.
    choose mv_name, standing, start_time, end_time
    from SYS_MV_REFRESH_HISTORY
    the place mv_name="mv_category"
    order by start_time DESC;

  13. Usando Amazon Atenasmodifique a tabela Iceberg iceberg_mv_demo.class excluindo e atualizando registros.
    delete from iceberg_mv_demo.class
    the place catid = 3;
     
    replace iceberg_mv_demo.class
    set catdesc="American Nationwide Basketball Affiliation"
    the place catid=4;

  14. Valide os dados de amostra em iceberg_mv_demo.class para confirmar isso catid=4 foi atualizado e catid=3 foi excluído da tabela.
    choose * from iceberg_mv_demo.class;

  15. Usando Editor de consultas v2Atualize a visão materializada mv_category.
    Refresh  MATERIALIZED view mv_category;

  16. Valide a atualização incremental da visualização materializada depois que uma linha foi atualizada e outra foi excluída.
    choose mv_name, standing, start_time, end_time
    from SYS_MV_REFRESH_HISTORY
    the place mv_name="mv_category"
    order by start_time DESC;

Melhorias de desempenho

Para entender as melhorias de desempenho da atualização incremental em relação à recomputação completa, usamos o padrão do setor Benchmark TPC-DS usando conjuntos de dados de 3 TB para tabelas Iceberg configuradas em copy-on-write. Em nosso benchmark, as tabelas de fatos são armazenadas no Amazon S3, enquanto as tabelas de dimensões estão no Redshift. Nós criamos 34 visualizações materializadas representando diferentes casos de uso de clientes em um cluster provisionado Redshift de tamanho ra3.4xl com 4 nós. Nós aplicamos 1% inserções e exclusões em tabelas de fatos, ou seja, tabelas store_sales, catalog_sales e web_sales. Executamos as inserções e exclusões com Spark SQL no EMR sem servidor. Atualizamos todas as 34 visualizações materializadas usando atualização incremental e latências de atualização medidas. Repetimos o experimento usando recomputação completa.

Nossos experimentos mostram que a atualização incremental proporciona ganhos substanciais de desempenho em relação à recomputação completa. Após as inserções, a atualização incremental foi 13,5X mais rápido em média, do que a recomputação completa (máximo 43,8X, mínimo 1,8X). Após exclusões, a atualização incremental foi 15X mais rápido em média (máximo 47X, mínimo 1,2X). Os gráficos a seguir ilustram a latência da atualização.

Inserções

Exclui

Limpar

Quando terminar, remova todos os recursos que não são mais necessários para evitar cobranças contínuas.

  1. Execute o script a seguir para limpar os objetos do Amazon Redshift.
    DROP  MATERIALIZED view mv_category;
    
    DROP  MATERIALIZED view customer_mv;

  2. Execute o script a seguir para limpar as tabelas do Apache Iceberg usando Amazon Atenas.
    DROP  TABLE iceberg_mv_demo.class;

Conclusão

As visualizações materializadas no Amazon Redshift podem ser uma ferramenta de otimização poderosa. Com a atualização incremental de visualizações materializadas em tabelas de information lake, você pode armazenar resultados pré-calculados de suas consultas em uma ou mais tabelas base, fornecendo uma abordagem econômica para manter dados atualizados. Incentivamos você a atualizar suas cargas de trabalho de information lake e usar o recurso de visualização materializada incremental. Se você é novo no Amazon Redshift, experimente o Tutorial de primeiros passos e use o teste gratuito para criar e provisionar seu primeiro cluster e experimentar o recurso.

Ver Visualizações materializadas em tabelas externas de information lake no Amazon Redshift Spectrum para considerações e melhores práticas.


Sobre os autores

Raks KhareRaks Khare é arquiteto de soluções especialista em análise sênior na AWS, baseado na Pensilvânia. Ele ajuda clientes de diversos setores e regiões a arquitetar soluções de análise de dados em escala na plataforma AWS. Fora do trabalho, ele gosta de explorar novos destinos de viagem e gastronomia e de passar bons momentos com sua família.

Tahir Aziz é arquiteto de soluções analíticas na AWS. Ele trabalha na construção de information warehouses e soluções de massive information há mais de 15 anos. Ele adora ajudar os clientes a projetar soluções analíticas completas na AWS. Fora do trabalho, ele gosta de viajar e cozinhar.

Raza Hafeez é gerente de produto sênior da Amazon Redshift. Ele tem mais de 13 anos de experiência profissional na criação e otimização de information warehouses empresariais e é apaixonado por permitir que os clientes percebam o poder de seus dados. Ele é especialista na migração de information warehouses empresariais para AWS Trendy Information Structure.

Enrico Siragusa é engenheiro sênior de desenvolvimento de software program na Amazon Redshift. Ele contribuiu para o processamento de consultas e visualizações materializadas. Enrico possui um M.Sc. em Ciência da Computação pela Universidade de Paris-Est e Ph.D. em Bioinformática pela Escola Internacional de Pesquisa Max Planck em Biologia Computacional e Computação Científica em Berlim.

Deixe um comentário

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