Crie e atualize tabelas do Apache Iceberg com partições no AWS Glue Knowledge Catalog usando o AWS SDK e o AWS CloudFormation


Nos últimos anos, testemunhamos uma mudança significativa na forma como as empresas gerenciam e analisam seus crescentes knowledge lakes. Na vanguarda desta transformação está Iceberg Apacheum formato de tabela aberta que está ganhando força rapidamente entre consumidores de dados em grande escala.

No entanto, à medida que as empresas dimensionam as suas implementações de knowledge lake, a gestão destas tabelas Iceberg em escala torna-se um desafio. As equipes de dados geralmente precisam gerenciar a evolução do esquema da tabela, seu particionamento e versões de snapshots. A automação agiliza essas operações, fornece consistência, reduz erros humanos e ajuda as equipes de dados a se concentrarem em tarefas de maior valor.

O Cola AWS Catálogo de Dados agora oferece suporte ao gerenciamento de tabelas Iceberg usando o API AWS Glue, SDKs da AWSe AWS CloudFormation. Anteriormente, os usuários tinham que criar tabelas Iceberg no Knowledge Catalog sem partições usando CloudFormation ou SDKs e depois adicionar partições de Amazon Atenas ou outros mecanismos de análise. Isso evita que a linhagem da tabela seja rastreada em um só lugar e adiciona etapas fora da automação no pipeline de integração e entrega contínua (CI/CD) para operações de manutenção de tabelas. Com o lançamento, os clientes do AWS Glue agora podem usar suas ferramentas preferidas de automação ou infraestrutura como código (IaC) para automatizar a criação de tabelas Iceberg com partições e usar as mesmas ferramentas para gerenciar atualizações de esquema e ordem de classificação.

Nesta postagem, mostramos como criar e atualizar tabelas Iceberg com partições no Knowledge Catalog usando AWS SDK e CloudFormation.

Visão geral da solução

Nas seções seguintes, ilustramos o SDK da AWS para Python (Boto3) e Interface de linha de comando da AWS (AWS CLI) uso de APIs do Knowledge Catalog —CriarTabela() e AtualizarTabela()-para Serviço de armazenamento simples da Amazon (Amazon S3) com base em tabelas Iceberg com partições. Também fornecemos os modelos CloudFormation para criar e atualizar uma tabela Iceberg com partições.

Pré-requisitos

As alterações da API do Knowledge Catalog estão disponíveis nas seguintes versões da AWS CLI e do SDK para Python:

  • Versão AWS CLI 2.27.58 ou superior
  • SDK para Python versão 1.39.12 ou superior

Uso da AWS CLI

Vamos criar uma tabela Iceberg com uma partição, usando CriarTabela() na AWS CLI:

aws glue create-table --cli-input-json file://createicebergtable.json

O createicebergtable.json é o seguinte:

{
    "CatalogId": "123456789012",
    "DatabaseName": "bankdata_icebergdb",
    "Identify": "transactiontable1",
    "OpenTableFormatInput": { 
      "IcebergInput": { 
         "MetadataOperation": "CREATE",
         "Model": "2",
         "CreateIcebergTableInput": { 
            "Location": "s3://sampledatabucket/bankdataiceberg/transactiontable1/",
            "Schema": {
                "SchemaId": 0,
                "Sort": "struct",
                "Fields": ( 
                    { 
                        "Id": 1,
                        "Identify": "transaction_id",
                        "Required": true,
                        "Sort": "string"
                    },
                    { 
                        "Id": 2,
                        "Identify": "transaction_date",
                        "Required": true,
                        "Sort": "date"
                    },
                    { 
                        "Id": 3,
                        "Identify": "monthly_balance",
                        "Required": true,
                        "Sort": "float"
                    }
                )
            },
            "PartitionSpec": { 
                "Fields": ( 
                    { 
                        "Identify": "by_year",
                        "SourceId": 2,
                        "Rework": "yr"
                    }
                ),
                "SpecId": 0
            },
            "WriteOrder": { 
                "Fields": ( 
                    { 
                        "Course": "asc",
                        "NullOrder": "nulls-last",
                        "SourceId": 1,
                        "Rework": "none"
                    }
                ),
                "OrderId": 1
            }  
        }
      }
   }
}

O comando anterior da AWS CLI cria a pasta de metadados para a tabela Iceberg no Amazon S3, conforme mostrado na captura de tela a seguir.

Crie e atualize tabelas do Apache Iceberg com partições no AWS Glue Knowledge Catalog usando o AWS SDK e o AWS CloudFormation

Você pode preencher a tabela com valores da seguinte maneira e verificar o esquema da tabela usando o console do Athena:

SELECT * FROM "bankdata_icebergdb"."transactiontable1" restrict 10;
insert into bankdata_icebergdb.transactiontable1 values
    ('AFTERCREATE1234', DATE '2024-08-23', 6789.99),
    ('AFTERCREATE5678', DATE '2023-10-23', 1234.99);
SELECT * FROM "bankdata_icebergdb"."transactiontable1";

A captura de tela a seguir mostra os resultados.

Editor de consultas do Amazon Athena mostrando consultas SQL e resultados para o banco de dados bankdata_icebergdb com dados de transação

