As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Usando visualizações materializadas com o Amazon EMR
O Amazon EMR versão 7.12.0 e posterior oferece suporte à criação e ao gerenciamento de visualizações materializadas do Apache Iceberg no Glue Data Catalog. AWS Uma visão materializada é uma tabela gerenciada que armazena o resultado pré-computado de uma consulta SQL no formato Apache Iceberg e é atualizada incrementalmente à medida que as tabelas de origem subjacentes mudam. Você pode usar visões materializadas para simplificar os pipelines de transformação de dados e acelerar o desempenho das consultas para workloads de analytics complexas.
Quando você cria uma visualização materializada usando o Spark no Amazon EMR, a definição e os metadados da visualização são armazenados no Glue Data Catalog. AWS Os resultados pré-computados são armazenados como tabelas Apache Iceberg em buckets do Amazon S3 Tables ou buckets de uso geral do Amazon S3 em sua conta. AWS O AWS Glue Data Catalog monitora automaticamente as tabelas de origem e atualiza as visualizações materializadas usando a infraestrutura de computação gerenciada.
Como as visualizações materializadas funcionam com o Amazon EMR
As visualizações materializadas se integram ao Amazon EMR por meio do suporte Iceberg do Apache Spark. Ao configurar sua sessão do Spark para usar o AWS Glue Data Catalog, você pode criar visualizações materializadas usando a sintaxe SQL padrão. O otimizador do Spark pode reescrever automaticamente as consultas para usar visões materializadas quando elas oferecem melhor desempenho, eliminando a necessidade de modificar manualmente o código da aplicação.
O AWS Glue Data Catalog trata de todos os aspectos operacionais da manutenção da visualização materializada, incluindo:
-
Detecção das alterações nas tabelas de origem usando a camada de metadados do Apache Iceberg
-
Agendamento e execução de operações de atualização usando a computação gerenciada do Spark
-
Determinação se deve realizar uma atualização completa ou incremental com base nas alterações de dados
-
Armazenamento de resultados pré-computados no formato Apache Iceberg para acesso por vários mecanismos
Você pode consultar visualizações materializadas do Amazon EMR usando as mesmas interfaces Spark SQL que você usa para tabelas regulares. Os dados pré-computados também podem ser acessados de outros serviços, incluindo Amazon Athena e Amazon Redshift.
Pré-requisitos
Para usar visualizações materializadas com o Amazon EMR, você precisa:
-
Uma AWS conta
-
Um cluster do Amazon EMR executando a versão 7.12.0 ou posterior
-
Tabelas de origem no formato Apache Iceberg registradas no AWS Glue Data Catalog
-
AWS Permissões do Lake Formation configuradas para tabelas de origem e bancos de dados de destino
-
Um bucket S3 Tables ou um bucket S3 de uso geral registrado no AWS Lake Formation para armazenar dados de visualização materializada
Configurar o Spark para usar visões materializadas
Para criar e gerenciar visualizações materializadas, configure sua sessão do Spark com as extensões e configurações de catálogo necessárias do Iceberg. A configuração varia dependendo se suas tabelas de origem e visualizações materializadas usam buckets S3 Tables ou buckets S3 de uso geral.
Configuração para tabelas S3
Ao usar buckets de tabelas do S3 para visualizações materializadas, configure referências de catálogo separadas para suas tabelas de origem e visualizações materializadas:
spark-sql \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.catalog.glue_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.glue_catalog.type=glue \ --conf spark.sql.catalog.glue_catalog.warehouse=s3://amzn-s3-demo-bucket/warehouse \ --conf spark.sql.catalog.glue_catalog.glue.region=us-east-1 \ --conf spark.sql.catalog.glue_catalog.glue.id=111122223333 \ --conf spark.sql.catalog.glue_catalog.glue.account-id=111122223333 \ --conf spark.sql.catalog.glue_catalog.glue.lakeformation-enabled=true \ --conf spark.sql.catalog.s3t_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.s3t_catalog.type=glue \ --conf spark.sql.catalog.s3t_catalog.glue.id=111122223333:s3tablescatalog/my-table-bucket \ --conf spark.sql.catalog.s3t_catalog.glue.account-id=111122223333 \ --conf spark.sql.catalog.s3t_catalog.glue.lakeformation-enabled=true \ --conf spark.sql.catalog.s3t_catalog.warehouse=s3://amzn-s3-demo-bucket/mv-warehouse \ --conf spark.sql.catalog.s3t_catalog.glue.region=us-east-1 \ --conf spark.sql.defaultCatalog=s3t_catalog \ // turn on automatic query rewrite (optional) --conf spark.sql.optimizer.answerQueriesWithMVs.enabled=true
Configuração para buckets de uso geral do S3
Ao usar buckets de uso geral do S3, configure uma única referência de catálogo:
spark-sql \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.catalog.glue_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.glue_catalog.type=glue \ --conf spark.sql.catalog.glue_catalog.warehouse=s3://amzn-s3-demo-bucket/warehouse \ --conf spark.sql.catalog.glue_catalog.glue.region=us-east-1 \ --conf spark.sql.catalog.glue_catalog.glue.id=111122223333 \ --conf spark.sql.catalog.s3t_catalog.glue.account-id=111122223333 \ --conf spark.sql.catalog.s3t_catalog.glue.lakeformation-enabled=true \ --conf spark.sql.defaultCatalog=glue_catalog \ // turn on automatic query rewrite (optional) --conf spark.sql.optimizer.answerQueriesWithMVs.enabled=true
Habilitar a atualização incremental
Para ativar a otimização incremental da atualização, adicione as seguintes propriedades de configuração à sua sessão do Spark:
spark-sql \ --conf spark.sql.optimizer.incrementalMVRefresh.enabled=true \
Parâmetros de configuração
Os seguintes parâmetros de configuração controlam o comportamento da visão materializada:
-
spark.sql.extensions: permite extensões de sessão do Iceberg Spark necessárias para o suporte à visão materializada. -
spark.sql.optimizer.answerQueriesWithMVs.enabled: permite reescrita automática de consultas para usar visões materializadas. Defina como true para ativar essa otimização. -
spark.sql.optimizer.incrementalMVRefresh.enabled: permite a otimização incremental da atualização. Defina como true para processar somente os dados alterados durante as operações de atualização.
Criar visualizações materializadas
Você cria visualizações materializadas usando a instrução SQL CREATE MATERIALIZED VIEW. A definição da visão especifica a lógica de transformação como uma consulta SQL que faz referência a uma ou mais tabelas de origem.
DLLs
Criar visualização
{ CREATE OR REPLACE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] } view_identifier [ view_clauses ] [ schedule_clauses ] AS [ select_statement ] view_clauses = { [ LOCATION location ] | [ PARTITIONED BY (col [, ...]) ] | [ COMMENT view_comment ] | [ SCHEDULE [ REFRESH ] schedule_clause ] } schedule_clause = { EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS } }
nota
As view_clauses devem aparecer antes do select_statement.
Criando uma visão materializada básica
O exemplo a seguir cria uma visualização materializada que agrega dados de pedidos por cliente, usa nomes de tabela totalmente qualificados com convenção de nomenclatura de três partes na definição da exibição:
CREATE MATERIALIZED VIEW customer_orders AS SELECT customer_name, COUNT(*) as order_count, SUM(amount) as total_amount FROM glue_catalog.sales.orders GROUP BY customer_name;
Criar uma visão materializada com atualização automática
Para configurar a atualização automática, especifique uma agenda de atualização ao criar a exibição usando nomes de tabela totalmente qualificados com convenção de nomenclatura de três partes na definição da exibição:
CREATE MATERIALIZED VIEW customer_orders SCHEDULE REFRESH EVERY 1 HOUR AS SELECT customer_name, COUNT(*) as order_count, SUM(amount) as total_amount FROM glue_catalog.sales.orders GROUP BY customer_name;
Criar uma visão materializada com referências de catálogos cruzados
Quando suas tabelas de origem estiverem em um catálogo diferente da visão materializada, use nomes de tabela totalmente qualificados com convenção de nomenclatura em três partes, tanto no nome da visão quanto na definição da visão:
CREATE MATERIALIZED VIEW s3t_catalog.analytics.customer_summary AS SELECT customer_name, COUNT(*) as order_count, SUM(amount) as total_amount FROM glue_catalog.sales.orders GROUP BY customer_name;
Consultar visões materializadas
Depois de criar uma visualização materializada, você pode consultá-la como qualquer outra tabela usando instruções SQL SELECT padrão:
SELECT * FROM customer_orders;
Reescrita automática de consultas
Quando a reescrita automática de consultas está habilitada, o otimizador do Spark analisa suas consultas e usa automaticamente visões materializadas quando elas podem melhorar o desempenho. Por exemplo, se você executar a seguinte consulta:
SELECT customer_name, COUNT(*) as order_count, SUM(amount) as total_amount FROM orders GROUP BY customer_name;
O otimizador do Spark reescreve automaticamente essa consulta para usar a visão materializada customer_orders em vez de processar a tabela de pedidos base, desde que a visão materializada seja atual.
Verificar a reescrita automática de consulta
Para verificar se uma consulta usa a reescrita automática de consultas, use o comando EXPLAIN EXTENDED:
EXPLAIN EXTENDED SELECT customer_name, COUNT(*) as order_count, SUM(amount) as total_amount FROM orders GROUP BY customer_name;
No plano de execução, procure o nome da visualização materializada na BatchScan operação. Se o plano mostrar BatchScan glue_catalog.analytics.customer_orders em vez de glue_catalog.sales.orders, a consulta foi reescrita automaticamente para usar a BatchScan visualização materializada.
nota
A reescrita automática de consultas requer tempo para que o cache de metadados do Spark seja preenchido após a criação de uma visualização materializada. Normalmente, esse processo é concluído em 30 segundos.
Atualizar visões materializadas
Você pode atualizar as visões materializadas usando dois métodos: atualização completa ou atualização incremental. A atualização completa recalcula toda a visão materializada de todos os dados da tabela base, enquanto a atualização incremental processa somente os dados que foram alterados desde a última atualização.
Atualização manual completa
Para realizar uma atualização completa de uma visão materializada:
REFRESH MATERIALIZED VIEW customer_orders FULL;
Depois de executar esse comando, consulte a visualização materializada para verificar os resultados atualizados:
SELECT * FROM customer_orders;
Atualização incremental manual
Para realizar uma atualização incremental, certifique-se de que a atualização incremental esteja ativada na configuração da sua sessão do Spark e, em seguida, execute:
REFRESH MATERIALIZED VIEW customer_orders;
O AWS Glue Data Catalog determina automaticamente se a atualização incremental é aplicável com base na definição da visualização e na quantidade de dados alterados. Se a atualização incremental não for possível, a operação retornará à atualização completa.
Verificar execução da atualização incremental
Para confirmar que a atualização incremental foi executada com êxito, você pode verificar as propriedades da lastRefreshType tabela executando os seguintes comandos:
SHOW TBLPROPERTIES <mvName>("lastRefreshType")
Além disso, isso também pode ser feito ativando o registro de depuração modificando a configuração do registro do Spark:
-
Abra o arquivo de configuração do Spark log4j:
sudo vim /usr/lib/spark/conf/log4j2.properties -
Adicione as seguintes configurações do registrador:
logger.spark.name = org.apache.spark.sql logger.spark.level = debug logger.inmemcache.name = org.apache.spark.sql.InMemMvMetadataCache logger.inmemcache.level = off -
Depois de executar uma operação de atualização, procure a seguinte mensagem na saída do Spark:
DEBUG RefreshMaterializedViewExec: Executed Incremental Refresh
Gerenciar visões materializadas
O Amazon EMR fornece comandos SQL para gerenciar o ciclo de vida das visualizações materializadas.
Descrever uma visão materializada
Para visualizar metadados sobre uma visão materializada, incluindo sua definição, status de atualização e data e hora da última atualização:
DESCRIBE EXTENDED customer_orders;
Alterar uma visão materializada
Para modificar o cronograma de atualização de uma visão materializada existente:
ALTER MATERIALIZED VIEW customer_orders ADD SCHEDULE REFRESH EVERY 2 HOURS;
Para remover a atualização automática:
ALTER MATERIALIZED VIEW customer_orders DROP SCHEDULE;
Eliminar uma visão materializada
Para excluir uma visão materializada:
DROP MATERIALIZED VIEW customer_orders;
Esse comando remove a definição de visualização materializada do AWS Glue Data Catalog e exclui os dados subjacentes da tabela Iceberg do seu bucket do S3.
Permissões para visões materializadas
Para criar e gerenciar visualizações materializadas, você deve configurar as permissões do AWS Lake Formation. O perfil do IAM que cria a visão materializada (o perfil definidor) requer permissões específicas nas tabelas de origem e nos bancos de dados de destino.
Permissões necessárias para o perfil de definidor
O perfil deve ter as seguintes permissões:
-
Nas tabelas de origem: permissões SELECT ou ALL sem filtros de linha, coluna ou célula
-
No banco de dados de destino: permissão CREATE_TABLE
-
Sobre o AWS Glue Data Catalog — GetTable e permissões de CreateTable API
Quando você cria uma visão materializada, o ARN do perfil definidor é armazenado na definição da visão. O AWS Glue Data Catalog assume essa função ao executar operações de atualização automática. Se o perfil do definidor perder o acesso às tabelas de origem, as operações de atualização falharão até que as permissões sejam restauradas.
Conceder acesso às visões materializadas
Para conceder a outros usuários acesso para consultar uma visualização materializada, use o AWS Lake Formation para conceder a permissão SELECT na tabela de visualização materializada. Os usuários podem consultar a visão materializada sem precisar de acesso direto às tabelas de origem subjacentes.
Para obter informações detalhadas sobre como configurar as permissões do Lake Formation, consulte Conceder e revogar permissões nos recursos do Catálogo de Dados no Guia do Desenvolvedor do AWS Lake Formation.
Monitorar operações de visão materializada
O AWS Glue Data Catalog publica métricas e registros para operações materializadas de atualização de visualizações na Amazon. CloudWatch Você pode monitorar o status da atualização, a duração e o volume de dados processados por meio de CloudWatch métricas.
Visualizando métricas de atualização
Para visualizar métricas de atualização de visualizações materializadas:
-
Abra o CloudWatch console.
-
Escolha Métricas no painel de navegação.
-
Selecione o namespace Glue.
-
Filtre as métricas pelo nome da visualização materializada.
Definir alarmes
Para receber notificações quando as operações de atualização falharem ou excederem a duração esperada, crie CloudWatch alarmes nas métricas de visualização materializada. Você também pode configurar EventBridge as regras da Amazon para acionar respostas automatizadas para atualizar eventos.
Exemplo: concluir fluxo de trabalho
O exemplo a seguir demonstra um fluxo de trabalho completo para criar e usar uma visão materializada no Amazon EMR.
-
Conecte-se ao nó primário do cluster EMR usando SSH.
-
Crie uma tabela base com dados de amostra:
spark-sql \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.catalog.glue_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.glue_catalog.type=glue \ --conf spark.sql.catalog.glue_catalog.warehouse=s3://amzn-s3-demo-bucket/warehouse \ --conf spark.sql.catalog.glue_catalog.glue.region=us-east-1 \ --conf spark.sql.catalog.glue_catalog.glue.id=111122223333 \ --conf spark.sql.catalog.glue_catalog.glue.account-id=111122223333 \ --conf spark.sql.catalog.glue_catalog.glue.lakeformation-enabled=true \ --conf spark.sql.defaultCatalog=glue_catalog \ --conf spark.sql.optimizer.answerQueriesWithMVs.enabled=true CREATE DATABASE IF NOT EXISTS sales; USE sales; CREATE TABLE orders ( id INT, customer_name STRING, amount DECIMAL(10,2), order_date DATE ); INSERT INTO orders VALUES (1, 'John Doe', 150.00, DATE('2024-01-15')), (2, 'Jane Smith', 200.50, DATE('2024-01-16')), (3, 'Bob Johnson', 75.25, DATE('2024-01-17')); -
Crie uma visão materializada:
CREATE MATERIALIZED VIEW customer_summary AS SELECT customer_name, COUNT(*) as order_count, SUM(amount) as total_amount FROM glue_catalog.sales.orders GROUP BY customer_name; -
Consulte a visão materializada:
SELECT * FROM customer_summary; -
Insira dados adicionais na tabela base:
INSERT INTO orders VALUES (4, 'Jane Smith', 350.00, DATE('2024-01-18')), (5, 'Bob Johnson', 100.25, DATE('2024-01-19')); -
Atualize a visão materializada.
REFRESH MATERIALIZED VIEW customer_summary FULL; -
Verifique os resultados atualizados:
SELECT * FROM customer_summary;
Considerações e limitações
Considere o seguinte ao usar visualizações materializadas com o Amazon EMR:
-
As visualizações materializadas exigem o Amazon EMR versão 7.12.0 ou posterior.
-
As tabelas de origem devem ser tabelas Apache Iceberg registradas no AWS Glue Data Catalog. Tabelas do Apache Hive, do Apache Hudi e do Delta Lake da Linux Foundation não são compatíveis no lançamento.
-
As tabelas de origem devem residir na mesma AWS região e AWS conta da visualização materializada.
-
Todas as tabelas de origem devem ser governadas pelo AWS Lake Formation. Permissões somente do IAM e acesso híbrido não são compatíveis.
-
As visualizações materializadas não podem referenciar visualizações do AWS Glue Data Catalog, visualizações de vários dialetos ou outras visualizações materializadas como tabelas de origem.
-
O perfil definidor das visões deve ter acesso total de leitura (permissão SELECT ou ALL) em todas as tabelas de origem sem a aplicação de filtros de linha, coluna ou célula.
-
Com o tempo, as visões materializadas se tornam consistentes com as tabelas de origem. Durante a janela de atualização, as consultas podem retornar dados obsoletos. Execute a atualização manual para obter consistência imediata.
-
O intervalo mínimo de atualização automática é uma hora.
-
A atualização incremental oferece suporte a um subconjunto restrito de operações SQL. A definição da visualização deve ser um único bloco SELECT-FROM-WHERE-GROUP BY-HAVING e não pode conter operações de conjunto, subconsultas, a palavra-chave DISTINCT em funções SELECT ou agregadas, funções de janela ou junções que não sejam INNER JOIN.
-
A atualização incremental não oferece suporte a funções definidas pelo usuário ou a determinadas funções integradas. Somente um subconjunto das funções integradas do Spark SQL é compatível.
-
A reescrita automática de consultas considera somente visões materializadas cujas definições pertencem a um subconjunto SQL restrito semelhante às restrições de atualização incremental.
-
As operações de atualização completa substituem a tabela inteira e tornam os snapshots anteriores indisponíveis.
-
Identificadores contendo caracteres especiais que não sejam caracteres alfanuméricos e sublinhados não são compatíveis nas consultas CREATE MATERIALIZED VIEW.
-
As colunas de visualização materializada que começam com o prefixo __ivm são reservadas para uso do sistema. AWS reserva o direito de modificar ou remover essas colunas em versões futuras.
-
As cláusulas SORT BY, LIMIT, OFFSET, CLUSTER BY e ORDER BY não são compatíveis com as definições de visão materializada.
-
Tabelas de origem entre regiões e entre contas não são compatíveis.
-
Funções não determinísticas, como rand() ou current_timestamp(), não são compatíveis nas definições de visão materializada.