Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation de vues matérialisées avec AWS Glue
AWS Les versions 5.1 et ultérieures de Glue prennent en charge la création et la gestion de vues matérialisées d'Apache Iceberg dans le AWS Catalogue de données Glue. Une vue matérialisée est une table gérée qui stocke le résultat précalculé d'une requête SQL au format Apache Iceberg et qui se met à jour de manière incrémentielle à mesure que les tables sources sous-jacentes changent. Vous pouvez utiliser des vues matérialisées pour simplifier les pipelines de transformation des données et accélérer les performances des requêtes pour les charges de travail analytiques complexes.
Lorsque vous créez une vue matérialisée à l'aide de Spark dans AWS Glue, la définition de la vue et les métadonnées sont stockées dans AWS Catalogue de données Glue. Les résultats précalculés sont stockés sous forme de tables Apache Iceberg dans des compartiments Amazon S3 Tables ou des compartiments Amazon S3 à usage général au sein de votre compte. Le AWS Glue Data Catalog surveille automatiquement les tables sources et actualise les vues matérialisées à l'aide d'une infrastructure informatique gérée.
Rubriques
Comment fonctionnent les vues matérialisées avec AWS Glue
Les vues matérialisées s'intègrent à AWS Découvrez le support Iceberg d'Apache Spark dans AWS Des travaux de colle et AWS Carnets Glue Studio. Lorsque vous configurez votre session Spark pour utiliser AWS Glue Data Catalog, vous pouvez créer des vues matérialisées à l'aide de la syntaxe SQL standard. L'optimiseur Spark peut réécrire automatiquement les requêtes pour utiliser des vues matérialisées lorsqu'elles offrent de meilleures performances, éliminant ainsi le besoin de modifier manuellement le code de l'application.
Le AWS Glue Data Catalog gère tous les aspects opérationnels de la maintenance des vues matérialisées, notamment :
-
Détection des modifications dans les tables sources. Pour les tables sources d'Apache Iceberg, la détection des modifications utilise la couche de métadonnées d'Apache Iceberg. Pour les tables sources Apache Hive (non-Iceberg), la détection des modifications compare les ETags des fichiers de données sources à ceux enregistrés lors de la dernière actualisation.
-
Planification et exécution d'opérations d'actualisation à l'aide du calcul Spark géré
-
Déterminer s'il faut effectuer une actualisation complète ou incrémentielle en fonction des modifications des données
-
Stockage des résultats précalculés au format Apache Iceberg pour un accès multimoteur
Vous pouvez interroger des vues matérialisées à partir de AWS Glue utilise les mêmes interfaces Spark SQL que celles que vous utilisez pour les tables classiques. Les données précalculées sont également accessibles depuis d'autres services, notamment Amazon Athena et Amazon Redshift.
Conditions préalables
Pour utiliser des vues matérialisées avec AWS De la colle, il vous faut :
-
Un AWS compte
-
AWS Glue version 5.1 ou ultérieure
-
Tables sources enregistrées dans le AWS Catalogue de données Glue. Les tables sources d'Apache Iceberg sont prises en charge sur AWS Glue version 5.1 et versions ultérieures. Les tables sources Apache Hive (non-ICEBERG) avec un fournisseur PARQUET, ORC, CSV ou JSON sont prises en charge sur AWS Glue version 6.0 et versions ultérieures.
-
Un compartiment S3 Tables ou un compartiment S3 à usage général pour le stockage des données de vues matérialisées
-
Un rôle IAM avec des autorisations d'accès AWS Catalogue de données Glue et Amazon S3
-
Autorisations configurées à l'aide de l'un des modèles suivants :
-
Politiques IAM uniquement — Vos besoins en matière de rôle IAM CreateTable autorisations sur le AWS Base de données Glue et accès en lecture aux tables de base (GetTables sur le AWS Collez le catalogue et accédez en lecture aux emplacements S3 sous-jacents). Non AWS Lake Formation configuration requise.
-
AWS Lake Formation — Si vous utilisez déjà AWS Lake Formation pour gérer votre lac de données, configurez AWS Lake Formation autorisations sur les tables sources et les bases de données cibles, et enregistrez votre compartiment S3 auprès de AWS Lake Formation.
-
Configuration de Spark pour utiliser des vues matérialisées
Pour créer et gérer des vues matérialisées dans AWS Glue, configurez votre session Spark avec les extensions Iceberg et les paramètres de catalogue requis. La méthode de configuration varie selon que vous utilisez AWS Des travaux de colle ou AWS Carnets Glue Studio.
Configuration AWS Travaux de colle
Lorsque vous créez ou mettez à jour un AWS Glue job, ajoutez les paramètres de configuration suivants en tant que paramètres de job :
Pour les seaux S3 Tables
job = glue.create_job( Name='materialized-view-job', Role='arn:aws:iam::111122223333:role/GlueServiceRole', Command={ 'Name': 'glueetl', 'ScriptLocation': 's3://amzn-s3-demo-bucket/scripts/mv-script.py', 'PythonVersion': '3' }, DefaultArguments={ '--enable-glue-datacatalog': 'true', '--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.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.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 ' '--conf spark.sql.optimizer.answerQueriesWithMVs.enabled=true ' '--conf spark.sql.materializedViews.metadataCache.enabled=true' }, GlueVersion='5.1' )
Si vous utilisez AWS Lake Formation pour gérer l'accès à votre lac de données, ajoutez le paramètre suivant à chaque configuration de catalogue :
--conf spark.sql.catalog.glue_catalog.glue.lakeformation-enabled=true
Pour les godets à usage général S3
job = glue.create_job( Name='materialized-view-job', Role='arn:aws:iam::111122223333:role/GlueServiceRole', Command={ 'Name': 'glueetl', 'ScriptLocation': 's3://amzn-s3-demo-bucket/scripts/mv-script.py', 'PythonVersion': '3' }, DefaultArguments={ '--enable-glue-datacatalog': 'true', '--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.defaultCatalog=glue_catalog ' '--conf spark.sql.optimizer.answerQueriesWithMVs.enabled=true ' '--conf spark.sql.materializedViews.metadataCache.enabled=true' }, GlueVersion='5.1' )
Si vous utilisez AWS Lake Formation pour gérer l'accès à votre lac de données, ajoutez le paramètre suivant à chaque configuration de catalogue :
--conf spark.sql.catalog.glue_catalog.glue.lakeformation-enabled=true
Configuration AWS Carnets Glue Studio
Dans AWS Pour les ordinateurs portables Glue Studio, configurez votre session Spark à l'aide de la commande magique %%configure au début de votre bloc-notes :
%%configure { "conf": { "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions", "spark.sql.catalog.glue_catalog": "org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.glue_catalog.type": "glue", "spark.sql.catalog.glue_catalog.warehouse": "s3://amzn-s3-demo-bucket/warehouse", "spark.sql.catalog.glue_catalog.glue.region": "us-east-1", "spark.sql.catalog.glue_catalog.glue.id": "111122223333", "spark.sql.catalog.glue_catalog.glue.account-id": "111122223333", "spark.sql.defaultCatalog": "glue_catalog", "spark.sql.optimizer.answerQueriesWithMVs.enabled": "true", "spark.sql.materializedViews.metadataCache.enabled": "true" } }
Si vous utilisez AWS Lake Formation, ajoutez la ligne suivante au conf bloc :
"spark.sql.catalog.glue_catalog.glue.lakeformation-enabled": "true"
Activation de l'actualisation incrémentielle
Pour activer l'optimisation de l'actualisation incrémentielle, ajoutez les propriétés de configuration suivantes à vos paramètres de tâche ou à la configuration de votre bloc-notes :
--conf spark.sql.optimizer.incrementalMVRefresh.enabled=true --conf spark.sql.optimizer.incrementalMVRefresh.deltaThresholdCheckEnabled=false
Paramètres de configuration
Les paramètres de configuration suivants contrôlent le comportement des vues matérialisées :
-
spark.sql.extensions— Active les extensions de session Iceberg Spark requises pour la prise en charge des vues matérialisées. -
spark.sql.catalog.glue_catalog.glue.lakeformation-enabled: facultatif. Réglez surtrueuniquement si vous utilisez AWS Lake Formation pour régir l'accès à votre lac de données. En cas d'omission ou de réglage surfalse, les politiques IAM sont utilisées pour l'autorisation. -
spark.sql.optimizer.answerQueriesWithMVs.enabled— Permet la réécriture automatique des requêtes pour utiliser des vues matérialisées. Réglez sur true pour activer cette optimisation. -
spark.sql.materializedViews.metadataCache.enabled— Active la mise en cache des métadonnées des vues matérialisées pour optimiser les requêtes. Définissez sur true pour améliorer les performances de réécriture des requêtes. -
spark.sql.optimizer.incrementalMVRefresh.enabled— Permet une optimisation de l'actualisation incrémentielle. Définissez sur true pour traiter uniquement les données modifiées lors des opérations d'actualisation. -
spark.sql.materializedView.v1SourceTables.enabled— Autorise les tables Apache Hive (non-ICEBERG) avec un fournisseur PARQUET, ORC, CSV ou JSON dans le AWS Glue Data Catalog à utiliser comme tables sources pour une vue matérialisée. Définissez sur true pour créer des vues matérialisées sur les tables sources Hive. Disponible sur AWS Glue version 6.0 et versions ultérieures. -
spark.sql.materializedView.v1ETagVersioning.enabled— Réglez sur true pour détecter les modifications dans les tables sources d'Apache Hive (non-Iceberg) en comparant les ETags des fichiers de données sources. Cela est nécessaire pour actualiser une vue matérialisée qui fait référence aux tables sources de Hive. Disponible sur AWS Glue version 6.0 et versions ultérieures. -
spark.sql.optimizer.answerQueriesWithMVs.decimalAggregateCheckEnabled— Contrôle la validation des opérations d'agrégation décimale lors de la réécriture des requêtes. Définissez sur false pour désactiver certaines vérifications de débordement décimal.
Création de vues matérialisées
Vous créez des vues matérialisées à l'aide de l'instruction SQL CREATE MATERIALIZED VIEW dans AWS Des travaux de colle ou des cahiers. La définition de la vue spécifie la logique de transformation sous la forme d'une requête SQL qui fait référence à une ou plusieurs tables sources.
Création d'une vue matérialisée de base dans AWS Travaux de colle
L'exemple suivant montre la création d'une vue matérialisée dans un AWS Collez le script de travail, utilisez des noms de table complets avec une convention de dénomination en trois parties dans la définition de la vue :
from awsglue.context import GlueContext from pyspark.context import SparkContext sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session # Create materialized view spark.sql(""" 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 """)
Création d'une vue matérialisée avec actualisation automatique
Pour configurer l'actualisation automatique, spécifiez un calendrier d'actualisation lors de la création de la vue, en utilisant des noms de table complets avec une convention de dénomination en trois parties dans la définition de la vue :
spark.sql(""" 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 """)
Création d'une vue matérialisée avec des références inter-catalogues
Lorsque vos tables sources se trouvent dans un catalogue différent de celui de votre vue matérialisée, utilisez des noms de tables complets avec une convention de dénomination en trois parties à la fois pour le nom de la vue et pour la définition de la vue :
spark.sql(""" 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 """)
Création de vues matérialisées dans AWS Carnets Glue Studio
Dans AWS Pour les blocs-notes Glue Studio, vous pouvez utiliser la commande magique %%sql pour créer des vues matérialisées, en utilisant des noms de tables complets avec une convention de dénomination en trois parties dans la définition des vues :
%%sql 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
Interrogation de vues matérialisées
Après avoir créé une vue matérialisée, vous pouvez l'interroger comme n'importe quelle autre table à l'aide des instructions SQL SELECT standard dans votre AWS Des travaux de colle ou des cahiers.
Interrogation dans AWS Travaux de colle
from awsglue.context import GlueContext from pyspark.context import SparkContext sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session # Query materialized view result = spark.sql("SELECT * FROM customer_orders") result.show()
Interrogation dans AWS Carnets Glue Studio
%%sql SELECT * FROM customer_orders
Réécriture automatique des requêtes
Lorsque la réécriture automatique des requêtes est activée, l'optimiseur Spark analyse vos requêtes et utilise automatiquement des vues matérialisées lorsqu'elles peuvent améliorer les performances. Par exemple, si vous exécutez la requête suivante :
result = spark.sql(""" SELECT customer_name, COUNT(*) as order_count, SUM(amount) as total_amount FROM orders GROUP BY customer_name """)
L'optimiseur Spark réécrit automatiquement cette requête pour utiliser la vue matérialisée customer_orders au lieu de traiter la table des commandes de base, à condition que la vue matérialisée soit actuelle.
Vérification de la réécriture automatique des requêtes
Pour vérifier si une requête utilise une réécriture automatique, utilisez la commande EXPLAIN EXTENDED :
spark.sql(""" EXPLAIN EXTENDED SELECT customer_name, COUNT(*) as order_count, SUM(amount) as total_amount FROM orders GROUP BY customer_name """).show(truncate=False)
Dans le plan d'exécution, recherchez le nom de la vue matérialisée dans le BatchScan opération. Si le plan le montre BatchScan glue_catalog.analytics.customer_orders au lieu de BatchScan glue_catalog.sales.orders, la requête a été automatiquement réécrite pour utiliser la vue matérialisée.
Notez que la réécriture automatique des requêtes nécessite un certain temps pour que le cache de métadonnées Spark soit rempli après la création d'une vue matérialisée. Ce processus se termine généralement en 30 secondes.
Actualisation de vues matérialisées
Vous pouvez actualiser les vues matérialisées à l'aide de deux méthodes : actualisation complète ou actualisation incrémentielle. L'actualisation complète recalcule l'intégralité de la vue matérialisée à partir de toutes les données de la table de base, tandis que l'actualisation incrémentielle traite uniquement les données qui ont changé depuis la dernière actualisation.
Actualisation complète manuelle AWS Travaux de colle
Pour actualiser complètement une vue matérialisée, procédez comme suit :
spark.sql("REFRESH MATERIALIZED VIEW customer_orders FULL") # Verify updated results result = spark.sql("SELECT * FROM customer_orders") result.show()
Actualisation incrémentielle manuelle dans AWS Travaux de colle
Pour effectuer une actualisation incrémentielle, assurez-vous que l'actualisation incrémentielle est activée dans la configuration de votre session Spark, puis exécutez :
spark.sql("REFRESH MATERIALIZED VIEW customer_orders") # Verify updated results result = spark.sql("SELECT * FROM customer_orders") result.show()
Le AWS Glue Data Catalog détermine automatiquement si l'actualisation incrémentielle est applicable en fonction de la définition de la vue et de la quantité de données modifiées. Si l'actualisation incrémentielle n'est pas possible, l'opération revient à l'actualisation complète.
Rafraîchissant AWS Carnets Glue Studio
Dans les blocs-notes, utilisez la commande magique %%sql :
%%sql REFRESH MATERIALIZED VIEW customer_orders FULL
Vérification de l'exécution de l'actualisation incrémentielle
Pour confirmer que l'actualisation incrémentielle s'est correctement exécutée, activez la journalisation du débogage dans votre AWS Travail de colle :
from awsglue.context import GlueContext from pyspark.context import SparkContext import logging sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session # Enable debug logging logger = logging.getLogger('org.apache.spark.sql') logger.setLevel(logging.DEBUG) # Execute refresh spark.sql("REFRESH MATERIALIZED VIEW customer_orders")
Recherchez le message suivant dans le AWS Journaux de travail Glue :
DEBUG RefreshMaterializedViewExec: Executed Incremental Refresh
Gestion des vues matérialisées
AWS Glue fournit des commandes SQL pour gérer le cycle de vie des vues matérialisées dans vos jobs et blocs-notes.
Décrire une vue matérialisée
Pour afficher les métadonnées relatives à une vue matérialisée, notamment sa définition, son état d'actualisation et l'horodatage de la dernière actualisation :
spark.sql("DESCRIBE EXTENDED customer_orders").show(truncate=False)
Modification d'une vue matérialisée
Pour modifier le calendrier d'actualisation d'une vue matérialisée existante, procédez comme suit :
spark.sql(""" ALTER MATERIALIZED VIEW customer_orders ADD SCHEDULE REFRESH EVERY 2 HOURS """)
Pour supprimer l'actualisation automatique :
spark.sql(""" ALTER MATERIALIZED VIEW customer_orders DROP SCHEDULE """)
Supprimer une vue matérialisée
Pour supprimer une vue matérialisée :
spark.sql("DROP MATERIALIZED VIEW customer_orders")
Cette commande supprime la définition de la vue matérialisée du AWS Collez le catalogue de données et supprimez les données de la table Iceberg sous-jacentes de votre compartiment S3.
Répertorier les vues matérialisées
Pour répertorier toutes les vues matérialisées d'une base de données :
spark.sql("SHOW VIEWS FROM analytics").show()
Autorisations pour les vues matérialisées
Pour créer et gérer des vues matérialisées, vous devez configurer les autorisations pour le rôle IAM qui crée la vue (le rôle de définition). AWS Glue prend en charge deux modèles d'autorisation :
-
Politiques IAM uniquement — Si vous gérez votre AWS Tableaux Glue Data Catalog avec politiques IAM, non AWS Lake Formation la configuration est requise.
-
AWS Lake Formation — Si vous utilisez déjà AWS Lake Formation pour gérer votre lac de données, vous pouvez configurer AWS Lake Formation autorisations pour les vues matérialisées.
Autorisations requises pour le rôle de définition
Si vous utilisez uniquement des politiques IAM :
Le rôle de définition doit disposer des autorisations IAM suivantes :
-
Sur le AWS Catalogue de données Glue — GetTable, GetTables, et CreateTable Autorisations d'API
-
Sur la base de données cible — CreateTable autorisation
-
Sur les emplacements S3 de la table source — Accès en lecture (s3) :GetObject, s3 :ListBucket)
Lorsque vous créez une vue matérialisée, l'ARN du rôle de définition est stocké dans la définition de la vue. Le AWS Glue Data Catalog assume ce rôle lors de l'exécution d'opérations d'actualisation automatique. Si le rôle de définition perd l'accès aux tables sources, les opérations d'actualisation échoueront tant que les autorisations ne seront pas restaurées.
Si vous utilisez AWS Lake Formation:
Le rôle de définition doit être le suivant : AWS Lake Formation autorisations :
-
Sur les tables sources : autorisations SELECT ou ALL sans filtres de ligne, de colonne ou de cellule
-
Sur la base de données cible : autorisation CREATE_TABLE
-
Sur le AWS Catalogue de données Glue — GetTable et CreateTable Autorisations d'API
Lorsque vous créez une vue matérialisée, l'ARN du rôle de définition est stocké dans la définition de la vue. Le AWS Glue Data Catalog assume ce rôle lors de l'exécution d'opérations d'actualisation automatique. Si le rôle de définition perd l'accès aux tables sources, les opérations d'actualisation échoueront tant que les autorisations ne seront pas restaurées.
Autorisations IAM pour AWS Travaux de colle
Votre AWS Le rôle IAM de Glue Job nécessite les autorisations suivantes :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetCatalog", "glue:GetCatalogs", "glue:GetTable", "glue:GetTables", "glue:CreateTable", "glue:UpdateTable", "glue:DeleteTable", "glue:GetDatabase", "glue:GetDatabases", "cloudwatch:PutMetricData" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:*:*:*:/aws-glue/*" ] } ] }
Si vous utilisez AWS Lake Formation, ajoutez également l'autorisation suivante :
{ "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": "*" }
Le rôle que vous utilisez pour l'actualisation automatique de la vue matérialisée doit avoir pour objectif :PassRole autorisation sur le rôle.
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::111122223333:role/materialized-view-role-name" ] } ] }
À louer AWS Glue actualise automatiquement la vue matérialisée pour vous. Le rôle doit également respecter la politique de confiance suivante qui permet au service d'assumer le rôle.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "glue.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
Si la vue matérialisée est stockée dans des compartiments S3 Tables, vous devez également ajouter l'autorisation suivante au rôle.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3tables:PutTableMaintenanceConfiguration" ], "Resource": "arn:aws:s3tables:*:123456789012:*" } ] }
Autoriser l'accès aux vues matérialisées
Si vous utilisez uniquement des politiques IAM :
Toute identité IAM avec GetTable l'autorisation sur la vue matérialisée peut l'interroger. Les utilisateurs peuvent interroger la vue matérialisée sans avoir besoin d'accéder directement aux tables sources sous-jacentes.
Si vous utilisez AWS Lake Formation:
Pour autoriser d'autres utilisateurs à interroger une vue matérialisée, utilisez AWS Lake Formation pour accorder l'autorisation SELECT sur la table de vues matérialisée. Les utilisateurs peuvent interroger la vue matérialisée sans avoir besoin d'accéder directement aux tables sources sous-jacentes.
Pour des informations détaillées sur la configuration AWS Lake Formation autorisations, voir Octroi et révocation d'autorisations sur les ressources du catalogue de données dans le AWS Lake Formation Guide du développeur.
Surveillance des opérations de vues matérialisées
Le AWS Glue Data Catalog publie des mesures et des journaux pour les opérations d'actualisation des vues matérialisées sur Amazon CloudWatch. Vous pouvez surveiller l'état d'actualisation, la durée et le volume de données traitées via CloudWatch métriques.
Affichage des journaux des tâches
Pour consulter les journaux de AWS Jobs de collage qui créent ou actualisent des vues matérialisées :
-
Ouvrez le AWS Console à colle.
-
Choisissez Jobs dans le volet de navigation.
-
Sélectionnez votre tâche et choisissez Runs.
-
Sélectionnez une exécution spécifique et choisissez Journaux pour afficher CloudWatch journaux.
Configuration des alarmes
Pour recevoir des notifications lorsque les opérations d'actualisation échouent ou dépassent la durée prévue, créez CloudWatch alarmes sur les métriques de vue matérialisées. Vous pouvez également configurer Amazon EventBridge règles pour déclencher des réponses automatisées aux événements d'actualisation.
Exemple : flux de travail complet
L'exemple suivant illustre un flux de travail complet pour créer et utiliser une vue matérialisée dans AWS Colle.
Exemple AWS Script de travail Glue
import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job args = getResolvedOptions(sys.argv, ['JOB_NAME']) sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session job = Job(glueContext) job.init(args['JOB_NAME'], args) # Create database and base table spark.sql("CREATE DATABASE IF NOT EXISTS sales") spark.sql("USE sales") spark.sql(""" CREATE TABLE IF NOT EXISTS orders ( id INT, customer_name STRING, amount DECIMAL(10,2), order_date DATE ) """) # Insert sample data spark.sql(""" 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')) """) # Create materialized view spark.sql(""" 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 """) # Query the materialized view print("Initial materialized view data:") spark.sql("SELECT * FROM customer_summary").show() # Insert additional data spark.sql(""" INSERT INTO orders VALUES (4, 'Jane Smith', 350.00, DATE('2024-01-18')), (5, 'Bob Johnson', 100.25, DATE('2024-01-19')) """) # Refresh the materialized view spark.sql("REFRESH MATERIALIZED VIEW customer_summary FULL") # Query updated results print("Updated materialized view data:") spark.sql("SELECT * FROM customer_summary").show() job.commit()
Exemple AWS Carnet Glue Studio
%%configure { "conf": { "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions", "spark.sql.catalog.glue_catalog": "org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.glue_catalog.type": "glue", "spark.sql.catalog.glue_catalog.warehouse": "s3://amzn-s3-demo-bucket/warehouse", "spark.sql.catalog.glue_catalog.glue.region": "us-east-1", "spark.sql.catalog.glue_catalog.glue.id": "111122223333", "spark.sql.catalog.glue_catalog.glue.account-id": "111122223333", "spark.sql.defaultCatalog": "glue_catalog", "spark.sql.optimizer.answerQueriesWithMVs.enabled": "true", "spark.sql.materializedViews.metadataCache.enabled": "true" } }
%%sql CREATE DATABASE IF NOT EXISTS sales
%%sql USE sales
%%sql CREATE TABLE IF NOT EXISTS orders ( id INT, customer_name STRING, amount DECIMAL(10,2), order_date DATE )
%%sql 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'))
%%sql 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
%%sql SELECT * FROM customer_summary
%%sql INSERT INTO orders VALUES (4, 'Jane Smith', 350.00, DATE('2024-01-18')), (5, 'Bob Johnson', 100.25, DATE('2024-01-19'))
%%sql REFRESH MATERIALIZED VIEW customer_summary FULL
%%sql SELECT * FROM customer_summary
System-managed vues matérialisées
Une vue matérialisée gérée par le système est une vue matérialisée qui uniquement AWS La colle peut écrire. AWS Glue écrit à la fois ses données et sa définition, et aucun autre moteur ou utilisateur ne peut les modifier. Cela protège la vue matérialisée contre les modifications involontaires, afin que vous puissiez la partager sous la forme d'un ensemble de données fiable et cohérent. AWS Glue stocke la vue matérialisée sous la forme d'une table Apache Iceberg standard dans un compartiment Amazon S3 Tables de votre compte.
System-managed les vues matérialisées nécessitent AWS Glue 6.0 ou version ultérieure. Pour en créer une, définissez la configuration de la session Spark spark.sql.mv.managed.enabled pour true. System-managed les vues matérialisées sont stockées uniquement dans les tables Amazon S3 ; les compartiments à usage général Amazon S3 ne sont pas pris en charge.
Création d'une vue matérialisée gérée par le système
Créez la vue matérialisée depuis Spark à l'aide du mot clé MANAGED, dans une session qui a spark.sql.mv.managed.enabled=true:
spark.sql(""" CREATE MANAGED 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 """)
AWS Glue calcule et écrit la vue matérialisée pour vous ; votre session Spark ne l'écrit pas directement. L'instruction CREATE MANAGED MATERIALIZED VIEW attend AWS Glue termine la création de la vue matérialisée avant qu'elle ne revienne. Cela peut donc prendre plus de temps que la création d'une vue matérialisée normale.
Comment fonctionnent les vues matérialisées gérées par le système
Lorsque vous créez une vue matérialisée gérée par le système, AWS Glue crée une table vide dans Amazon S3 Tables pour la vue matérialisée, puis exécute la requête de définition pour la renseigner. Pour suivre la progression de la création, appelez le GetTable API avec IncludeStatusDetails=true pour voir l'état de la création d'une tâche. Si la création échoue, la raison de l'échec est incluse dans le message d'erreur d'état de la table. Les actualisations sont suivies de la même manière que pour les autres vues matérialisées.
Protection contre l'écriture
Uniquement AWS Glue écrit les données de la vue matérialisée et ses métadonnées, telles que son schéma et son emplacement de stockage. Toute tentative de modification de celles-ci est rejetée, qu'elle provienne d'un autre moteur de requête, d'un AWS colle UpdateTable appel, ou écriture directe dans la table Apache Iceberg sous-jacente.
Vous pouvez toujours effectuer les opérations suivantes sur une vue matérialisée gérée par le système :
-
Actualisez la vue matérialisée. AWS Glue exécute l'actualisation et écrit les résultats pour vous.
-
Modifiez le calendrier d'actualisation et les propriétés du tableau.
-
Supprimez la vue matérialisée, si vous êtes autorisé à la supprimer.
L'évolution du schéma n'est pas prise en charge pour une vue matérialisée gérée par le système. Pour modifier la définition SQL de la vue matérialisée, supprimez la vue matérialisée et créez-la à nouveau.
Considérations et restrictions
Tenez compte des points suivants lorsque vous utilisez des vues matérialisées avec AWS Colle :
-
Les vues matérialisées nécessitent AWS Glue version 5.1 ou ultérieure.
-
Les tables sources doivent être des tables Apache Iceberg ou Apache Hive enregistrées dans AWS Catalogue de données Glue. Les tables Apache Hudi et Linux Foundation Delta Lake ne sont pas prises en charge au lancement.
-
Les tables sources doivent se trouver dans la même région et dans le même compte que la vue matérialisée.
-
Les vues matérialisées ne peuvent pas faire référence AWS Collez les vues du catalogue de données, les vues multidialectales ou d'autres vues matérialisées sous forme de tables sources.
-
Le rôle de définition de vue doit disposer d'un accès complet en lecture sur toutes les tables sources. Pour les clients utilisant des politiques IAM, cela signifie GetTables autorisation sur le AWS Collez le catalogue et accédez en lecture aux emplacements S3 sous-jacents. Pour les clients utilisant AWS Lake Formation, cela signifie l'autorisation SELECT ou ALL sans appliquer de filtres de ligne, de colonne ou de cellule.
-
Les vues matérialisées sont finalement cohérentes avec les tables sources. Pendant la fenêtre d'actualisation, les requêtes peuvent renvoyer des données périmées. Exécutez une actualisation manuelle pour une cohérence immédiate.
-
L'intervalle de rafraîchissement automatique minimum dépend de votre AWS Version à colle. Dans AWS Pour les versions de Glue antérieures à la version 6.0, l'intervalle de rafraîchissement automatique minimum est d'une heure. Dans AWS Glue 6.0 et versions ultérieures, l'intervalle de rafraîchissement automatique minimum est de 10 minutes. Cela s'applique à toutes les vues matérialisées, y compris les vues matérialisées gérées par le système.
-
L'actualisation incrémentielle prend en charge un sous-ensemble restreint d'opérations SQL. La définition de la vue doit être unique SELECT-FROM-WHERE-GROUP BY-HAVING bloc et ne peut pas contenir d'opérations d'ensemble, de sous-requêtes, le mot clé DISTINCT dans les fonctions SELECT ou d'agrégation, les fonctions de fenêtre ou les jointures autres que INNER JOIN.
-
L'actualisation incrémentielle ne prend pas en charge les fonctions définies par l'utilisateur ni certaines fonctions intégrées. Seul un sous-ensemble de fonctions intégrées à Spark SQL est pris en charge.
-
La réécriture automatique des requêtes ne prend en compte que les vues matérialisées dont les définitions appartiennent à un sous-ensemble SQL restreint similaire aux restrictions d'actualisation incrémentielle.
-
Les identificateurs contenant des caractères spéciaux autres que des caractères alphanumériques et des traits de soulignement ne sont pas pris en charge dans les requêtes CREATE MATERIALIZED VIEW. Cela s'applique à tous les types d'identificateurs, y compris catalog/namespaceles noms des tables, les noms des champs de colonne et de structure, les CTE et les alias.
-
Les colonnes de vues matérialisées commençant par le préfixe __ivm sont réservées à l'utilisation du système. Amazon se réserve le droit de modifier ou de supprimer ces colonnes dans les prochaines versions.
-
Les clauses SORT BY, LIMIT, OFFSET, CLUSTER BY et ORDER BY ne sont pas prises en charge dans les définitions de vues matérialisées.
-
Cross-Region et les tables sources multicomptes ne sont pas prises en charge.
-
Les tables référencées dans la requête de vue doivent utiliser une convention de dénomination en trois parties (par exemple, glue_catalog.my_db.my_table) car l'actualisation automatique n'utilise pas les paramètres par défaut du catalogue et de la base de données.
-
Les opérations d'actualisation complète remplacent l'intégralité du tableau et rendent les instantanés précédents indisponibles.
-
Non-deterministic les fonctions telles que rand () ou current_timestamp () ne sont pas prises en charge dans les définitions de vues matérialisées.
-
AWS Lake Formation le contrôle d'accès précis (sécurité au niveau des lignes, sécurité au niveau des colonnes, sécurité au niveau des cellules) sur les vues matérialisées n'est actuellement pas pris en charge.