O Amazon Redshift não permitirá mais a criação de UDFs do Python a partir do Patch 198. As UDFs do Python existentes continuarão a funcionar normalmente até 30 de junho de 2026. Para ter mais informações, consulte a publicação de blog
Fazer referência a tabelas do Iceberg no Amazon Redshift
O Amazon Redshift fornece várias maneiras de fazer referência a tabelas do Apache Iceberg armazenadas em seu data lake. Você pode usar esquemas externos para criar referências aos bancos de dados do Catálogo de Dados contendo tabelas do Iceberg ou usar a notação em três partes para acesso direto aos catálogos montados automaticamente.
Usar esquemas externos para fazer referência a tabelas do Iceberg
Os esquemas externos oferecem uma forma de fazer referência a tabelas em seu Catálogo de Dados a partir do Amazon Redshift. Ao criar um esquema externo, você deve estabelecer conexão entre o banco de dados do Amazon Redshift e um banco de dados específico do Catálogo de Dados que inclua as tabelas do Iceberg.
Para criar um esquema externo para tabelas do Iceberg:
CREATE EXTERNAL SCHEMAschema_nameFROM DATA CATALOG DATABASE 'glue_database_name' IAM_ROLE 'arn:aws:iam::account-id:role/role-name';
Depois de criar o esquema externo, você pode consultar as tabelas do Iceberg usando a notação em duas partes:
SELECT * FROMschema_name.iceberg_table_name;
Você também pode unir tabelas do Iceberg com tabelas locais do Amazon Redshift:
SELECT r.customer_id, i.order_date, r.customer_name FROM local_customers r JOINschema_name.iceberg_ordersi ON r.customer_id = i.customer_id;
Usando notação em três partes com catálogos montados automaticamente.
A notação em três partes permite que você faça referência direta a tabelas em catálogos montados automaticamente sem criar esquemas externos. Esse método é particularmente útil quando você trabalha com buckets de tabelas do Amazon S3 federados com o AWS Lake Formation. Para acessar informações sobre como configurar a montagem automática do Catálogo de Dados, consulte Simplificar o acesso a objetos externos no Amazon Redshift usando a montagem automática do AWS Glue Data Catalog
A sintaxe da notação em três partes é:
"catalog_name".database_name.table_name
Por exemplo, para consultar uma tabela do Iceberg em um catálogo de tabelas do Amazon S3 montado automaticamente:
SELECT * FROM "my_table_bucket@s3tablescatalog".my_database.my_iceberg_table;
Para acessar mais informações sobre a integração de buckets de tabelas do Amazon S3 com o Amazon Redshift, consulte Integrar tabelas do S3 com o Amazon Redshift no Guia do usuário do Amazon S3.
Você também pode referenciar tabelas no catálogo raiz montado automaticamente awsdatacatalog, que fornece acesso direto aos bancos de dados e tabelas registrados no AWS Glue Data Catalog:
SELECT * FROM awsdatacatalog.my_database.my_iceberg_table;
Para obter mais informações sobre o uso do catálogo awsdatacatalog raiz, consulte Consulta do AWS Glue Data Catalog no Guia de gerenciamento do Amazon Redshift e Gerenciamento de namespaces do catálogo de dados no Guia do desenvolvedor do AWS Lake Formation.
Você também pode usar a instrução USE para definir um catálogo e um banco de dados padrão para buckets de tabelas do Amazon S3:
USE "my_table_bucket@s3tablescatalog".my_database; SELECT * FROMmy_iceberg_table;
Para definir um caminho de pesquisa para resolução de esquema com buckets de tabelas do Amazon S3:
USE "my_table_bucket@s3tablescatalog"; SET search_path TOmy_database; SELECT * FROMmy_iceberg_table;
nota
As instruções USE e search_path não são compatíveis com s3tablescatalog. Não podem ser usadas com awsdatacatalog. Para referenciar tabelas em awsdatacatalog, use a notação completa de três partes.
Práticas recomendadas para fazer referência a tabelas do Iceberg
Uma tabela Apache Iceberg é uma única entidade lógica composta por vários arquivos: um arquivo de metadados raiz (metadata.json), listas de manifestos, arquivos de manifesto e arquivos de dados (normalmente .parquet). O arquivo de metadados raiz serve como ponto de entrada e contém referências a todos os outros arquivos que compõem a tabela. Quando você concede ao Amazon Redshift acesso a uma tabela do Iceberg, o Amazon Redshift usa o arquivo de metadados raiz para descobrir e ler todos os arquivos de dados referenciados. Se o Amazon Redshift tiver acesso ao arquivo de metadados raiz, ele também vai pressupor e exigir acesso a todos os arquivos de dados subjacentes. Isso condiz com o design do Iceberg, em que o acesso no nível da tabela é a unidade de autorização pretendida.
Para melhorar o desempenho da consulta, o Amazon Redshift armazena em cache os arquivos de metadados do Iceberg (incluindo o arquivo de metadados raiz, as listas de manifestos e os arquivos de manifesto) na memória. O arquivo de metadados raiz (metadata.json) é revalidado em relação ao Amazon S3 em um intervalo configurável (TTL). Depois que o TTL expira, o Amazon Redshift executa uma solicitação HEAD do Amazon S3 no arquivo de metadados raiz para verificar se o perfil do IAM ainda tem acesso e se o arquivo não foi modificado. Se a verificação de permissão falhar ou o arquivo tiver sido alterado, a entrada em cache será removida e os metadados serão recuperados do Amazon S3. Como o arquivo de metadados raiz é o ponto de entrada para todo o acesso à tabela, essa revalidação serve como porta de permissão para toda a tabela. As listas de manifestos e os arquivos de manifesto são armazenados em cache sem revalidação independente de TTL; a validade de acesso é derivada da verificação de permissão de metadados raiz. Isso significa que, se você revogar as permissões do Amazon S3 em uma tabela do Iceberg, as consultas poderão continuar sendo bem-sucedidas por no máximo 2 minutos usando metadados em cache.
Importante
O Amazon S3 permite que você defina permissões no nível do objeto individual, o que significa que é tecnicamente possível conceder acesso aos metadados de uma tabela do Iceberg e, ao mesmo tempo, restringir o acesso a alguns arquivos de dados subjacentes. Isso cria uma inconsistência de permissão que pode levar a falhas de consulta ou erros de acesso inesperados no Amazon Redshift.
O Amazon Redshift valida periodicamente o acesso ao arquivo de metadados raiz em cache, mas não valida nem impõe a consistência entre as permissões no nível dos metadados e no nível do arquivo de dados em seu bucket do Amazon S3. É responsabilidade do cliente garantir que as permissões sejam aplicadas de forma consistente em todos os arquivos que constituem uma tabela do Iceberg.
Para evitar isso, pense nas seguintes práticas recomendadas ao fazer referência a tabelas do Iceberg no Amazon Redshift:
-
Use nomes de esquemas descritivos: ao criar esquemas externos, use nomes que indiquem claramente a origem e a finalidade dos dados, como
sales_data_lakeoucustomer_analytics. -
Utilize as estatísticas da tabela: garanta que as estatísticas das colunas sejam geradas para suas tabelas do Iceberg, usando AWS Glue para otimizar a performance da consulta. O Amazon Redshift usa essas estatísticas para planejamento e otimização de consultas.
-
Pense na atualização dos dados: as tabelas do Iceberg podem ser atualizadas por outros serviços enquanto você as consulta. O Amazon Redshift oferece consistência transacional, garantindo que você veja um snapshot consistente dos dados durante a execução da consulta.
-
Use as permissões apropriadas do IAM: garanta que seu cluster ou grupo de trabalho do Amazon Redshift tenha as permissões do IAM necessárias para acessar os locais do Amazon S3 onde suas tabelas do Iceberg estão armazenadas, bem como os metadados do Catálogo de Dados.
-
Permissões no nível da tabela: conceda permissões no nível da tabela, não no nível do arquivo individual.
-
Permissões uniformes: garanta acesso uniforme em todo o caminho do Amazon S3 para sua tabela do Iceberg, incluindo todos os metadados, manifestos e arquivos de dados.
-
Evite políticas restritivas no nível do objeto: não defina políticas restritivas no nível do objeto em arquivos Parquet individuais dentro do prefixo de uma tabela do Iceberg.
-
Entenda o armazenamento em cache do TTL para alterações de permissão: quando você revoga as permissões do Amazon S3 em uma tabela do Iceberg, as consultas podem continuar sendo bem-sucedidas usando metadados raiz em cache por até a duração do TTL configurada (padrão: 2 minutos).
-
Monitore a performance das consultas: use os recursos de monitoramento de consultas do Amazon Redshift para acompanhar a performance das consultas em relação às tabelas do Iceberg e otimizá-las conforme necessário.
Padrões de referência comuns
Os exemplos a seguir demonstram os padrões comuns para fazer referência a tabelas do Iceberg:
Agregar dados em várias tabelas do Iceberg:
SELECT region, SUM(sales_amount) as total_sales, COUNT(*) as transaction_count FROM data_lake.sales_transactions WHERE transaction_date >= '2024-01-01' GROUP BY region ORDER BY total_sales DESC;
Unir tabelas do Iceberg com tabelas locais do Amazon Redshift:
SELECT c.customer_name, c.customer_tier, SUM(o.order_amount) as total_orders FROM customers c JOIN data_lake.order_history o ON c.customer_id = o.customer_id WHERE o.order_date >= CURRENT_DATE - INTERVAL '30 days' GROUP BY c.customer_name, c.customer_tier;
Usar a notação em três partes com consultas complexas:
WITH recent_orders AS ( SELECT customer_id, order_date, order_amount FROM "analytics_bucket@s3tablescatalog".ecommerce.orders WHERE order_date >= CURRENT_DATE - INTERVAL '7 days' ) SELECT customer_id, COUNT(*) as order_count, AVG(order_amount) as avg_order_value FROM recent_orders GROUP BY customer_id HAVING COUNT(*) > 1;