Une vue matérialisée précalcule et stocke les résultats d'opérations coûteuses en temps, telles que les jointures (JOIN) et les agrégations (AGGREGATE). Ainsi, les requêtes ultérieures peuvent lire directement les résultats stockés au lieu de les recalculer.
Contexte
Une vue est une table virtuelle définie par une requête. En revanche, une vue matérialisée est une table physique qui stocke les résultats de requêtes précalculés et consomme des ressources de stockage. Pour plus de détails sur la facturation, consultez les règles de facturation.
Les vues matérialisées sont adaptées aux scénarios suivants :
Requêtes fréquemment exécutées suivant un schéma fixe.
Requêtes impliquant des opérations longues, comme les agrégations et les jointures.
Requêtes n'accédant qu'à un petit sous-ensemble des données d'une table.
Le tableau suivant compare les requêtes traditionnelles aux requêtes utilisant des vues matérialisées.
Élément | Requête traditionnelle | Requête avec vue matérialisée |
Instruction de requête | Vous interrogez directement les données à l'aide d'instructions SQL. | Créez une vue matérialisée, puis interrogez-la. L'instruction suivante crée une vue matérialisée : Interrogez la vue matérialisée : Si la réécriture de requête est activée pour la vue matérialisée, le système utilise automatiquement cette dernière lorsque vous exécutez la requête suivante : |
Caractéristiques de la requête | La requête lit les tables, effectue des jointures et applique des filtres (clause WHERE). Pour les tables source volumineuses, ces opérations sont lentes et gourmandes en ressources. | La requête lit la vue matérialisée et applique des filtres. Aucune jointure n'est nécessaire. MaxCompute fait correspondre automatiquement la requête à la vue matérialisée optimale et lit les données directement depuis celle-ci, ce qui améliore considérablement les performances de la requête. |
Commandes
Type | Description | Autorisations | Points d'entrée |
Créer une vue matérialisée (prend en charge le partitionnement et le clustering) | Crée une vue matérialisée basée sur une instruction de requête. | Nécessite l'autorisation CreateTable. | Exécutez ces commandes à l'aide des outils suivants : |
Met à jour une vue matérialisée. | Nécessite l'autorisation Alter. | ||
Modifie le cycle de vie d'une vue matérialisée. | Nécessite l'autorisation Alter. | ||
Activer ou désactiver le cycle de vie d'une vue matérialisée | Active ou désactive le cycle de vie d'une vue matérialisée. | Nécessite l'autorisation Alter. | |
Consulte les informations de base d'une vue matérialisée. | Nécessite l'autorisation Describe. | ||
Vérifie si une vue matérialisée est valide ou invalide. | Nécessite l'autorisation Describe. | ||
Répertorie toutes les vues matérialisées d'un projet, ou celles correspondant à des critères spécifiques. | Nécessite l'autorisation List. | ||
Supprime une vue matérialisée. | Nécessite l'autorisation Drop. | ||
Supprime une partition d'une vue matérialisée. | Nécessite l'autorisation Drop. | ||
Récupère automatiquement les données depuis la table source partitionnée si les données interrogées ne se trouvent pas dans la vue matérialisée. | Nécessite les autorisations Write et CreateTable. | ||
Réécrit une instruction de requête pour utiliser la vue matérialisée. | Nécessite les autorisations Write et CreateTable. | ||
Planifie des mises à jour périodiques pour une vue matérialisée. | Nécessite l'autorisation Alter. |
Limitations
Les fonctions de fenêtrage, les fonctions tabulaires définies par l'utilisateur (UDTF) et les fonctions non déterministes, telles que les fonctions scalaires définies par l'utilisateur (UDF) et les fonctions d'agrégation définies par l'utilisateur (UDAF), ne sont pas prises en charge.
Si vous devez utiliser une fonction non déterministe, définissez la propriété suivante au niveau de la session : set odps.sql.materialized.view.support.nondeterministic.function=true;.
Créer une vue matérialisée (partitionnement et clustering)
Crée une vue matérialisée à partir du résultat d'une requête. Vous pouvez éventuellement partitionner et regrouper (cluster) la vue matérialisée.
-
Limitations
Le nom de la vue matérialisée doit être unique au sein du projet et ne peut pas être identique à celui d'une table, d'une vue ou d'une autre vue matérialisée existante. Exécutez la commande
SHOW TABLES;pour afficher les noms de toutes les tables et vues matérialisées du projet.Vous ne pouvez pas créer une vue matérialisée basée sur une vue matérialisée existante.
Vous ne pouvez pas créer une vue matérialisée basée sur une table externe.
-
Remarques d'utilisation
Si la requête de définition échoue, la création de la vue matérialisée échoue également.
Les colonnes de clé de partition d'une vue matérialisée doivent provenir d'une table source. L'ordre et le nombre des colonnes de clé de partition doivent correspondre à ceux de la table source, mais leurs noms peuvent différer.
Si vous spécifiez des commentaires uniquement pour un sous-ensemble de colonnes, l'opération renvoie une erreur.
Vous pouvez spécifier à la fois le partitionnement et le clustering. Dans ce cas, les données de chaque partition possèdent les propriétés de clustering spécifiées.
Si la requête de définition contient des opérateurs non pris en charge, l'opération renvoie une erreur. Pour la liste des opérateurs pris en charge, consultez la section Réécriture de requête de vue matérialisée.
Par défaut, MaxCompute ne prend pas en charge la création d'une vue matérialisée à l'aide de fonctions non déterministes, telles que les fonctions définies par l'utilisateur (UDF) et les fonctions d'agrégation définies par l'utilisateur (UDAF). Si votre cas d'utilisation nécessite des fonctions non déterministes, exécutez la commande
set odps.sql.materialized.view.support.nondeterministic.function=true;au niveau de la session.Les vues matérialisées prennent en charge les partitions vides. Lorsqu'une partition de table source est vide, l'actualisation de la vue matérialisée crée automatiquement une partition vide correspondante.
-
Syntaxe
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [project_name.]<mv_name> [LIFECYCLE <days>] --Specifies the lifecycle. [BUILD DEFERRED] --Creates the schema without populating data. [(<col_name> [COMMENT <col_comment>], ...)] --Column comments. [DISABLE REWRITE] --Specifies whether the materialized view can be used for query rewrite. [COMMENT 'table comment'] --Table comment. [PARTITIONED BY (<col_name> [, <col_name>, ...])] --Creates the materialized view as a partitioned table. [CLUSTERED BY | RANGE CLUSTERED BY (<col_name> [, <col_name>, ...]) [SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])] INTO <number_of_buckets> BUCKETS] --Sets the shuffle and sort properties for a clustered table. [REFRESH EVERY <num> {MINUTES | HOURS | DAYS}] [TBLPROPERTIES("compressionstrategy"="{normal|high|extreme}", --Specifies the data storage compression strategy for the table. "enable_auto_substitute"="true", --Specifies whether to enable query passthrough to the source table when a partition does not exist. "enable_auto_refresh"="true", --Specifies whether to enable automatic refresh. "refresh_interval_minutes"="120", --Specifies the refresh interval. "only_refresh_max_pt"="true" --For partitioned materialized views, automatically refreshes only the latest partition from the source table. )] AS <select_statement>; -
Paramètres
Paramètre
Obligatoire
Description
IF NOT EXISTS
Non
Si vous ne spécifiez pas IF NOT EXISTS et que la vue matérialisée existe déjà, l'opération échoue avec une erreur.
project_name
Non
Nom du projet MaxCompute pour la vue matérialisée. Si vous omettez ce paramètre, le projet actuel est utilisé. Pour afficher le nom de votre projet, connectez-vous à la console MaxCompute, sélectionnez une région, puis accédez à Workspace > Projects.
mv_name
Oui
Nom de la vue matérialisée.
days
Non
Cycle de vie de la vue matérialisée en jours. La valeur doit être un entier compris entre 1 et 37231.
BUILD DEFERRED
Non
Si spécifié, crée le schéma de la vue matérialisée sans y insérer de données.
col_name
Non
Nom d'une colonne dans la vue matérialisée.
col_comment
Non
Commentaire pour une colonne.
DISABLE REWRITE
Non
Désactive la réécriture de requête pour la vue matérialisée. Par défaut, la réécriture de requête est activée. Exécutez
ALTER MATERIALIZED VIEW [project_name.]<mv_name> DISABLE REWRITE;pour désactiver la réécriture de requête, etALTER MATERIALIZED VIEW [project_name.]<mv_name> ENABLE REWRITE;pour l'activer.PARTITIONED BY
Non
Colonnes de clé de partition. Utilisez ce paramètre pour créer une vue matérialisée partitionnée.
CLUSTERED BY|RANGE CLUSTERED BY
Non
Propriété de brassage (shuffle) pour la création d'une table clusterisée.
SORTED BY
Non
Propriété de tri pour la création d'une table clusterisée.
REFRESH EVERY
Non
Intervalle d'actualisation planifié pour la vue matérialisée. Les unités valides sont MINUTES, HOURS ou DAYS.
number_of_buckets
Non
Nombre de buckets lors de la création d'une table clusterisée.
TBLPROPERTIES
Non
compressionstrategy : spécifie la stratégie de compression du stockage des données. Les valeurs valides sont
normal,highetextreme. enable_auto_substitute : spécifie s'il faut activer la transparence des requêtes vers la table source partitionnée lorsqu'une partition n'existe pas. Pour plus d'informations, consultez la section Réécriture de requête de vue matérialisée.enable_auto_refresh : facultatif. Définissez cette propriété sur
truepour activer l'actualisation automatique des données.refresh_interval_minutes : ce paramètre est requis uniquement lorsque
enable_auto_refreshest défini surtrue. Il spécifie l'intervalle d'actualisation en minutes.only_refresh_max_pt : facultatif. Cette propriété s'applique uniquement aux vues matérialisées partitionnées. Si elle est définie sur
true, seule la dernière partition de la table source est actualisée.
select_statement
Oui
Instruction SELECT qui définit la vue matérialisée. Pour plus d'informations, consultez la section Syntaxe SELECT.
-
Exemples
-
Exemple 1 : Créer une vue matérialisée
-
Créez deux tables,
mf_tetmf_t1, et insérez des données.CREATE TABLE IF NOT EXISTS mf_t( id bigint, value bigint, name string) PARTITIONED BY (ds STRING); ALTER TABLE mf_t ADD PARTITION (ds='1'); INSERT INTO mf_t PARTITION (ds='1') VALUES (1,10,'kyle'),(2,20,'xia'); SELECT * FROM mf_t WHERE ds ='1'; -- The following result is returned. +------------+------------+------------+------------+ | id | value | name | ds | +------------+------------+------------+------------+ | 1 | 10 | kyle | 1 | | 2 | 20 | xia | 1 | +------------+------------+------------+------------+ CREATE TABLE IF NOT EXISTS mf_t1( id bigint, value bigint, name string) PARTITIONED BY (ds STRING); ALTER TABLE mf_t1 ADD PARTITION (ds='1'); INSERT INTO mf_t1 PARTITION (ds='1') VALUES (1,10,'kyle'),(3,20,'john'); SELECT * FROM mf_t1 WHERE ds ='1'; -- The following result is returned. +------------+------------+------------+------------+ | id | value | name | ds | +------------+------------+------------+------------+ | 1 | 10 | kyle | 1 | | 3 | 20 | john | 1 | +------------+------------+------------+------------+ -
Créez une vue matérialisée.
-
Exemple 1 : Créez une vue matérialisée partitionnée avec
dscomme clé de partition.CREATE MATERIALIZED VIEW mf_mv LIFECYCLE 7 ( key comment 'unique id', value comment 'input value', ds comment 'partition' ) PARTITIONED BY (ds) AS SELECT t1.id AS key, t1.value AS value, t1.ds AS ds FROM mf_t AS t1 JOIN mf_t1 AS t2 ON t1.id = t2.id AND t1.ds=t2.ds AND t1.ds='1'; --Query the materialized view. SELECT * FROM mf_mv WHERE ds =1; +------------+------------+------------+ | key | value | ds | +------------+------------+------------+ | 1 | 10 | 1 | +------------+------------+------------+ -
Exemple 2 : Créez une vue matérialisée non partitionnée et clusterisée.
CREATE MATERIALIZED VIEW mf_mv2 LIFECYCLE 7 CLUSTERED BY (key) SORTED BY (value) INTO 1024 buckets AS SELECT t1.id AS key, t1.value AS value, t1.ds AS ds FROM mf_t AS t1 JOIN mf_t1 AS t2 ON t1.id = t2.id AND t1.ds=t2.ds AND t1.ds='1'; -
Exemple 3 : Créez une vue matérialisée partitionnée et clusterisée.
CREATE MATERIALIZED VIEW mf_mv3 LIFECYCLE 7 PARTITIONED BY (ds) CLUSTERED BY (key) SORTED BY (value) INTO 1024 buckets AS SELECT t1.id AS key, t1.value AS value, t1.ds AS ds FROM mf_t AS t1 JOIN mf_t1 AS t2 ON t1.id = t2.id AND t1.ds=t2.ds AND t1.ds='1';
-
-
-
Exemple 2 : Créer une partition vide en actualisant depuis une partition source vide.
CREATE TABLE mf_blank_pts(id bigint ,name string) PARTITIONED BY (ds bigint); ALTER TABLE mf_blank_pts ADD PARTITION (ds = 1); ALTER TABLE mf_blank_pts ADD PARTITION (ds = 2); INSERT INTO TABLE mf_blank_pts PARTITION(ds=1) VALUES (1,"aba"),(2,"cbd"); CREATE MATERIALIZED VIEW IF NOT EXISTS mf_mv_blank_pts PARTITIONED BY (ds) AS SELECT id,name,ds FROM mf_blank_pts; ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds>0); SHOW PARTITIONS mf_mv_blank_pts; --The partition ds=2 in the source table is empty. Refreshing partitions where ds > 0 creates a corresponding empty partition in the materialized view. ds=1 ds=2 SELECT * FROM mf_mv_blank_pts WHERE ds>0; --The result shows that only the partition ds=1 contains data. +------------+------------+------------+ | id | name | ds | +------------+------------+------------+ | 1 | aba | 1 | | 2 | cbd | 1 | +------------+------------+------------+
-
Mettre à jour une vue matérialisée
Lorsque les données des tables ou partitions source changent, la vue matérialisée devient invalide et ne peut plus être utilisée pour la réécriture de requête. Vérifiez l'état de la vue et reconstruisez-la si nécessaire. Pour plus d'informations, consultez la section Interroger les informations sur une vue matérialisée.
-
Notes
L'opération de reconstruction met uniquement à jour les tables ou partitions source modifiées.
Vous pouvez activer l'actualisation planifiée pour mettre à jour les données automatiquement. Pour plus d'informations, consultez la rubrique Actualisation planifiée des vues matérialisées.
-
Syntaxe
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> REBUILD [PARTITION (<ds>=max_pt(<table_name>),<expression1>...)]; -
Paramètres
Parameter
Required
Description
project_name
No
Nom du projet MaxCompute associé à la vue matérialisée. Si vous omettez ce paramètre, le projet actuel est utilisé. Pour afficher le nom de votre projet, connectez-vous à la console MaxCompute, sélectionnez une région, puis accédez à Workspace > Projects.
mv_name
Yes
Nom de la vue matérialisée à mettre à jour.
ds
No
Nom du champ de partition dans la vue matérialisée.
max_pt
No
Récupère la valeur de partition maximale à partir de la table ou de la vue matérialisée spécifiée (
table_name).expression
No
Expression spécifiant les partitions à reconstruire. Ce paramètre est utilisé pour les vues matérialisées partitionnées.
-
Exemples
-
Exemple 1 : Mettre à jour une vue matérialisée non partitionnée.
-- Create a non-partitioned table. CREATE TABLE count_test(a BIGINT, b BIGINT); -- Create a non-partitioned materialized view. CREATE MATERIALIZED VIEW count_mv LIFECYCLE 7 AS SELECT COUNT(*) FROM count_test; -- Update the non-partitioned materialized view. ALTER MATERIALIZED VIEW count_mv rebuild; -
Exemple 2 : Mettre à jour une partition de vue matérialisée.
ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds='1'); -
Exemple 3 : Mettre à jour des partitions par condition.
ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds>='1', ds<='2'); -
Exemple 4 : Mettre à jour la dernière partition.
-- Create a sample partitioned table. CREATE TABLE IF NOT EXISTS sale_detail_jt (shop_name STRING , customer_id STRING , total_price DOUBLE ) PARTITIONED BY (sale_date STRING ,region STRING ); ALTER TABLE sale_detail_jt ADD PARTITION (sale_date='2013',region='china'); INSERT INTO sale_detail_jt PARTITION (sale_date='2013',region='china') VALUES ('s1','c1',100.1), ('s2','c2',100.2), ('s3','c3',100.3); ALTER TABLE sale_detail_jt ADD PARTITION (sale_date='2013',region='en'); INSERT INTO sale_detail_jt PARTITION (sale_date='2013',region='en') VALUES ('t1','c5',200.0), ('t2','c6',300.0); -- View partition data. SELECT * FROM sale_detail_jt WHERE sale_date='2013' AND region='china'; +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ | s1 | c1 | 100.1 | 2013 | china | | s2 | c2 | 100.2 | 2013 | china | | s5 | c2 | 100.2 | 2013 | china | +-----------+-------------+-------------+-----------+--------+ -- View partition data. SELECT * FROM sale_detail_jt WHERE sale_date='2013' AND region='en'; +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ | t1 | c5 | 200.0 | 2013 | en | | t2 | c6 | 300.0 | 2013 | en | +-----------+-------------+-------------+-----------+--------+ -- Create a materialized view. CREATE MATERIALIZED VIEW mv_deferred BUILD DEFERRED AS SELECT * FROM sale_detail_jt; -- Query the materialized view mv_deferred. SELECT * FROM mv_deferred; -- The following result is returned: +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ +-----------+-------------+-------------+-----------+--------+ -- Create a partitioned table. CREATE TABLE mf_part (id bigint,name string) PARTITIONED BY (dt string); -- Insert data. INSERT INTO mf_part PARTITION(dt='2013') VALUES(1,'name1'),(2,'name2'); -- Query data. SELECT * FROM mf_part WHERE dt='2013'; -- The following result is returned: +------------+------+----+ | id | name | dt | +------------+------+----+ | 1 | name1 | 2013 | | 2 | name2 | 2013 | +------------+------+----+ -- Create a partitioned materialized view. CREATE MATERIALIZED VIEW mv_rebuild BUILD DEFERRED PARTITIONED BY (dt) AS SELECT * FROM mf_part; -- Query data from the materialized view. SELECT * FROM mv_rebuild WHERE dt='2013'; -- The following result is returned: +------------+------+----+ | id | name | dt | +------------+------+----+ +------------+------+----+ -- Refresh the latest partition data. ALTER MATERIALIZED VIEW mv_rebuild REBUILD PARTITION(dt=max_pt('mf_part')); -- Query data from the materialized view. SELECT * FROM mv_rebuild WHERE dt='2013'; -- The following result is returned: +------------+------+----+ | id | name | dt | +------------+------+----+ | 1 | name1 | 2013 | | 2 | name2 | 2013 | +------------+------+----+
-
Modifier le cycle de vie d'une vue matérialisée
Modifie le cycle de vie d'une vue matérialisée existante.
-
Syntaxe
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> SET LIFECYCLE <days>; -
Paramètres
Parameter
Required
Description
project_name
No
Nom du projet MaxCompute associé à la vue matérialisée. Si vous omettez ce paramètre, le projet actuel est utilisé. Pour afficher le nom de votre projet, connectez-vous à la console MaxCompute, sélectionnez une région, puis accédez à Workspace > Projects.
mv_name
Yes
Nom de la vue matérialisée à modifier.
days
Yes
Nouveau cycle de vie de la vue matérialisée, exprimé en jours.
-
Exemple
-- Set the lifecycle of the materialized view to 10 days. ALTER MATERIALIZED VIEW count_mv SET LIFECYCLE 10;
Activer ou désactiver le cycle de vie d'une vue matérialisée
Active ou désactive la gestion du cycle de vie pour une vue matérialisée.
-
Syntaxe
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> [<pt_spec>] {enable|disable} LIFECYCLE; -
Paramètres
Parameter
Required
Description
project_name
No
Nom du projet MaxCompute associé à la vue matérialisée. Si vous omettez ce paramètre, le projet actuel est utilisé. Pour afficher le nom de votre projet, connectez-vous à la console MaxCompute, sélectionnez une région, puis accédez à Workspace > Projects.
mv_name
Yes
Nom de la vue matérialisée à modifier.
pt_spec
No
Partition à modifier. Le format est
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...), où partition_col représente une colonne de partition et partition_col_value sa valeur.enable
disable
Yes
enablesignifie activé etdisablesignifie désactivé. Si l'option est désactivée, la partition ou la table n'est pas soumise à la gestion du cycle de vie. -
Exemples
-
Exemple 1 : Activer la gestion du cycle de vie pour une partition d'une vue matérialisée.
ALTER MATERIALIZED VIEW mf_mv_blank_pts PARTITION (ds='1') enable LIFECYCLE; -
Exemple 2 : Désactiver la gestion du cycle de vie pour une partition d'une vue matérialisée.
ALTER MATERIALIZED VIEW mf_mv_blank_pts PARTITION (ds='1') disable LIFECYCLE;
-
Informations sur les vues matérialisées
Affiche les détails d'une vue matérialisée, tels que son schéma et sa date de modification.
-
Syntaxe
DESC EXTENDED [<project_name>.]<mv_name>; -
Paramètres
Parameter
Required
Description
project_name
No
Nom du projet MaxCompute associé à la vue matérialisée. Si vous omettez ce paramètre, le projet actuel est utilisé. Pour afficher le nom de votre projet, connectez-vous à la console MaxCompute, sélectionnez une région, puis accédez à Workspace > Projects.
mv_name
Yes
Nom de la vue matérialisée à interroger.
-
Exemple
DESC EXTENDED mv;La commande renvoie la sortie suivante :
RemarqueCet exemple de sortie est disponible uniquement avec MaxCompute client v0.43 ou version ultérieure. Pour plus d'informations, consultez la rubrique Se connecter à MaxCompute à l'aide d'odpscmd.
+------------------------------------------------------------------------------------+ | Owner: ALIYUN$$****@***.aliyunid.com | | Project: m**** | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2023-05-30 13:16:07 | | LastDDLTime: 2023-05-30 13:16:07 | | LastModifiedTime: 2023-05-30 13:16:07 | +------------------------------------------------------------------------------------+ | MaterializedView: YES | | ViewText: select id,name from mf_refresh | | Rewrite Enabled: true | | AutoRefresh Enabled: true | | Refresh Interval Minutes: 10 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | ExtendedLabel | Nullable | DefaultValue | Comment | +------------------------------------------------------------------------------------+ | id | bigint | | | true | NULL | | | name | string | | | true | NULL | | +------------------------------------------------------------------------------------+ | Extended Info: | +------------------------------------------------------------------------------------+ | IsOutdated: false | | TableID: 569ec712873e44b3868e79b7a8beabab | | IsArchived: false | | PhysicalSize: 1875 | | FileNum: 2 | | StoredAs: CFile | | CompressionStrategy: normal | | odps.timemachine.retention.days: 1 | | ColdStorageStatus: N/A | | encryption_enable: false | +------------------------------------------------------------------------------------+ | AutoRefresh History: | +------------------------------------------------------------------------------------+ | InstanceId | Status | StartTime | EndTime | +------------------------------------------------------------------------------------+ | 20230619070546735ghwl1****** | TERMINATED | 2023-06-19 15:05:46 | 2023-06-19 15:05:47 | | 20230619065545586gwllc****** | TERMINATED | 2023-06-19 14:55:45 | 2023-06-19 14:55:46 | | 20230619064544463gcjgom****** | TERMINATED | 2023-06-19 14:45:44 | 2023-06-19 14:45:45 | | 20230619063543334gzxs2d****** | TERMINATED | 2023-06-19 14:35:43 | 2023-06-19 14:35:44 | | 2023061906254257gi21w2****** | TERMINATED | 2023-06-19 14:25:42 | 2023-06-19 14:25:43 | | 20230619061540813giacg8****** | TERMINATED | 2023-06-19 14:15:41 | 2023-06-19 14:15:41 | | 20230619060539674gswjq9****** | TERMINATED | 2023-06-19 14:05:39 | 2023-06-19 14:05:40 | | 20230619055538578gvdjk****** | TERMINATED | 2023-06-19 13:55:38 | 2023-06-19 13:55:40 | | 20230619054537356glqdne****** | TERMINATED | 2023-06-19 13:45:37 | 2023-06-19 13:45:38 | | 2023061905353687gcc5pl****** | TERMINATED | 2023-06-19 13:35:36 | 2023-06-19 13:35:37 | +------------------------------------------------------------------------------------+
Interroger l'état d'une vue matérialisée
Interrogez l'état d'une vue matérialisée pour vérifier sa validité. Une vue matérialisée peut se trouver dans l'un des états suivants :
-
Valide
MaxCompute lit les données directement depuis la vue matérialisée au lieu de la table source.
-
Invalide
MaxCompute ne peut pas lire les données depuis la vue matérialisée. Les requêtes basculent vers la table source sans accélération des performances.
Utilisez la fonction suivante pour vérifier si les données d'une vue matérialisée sont valides.
-
Syntaxe
boolean materialized_view_is_valid(<mv_name>,<partition_value>); -
Exemples
Vérifie si les données d'une vue matérialisée sont cohérentes avec les dernières données de la table source. La fonction renvoie
truesi les données sont cohérentes etfalsedans le cas contraire.-
SELECT materialized_view_is_valid("count_mv"); -
SELECT materialized_view_is_valid("mf_mv_blank_pts","1");
-
Répertorier les vues matérialisées
Répertorie toutes les vues matérialisées d'un projet, ou uniquement celles correspondant à un modèle spécifique.
La commande SHOW MATERIALIZED VIEWS nécessite MaxCompute client (odpscmd) v0.43.0 ou version ultérieure.
-
Syntaxe
-- Lists all materialized views in the project. SHOW MATERIALIZED VIEWS; -- Lists materialized views in the project that match the <materialized_view> pattern. SHOW MATERIALIZED VIEWS LIKE '<materialized_view>'; -
Exemple
-- Lists materialized views that start with 'test'. The asterisk (*) is a wildcard. SHOW MATERIALIZED VIEWS LIKE 'test*';La commande renvoie le résultat suivant :
ALIYUN$account_name:test_two_mv ALIYUN$account_name:test_create_one_mv
Supprimer une vue matérialisée
Supprime une vue matérialisée.
-
Syntaxe
DROP MATERIALIZED VIEW [IF EXISTS] [<project_name>.]<mv_name> [purge]; -
Paramètres
Parameter
Required
Description
IF EXISTS
No
Si vous ne spécifiez pas IF EXISTS, l'opération renvoie une erreur si la vue matérialisée n'existe pas.
project_name
No
Nom du projet MaxCompute associé à la vue matérialisée. Si vous omettez ce paramètre, le projet actuel est utilisé. Pour afficher le nom de votre projet, connectez-vous à la console MaxCompute, sélectionnez une région, puis accédez à Workspace > Projects.
mv_name
Yes
Nom de la vue matérialisée à supprimer.
purge
No
Si vous spécifiez
purge, l'opération supprime immédiatement les données de la vue matérialisée. -
Exemples
-
Supprimez la vue matérialisée
count_mv.DROP MATERIALIZED VIEW count_mv; -
Supprimez la vue matérialisée
count_mvet supprimez immédiatement ses données.DROP MATERIALIZED VIEW count_mv purge;
-
Supprimer des partitions d'une vue matérialisée
Supprime une ou plusieurs partitions d'une vue matérialisée existante.
-
Syntaxe
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> DROP [IF EXISTS] PARTITION <pt_spec> [PARTITION <pt_spec>, PARTITION <pt_spec>....]; -
Paramètres
Parameter
Required
Description
project_name
No
Nom du projet MaxCompute associé à la vue matérialisée. Si vous omettez ce paramètre, le projet actuel est utilisé. Pour afficher le nom de votre projet, connectez-vous à la console MaxCompute, sélectionnez une région, puis accédez à Workspace > Projects.
mv_name
Yes
Nom de la vue matérialisée partitionnée dont vous souhaitez supprimer des partitions.
IF EXISTS
No
Si vous omettez IF EXISTS et que la vue matérialisée n'existe pas, une erreur est renvoyée.
pt_spec
Yes
Partitions à supprimer. Vous devez spécifier au moins une partition. Le format est
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col spécifie la colonne de partition et partition_col_value spécifie la valeur de partition. -
Exemples
-
Exemple 1 : Supprimer une partition d'une vue matérialisée partitionnée.
ALTER MATERIALIZED VIEW mf_mv_blank_pts DROP PARTITION (ds='1'); -
Exemple 2 : Supprimer des partitions répondant à une condition spécifiée d'une vue matérialisée partitionnée.
ALTER MATERIALIZED VIEW mf_mv_blank_pts DROP PARTITION (ds>='1' AND ds<='2');
-
Transparence des requêtes pour les vues matérialisées
Une vue matérialisée partitionnée peut ne pas contenir de données pour toutes les partitions, par exemple si vous actualisez uniquement les plus récentes. Lorsqu'une requête cible une partition dépourvue de données dans la vue matérialisée, le système bascule automatiquement vers la table source partitionnée. La figure suivante illustre ce processus.

