Tous les produits
Search
Centre de documentation

MaxCompute:Opérations sur les vues matérialisées

Dernière mise à jour :Aug 21, 2026

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.

SELECT empid, deptname  
FROM emps JOIN depts 
ON emps.deptno=depts.deptno 
WHERE hire_date >= '2018-01-01';

Créez une vue matérialisée, puis interrogez-la.

L'instruction suivante crée une vue matérialisée :

CREATE MATERIALIZED VIEW mv 
    AS SELECT empid, deptname, hire_date  
    FROM emps JOIN depts 
    ON emps.deptno=depts.deptno 
    WHERE hire_date >= '2016-01-01';

Interrogez la vue matérialisée :

SELECT empid, deptname FROM mv 
    WHERE hire_date >= '2018-01-01';

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 :

SELECT empid, deptname 
    FROM emps JOIN depts 
    ON emps.deptno=depts.deptno 
    WHERE hire_date >= '2018-01-01';
    -- This is equivalent to the following statement.
    SELECT empid, deptname FROM mv 
    WHERE hire_date >= '2018-01-01';

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 :

Mettre à jour une vue matérialisée

Met à jour une vue matérialisée.

Nécessite l'autorisation Alter.

Modifier le cycle de vie d'une vue matérialisée

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.

Consulter les informations d'une vue matérialisée

Consulte les informations de base d'une vue matérialisée.

Nécessite l'autorisation Describe.

Consulter le statut d'une vue matérialisée

Vérifie si une vue matérialisée est valide ou invalide.

Nécessite l'autorisation Describe.

Lister les vues matérialisées d'un projet

Répertorie toutes les vues matérialisées d'un projet, ou celles correspondant à des critères spécifiques.

Nécessite l'autorisation List.

Supprimer une vue matérialisée

Supprime une vue matérialisée.

Nécessite l'autorisation Drop.

Supprimer une partition de vue matérialisée

Supprime une partition d'une vue matérialisée.

Nécessite l'autorisation Drop.

Transparence des requêtes de vue matérialisée

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éécriture de requête de vue matérialisée

Réécrit une instruction de requête pour utiliser la vue matérialisée.

Nécessite les autorisations Write et CreateTable.

Planifier les mises à jour d'une vue matérialisée

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.

Remarque

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, et ALTER 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, high et extreme. 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 true pour activer l'actualisation automatique des données.

    • refresh_interval_minutes : ce paramètre est requis uniquement lorsque enable_auto_refresh est défini sur true. 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

      1. Créez deux tables, mf_t et mf_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          |
        +------------+------------+------------+------------+
      2. Créez une vue matérialisée.

        • Exemple 1 : Créez une vue matérialisée partitionnée avec ds comme 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

    enable signifie activé et disable signifie 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 :

    Remarque

    Cet 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 true si les données sont cohérentes et false dans 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.

Remarque

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_mv et 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.

  1. 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;
  2. Interrogez les données de la partition 20210101 dans la vue matérialisée mv.

    SELECT * FROM mv WHERE dt='20210101';
  3. Interrogez les données de la partition 20210102 dans la vue matérialisée mv. 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;
  4. 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ération UNION avant 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.