Após preencher a tabela com dados, você pode inspecionar o prefixo S3 da tabela, que agora terá o knowledge pasta.

Interface do bucket do Amazon S3 exibindo pasta de dados com duas subpastas organizadas por ano: 2023 e 2024

O knowledge pastas particionadas de acordo com nossa definição de tabela e arquivos de dados Parquet criados a partir de nosso comando INSERT estão disponíveis em cada prefixo particionado.

Interface do bucket do Amazon S3 mostrando a pasta by_year=2023 contendo um único arquivo Parquet de 575 bytes

A seguir, atualizamos a tabela Iceberg adicionando uma nova partição, usando AtualizarTabela():

aws glue update-table --cli-input-json file://updateicebergtable.json

O updateicebergtable.json é o seguinte.

{
  "CatalogId": "123456789012",
  "DatabaseName": "bankdata_icebergdb",
  "Identify": "transactiontable1",
  "UpdateOpenTableFormatInput": {
    "UpdateIcebergInput": {
      "UpdateIcebergTableInput": {
        "Updates": (
          {
            "Location": "s3://sampledatabucket/bankdataiceberg/transactiontable1/",
            "Schema": {
              "SchemaId": 1,
              "Sort": "struct",
              "Fields": (
                {
                  "Id": 1,
                  "Identify": "transaction_id",
                  "Required": true,
                  "Sort": "string"
                },
                {
                  "Id": 2,
                  "Identify": "transaction_date",
                  "Required": true,
                  "Sort": "date"
                },
                {
                  "Id": 3,
                  "Identify": "monthly_balance",
                  "Required": true,
                  "Sort": "float"
                }
              )
            },
            "PartitionSpec": {
              "Fields": (
                {
                  "Identify": "by_year",
                  "SourceId": 2,
                  "Rework": "yr"
                },
                {
                  "Identify": "by_transactionid",
                  "SourceId": 1,
                  "Rework": "identification"
                }
              ),
              "SpecId": 1
            },
            "SortOrder": {
              "Fields": (
                {
                  "Course": "asc",
                  "NullOrder": "nulls-last",
                  "SourceId": 1,
                  "Rework": "none"
                }
              ),
              "OrderId": 2
            }
          }
        )
      }
    }
  }
}

UpdateTable() modifica o esquema da tabela adicionando um arquivo JSON de metadados ao subjacente metadata pasta da tabela no Amazon S3.

Interface do bucket do Amazon S3 mostrando cinco objetos de metadados, incluindo arquivos JSON e Avro com carimbos de data/hora

Inserimos valores na tabela usando Athena da seguinte forma:

insert into bankdata_icebergdb.transactiontable1 values
    ('AFTERUPDATE1234', DATE '2025-08-23', 4536.00),
    ('AFTERUPDATE5678', DATE '2022-10-23', 23489.00);
SELECT * FROM "bankdata_icebergdb"."transactiontable1";

A captura de tela a seguir mostra os resultados.

Editor de consultas do Amazon Athena com instruções SQL e resultados após atualização da partição iceberg e inserção de dados

Inspecione as alterações correspondentes no knowledge pasta no native do Amazon S3 da tabela.

Prefixo do Amazon S3 mostrando novas partições para a tabela Iceberg

Este exemplo ilustrou como criar e atualizar tabelas Iceberg com partições usando comandos AWS CLI.

SDK para uso de Python

Os seguintes scripts Python ilustram o uso CriarTabela() e AtualizarTabela() para uma mesa Iceberg com divisórias:

Uso do CloudFormation

Use os seguintes modelos do CloudFormation para CreateTable() e UpdateTable(). Depois do CreateTable o modelo estiver completo, atualize a mesma pilha com o UpdateTable modelo criando um novo conjunto de alterações para sua pilha e executando-o.

Limpar

Para evitar incorrer em custos nas tabelas Iceberg criadas usando a AWS CLI, exclua as tabelas do Knowledge Catalog.

Conclusão

Nesta postagem, ilustramos como usar a AWS CLI para criar e atualizar tabelas Iceberg com partições no Knowledge Catalog. Também fornecemos o código e os modelos de amostra do SDK para Python e CloudFormation. Esperamos que isso ajude você a automatizar a criação e o gerenciamento de suas tabelas Iceberg com partições em seus pipelines de CI/CD e ambientes de produção. Experimente para seu próprio caso de uso e compartilhe seus comentários na seção de comentários.


Sobre os autores

Agradecimentos: Um agradecimento especial a todos que contribuíram para o desenvolvimento e lançamento deste recurso – Purvaja Narayanaswamy, Sachet Saurabh, Akhil Yendluri e Mohit Chandak.

Aarthi Srinivasan

Aarthi Srinivasan

Aarthi é arquiteto sênior de Large Knowledge na AWS. Ela trabalha com clientes e parceiros da AWS para arquitetar soluções de knowledge lake home, aprimorar recursos de produtos e estabelecer práticas recomendadas para governança de dados.

Pratik Das

Pratik Das

Pratik é gerente de produto sênior da AWS. Ele é apaixonado por dados e trabalha com os clientes para entender suas necessidades e criar experiências agradáveis. Ele tem experiência na construção de soluções baseadas em dados e sistemas de aprendizado de máquina em produção.

Deixe um comentário

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