Pour activer la fonctionnalité de requête transparente pour une vue matérialisée, définissez le paramètre suivant :
Lors de la création de la vue matérialisée, ajoutez la configuration "enable_auto_substitute"="true" à tblproperties.
L'exemple suivant montre comment utiliser une vue matérialisée prenant en charge les requêtes transparentes.
-
Créez une vue matérialisée partitionnée prenant en charge les requêtes transparentes.
-- Create a source table named src. CREATE TABLE src(id bigint,name string) PARTITIONED BY (dt string); -- Insert data. INSERT INTO src PARTITION(dt='20210101') VALUES(1,'Alex'); INSERT INTO src PARTITION(dt='20210102') VALUES(2,'Flink'); -- Create a partitioned materialized view that supports penetration query. CREATE MATERIALIZED VIEW IF NOT EXISTS mv LIFECYCLE 7 PARTITIONED BY (dt) tblproperties("enable_auto_substitute"="true") AS SELECT id, name, dt FROM src; -
Interrogez les données de la partition
20210101dans la vue matérialiséemv.SELECT * FROM mv WHERE dt='20210101'; -
Interrogez les données de la partition
20210102dans la vue matérialiséemv. Le système effectue automatiquement une requête transparente sur la table source car cette partition n'est pas matérialisée.SELECT * FROM mv WHERE dt = '20210102'; -- Because the data for the 20210102 partition is not materialized, the query is rewritten to access the source table. This is equivalent to: SELECT * FROM (SELECT id, name, dt FROM src WHERE dt='20210102') t; -
Interrogez les données d'une plage de partitions dans la vue matérialisée
mv. Le système effectue automatiquement une requête transparente sur la table source pour les données non matérialisées et les combine avec les données matérialisées à l'aide d'une opérationUNIONavant de renvoyer le résultat.SELECT * FROM mv WHERE dt >= '20201230' AND dt<='20210102' AND id=5; -- Because data for partitions 20201230 and 20210102 is not materialized, the query is rewritten to access the source table. This is equivalent to: SELECT * FROM (SELECT id, name, dt FROM src WHERE dt='20201230' OR dt='20210102' UNION ALL SELECT * FROM mv WHERE dt='20210101' ) t WHERE id = 5;
Règles de facturation
Les coûts des vues matérialisées se composent de deux éléments :
-
Frais de stockage
Les vues matérialisées consomment du stockage physique, ce qui entraîne des frais de stockage facturés selon le modèle de paiement à l'utilisation. Pour plus d'informations, consultez la rubrique Tarification du stockage (paiement à l'utilisation).
-
Coûts de calcul
La création, la mise à jour et l'interrogation d'une vue matérialisée, y compris les réécritures de requête lorsque la vue est valide, consomment des ressources de calcul et engendrent des coûts de calcul.
Si votre projet MaxCompute utilise un plan d'abonnement , aucun frais supplémentaire n'est facturé.
-
Si votre projet MaxCompute utilise un plan de paiement à l'utilisation , MaxCompute calcule les coûts en fonction de la complexité SQL et du volume de données d'entrée. Pour plus d'informations, consultez les rubriques Tarification SQL Standard. Notez les points suivants :
L'instruction SQL utilisée pour actualiser une vue matérialisée est identique à sa requête de définition. Si le projet est lié à un groupe de ressources de calcul sous abonnement, l'opération utilise vos ressources achetées sans coût supplémentaire. Si le projet utilise un groupe de ressources de paiement à l'utilisation, le coût dépend du volume de données d'entrée et de la complexité SQL. Après une actualisation, des frais de stockage sont facturés en fonction de la taille réelle de la vue matérialisée.
Lorsqu'une vue matérialisée est valide, la réécriture de requête lit les données depuis la vue. Le volume de données d'entrée dépend de la vue matérialisée, et non de la table source. Si la vue est invalide, la réécriture de requête n'est pas disponible et les requêtes lisent directement depuis la table source. Pour plus d'informations, consultez la section Interroger l'état d'une vue matérialisée.
Lorsqu'une vue matérialisée est construite à partir de jointures multi-tables, un gonflement des données peut se produire. La lecture depuis la vue matérialisée ne réduit pas toujours les coûts par rapport à la lecture depuis les tables source.
Références
Pour plus d'informations sur les réécritures de requête des vues matérialisées, consultez la rubrique Réécriture de requête de vue matérialisée.
Pour plus d'informations sur les actualisations planifiées des vues matérialisées, consultez la rubrique Actualisation planifiée des vues matérialisées.