Tous les produits
Search
Centre de documentation

AnalyticDB:CREATE MATERIALIZED VIEW

Dernière mise à jour :Sep 17, 2026

Cette rubrique décrit l'instruction CREATE MATERIALIZED VIEW. Utilisez cette instruction pour créer une vue matérialisée avec une politique d'actualisation complète ou incrémentielle (fast refresh) et définir son calendrier d'actualisation.

Syntaxe

CREATE [OR REPLACE] MATERIALIZED VIEW mv_name
[mv_definition]
[mv_properties]
[COMMENT 'view_comment']
[REFRESH {COMPLETE|FAST}]
[ON {DEMAND|OVERWRITE}]
[START WITH date] [NEXT date]
[{DISABLE|ENABLE} QUERY REWRITE]
AS 
query_body

mv_definition:
  ({column_name column_type [column_attributes] [ column_constraints ] [COMMENT 'column_comment']
  | table_constraints}
  [, ... ])
  [table_attribute]
  [partition_options]
  [index_all]
  [storage_policy]
  [block_size]
  [engine]
  [table_properties]

Paramètres

OR REPLACE

Facultatif

Modifiable après la création : Non

Ce paramètre est pris en charge uniquement par les clusters dont la version du noyau est 3.1.4.7 ou ultérieure.
  • Si aucune vue matérialisée portant le même nom n'existe, le système en crée une nouvelle.

  • Si une vue matérialisée portant le même nom existe déjà, le système crée une vue temporaire, la remplit avec les nouvelles données, puis remplace la vue matérialisée d'origine.

mv_definition

Facultatif

Modifiable après la création : Non

Définit le schéma de la vue matérialisée.

Si vous omettez cette clause, le système déduit le schéma à partir du corps de la requête (query_body). Par défaut, le système définit une clé primaire, crée des index sur toutes les colonnes, définit la stratégie de stockage sur le stockage chaud et utilise le moteur XUANWU.

Pour définir manuellement le schéma d'une vue matérialisée, y compris sa clé de distribution, sa clé de partition, sa clé primaire, ses index et sa stratégie de stockage des données chaudes/froides, utilisez la même syntaxe que l'instruction CREATE TABLE. Par exemple, si vous ne souhaitez pas indexer toutes les colonnes, utilisez le mot-clé INDEX pour spécifier les colonnes à indexer. Pour réduire les coûts de stockage, vous pouvez également définir une stratégie de stockage mixte chaud/froid ou même conserver uniquement les données de la dernière année.

Règles relatives à la clé primaire
  • Actualisation complète : Si aucune clé primaire n'est explicitement définie, le système génère automatiquement la colonne __adb_auto_id__ en tant que clé primaire de la vue matérialisée. Si vous souhaitez définir explicitement une clé primaire, utilisez n'importe quelle colonne issue de la sortie du corps de la requête (query_body) comme clé primaire de la vue matérialisée.

  • Actualisation incrémentielle (fast refresh) : La clé primaire, qu'elle soit explicitement définie ou générée automatiquement, doit respecter les règles suivantes :

    • Pour une requête d'agrégation groupée (requête d'agrégation avec une clause GROUP BY), la clé primaire doit correspondre aux colonnes de la clause GROUP BY. Par exemple, si vous utilisez GROUP BY a,b, la clé primaire doit être a et b.

    • Pour les requêtes d'agrégation non groupées (sans clause GROUP BY), la clé primaire doit être une constante.

    • Pour les requêtes sans agrégation, la clé primaire doit être identique à celle de la table de base. Par exemple, si la clé primaire de la table de base est PRIMARY KEY(sale_id,sale_date), la clé primaire de la vue matérialisée doit également être PRIMARY KEY(sale_id,sale_date).

Recommandations

Pour des performances de requête optimales, nous vous recommandons de définir une clé primaire, une clé de distribution et une clé de partition lors de la création d'une vue matérialisée.

mv_properties

Facultatif

Modifiable après la création : Oui (en utilisant ALTER MATERIALIZED VIEW)

Ce paramètre est pris en charge uniquement par les clusters Enterprise Edition, Basic Edition et Data Lakehouse Edition dont la version du noyau est 3.1.9.3 ou ultérieure.

Définit la stratégie de ressources pour la vue matérialisée. Cela inclut mv_resource_group pour l'allocation des ressources et mv_refresh_hints pour la configuration des tâches d'actualisation. La valeur doit être au format JSON. Exemple :

MV_PROPERTIES='{
      "mv_resource_group":"<resource_group_name>",
      "mv_refresh_hints":{"<hint_name>":"<hint_value>"}
    }'
mv_resource_group

Spécifie le groupe de ressources utilisé pour créer et actualiser la vue matérialisée. S'il n'est pas spécifié, le groupe de ressources par défaut user_default est utilisé.

La valeur de ce paramètre peut être un groupe de ressources Interactive ou Job du moteur XIHE. La différence réside dans le fait que les groupes de ressources Job provisionnent les ressources à la demande, ce qui introduit généralement une latence de quelques secondes ou minutes. Si vous tolérez bien la latence d'actualisation, spécifiez un groupe de ressources Job. Une vue matérialisée utilisant un groupe de ressources Job est également appelée vue matérialisée élastique. Pour augmenter la vitesse d'actualisation d'une vue matérialisée élastique, configurez le paramètre elastic_job_max_acu dans mv_refresh_hints afin de modifier la quantité maximale de ressources que la vue matérialisée peut utiliser. Pour plus de détails sur l'utilisation, consultez la section Exemple de vue matérialisée élastique ci-dessous.

Vous pouvez afficher les groupes de ressources disponibles pour votre cluster sur la page Resource Groups de la console ou en appelant l'opération DescribeDBResourceGroup.

L'opération échoue si le groupe de ressources spécifié n'existe pas.

mv_refresh_hints

Spécifie les paramètres de configuration de la vue matérialisée. Pour obtenir la liste des paramètres pris en charge et leur utilisation, consultez la section Hints courants.

REFRESH [COMPLETE | FAST]

Facultatif

Valeur par défaut : COMPLETE

Modifiable après la création : Non

Définit la politique d'actualisation de la vue matérialisée. Pour plus d'informations sur les différences entre les politiques d'actualisation et leurs cas d'utilisation, consultez la section Sélectionner une politique d'actualisation.

COMPLETE

Une actualisation complète exécute le SQL de la requête d'origine pour analyser les données de toutes les partitions cibles de la table de base et remplace entièrement les anciennes données par les données nouvellement calculées.

L'actualisation complète prend en charge les mécanismes de déclenchement d'actualisation ON DEMAND [START WITH date] [NEXT date] et ON OVERWRITE, qui vous permettent d'effectuer des actualisations manuelles à la demande, de planifier des actualisations automatiques ou d'actualiser automatiquement lorsque la table de base est écrasée.

FAST
Ce paramètre est pris en charge dans les versions 3.1.9.0 et ultérieures. La version 3.1.9.0 prend en charge l'actualisation incrémentielle uniquement pour les vues matérialisées mono-table. Les versions 3.2.0.0 et ultérieures prennent en charge l'actualisation incrémentielle pour les vues matérialisées mono-table et multi-table.

Effectue une actualisation incrémentielle. Le système réécrit la requête de la vue (query_body) pour analyser uniquement les données modifiées (issues des opérations INSERT, DELETE et UPDATE) dans la table de base et applique ces modifications à la vue matérialisée. Cela évite d'analyser l'intégralité de la table de base à chaque cycle et réduit le coût de calcul de chaque actualisation.

Avant de créer une vue matérialisée utilisant l'actualisation incrémentielle, activez la fonctionnalité de journalisation binaire (binary logging) pour le cluster et les tables de base. Sinon, la création échouera. Pour obtenir des instructions, consultez la section Activer la fonctionnalité de journalisation binaire.

Pour une vue matérialisée utilisant l'actualisation incrémentielle, le mécanisme de déclenchement de l'actualisation doit être une actualisation automatique planifiée. Définissez la prochaine heure d'actualisation en utilisant ON DEMAND {NEXT date}.

L'actualisation incrémentielle présente certaines limitations. Si le query_body ne prend pas en charge l'actualisation incrémentielle, une erreur se produit lors de la tentative de création de la vue matérialisée.

ON [DEMAND | OVERWRITE]

Facultatif

Valeur par défaut : DEMAND

Modifiable après la création : Non

Définit le mécanisme de déclenchement de l'actualisation de la vue matérialisée. Pour plus d'informations sur les différences entre les mécanismes de déclenchement et leurs cas d'utilisation, consultez la section Sélectionner un mécanisme de déclenchement d'actualisation.

DEMAND

Actualisation à la demande. Cela signifie que vous pouvez actualiser manuellement la vue matérialisée lorsque cela est nécessaire, ou utiliser NEXT pour spécifier une actualisation automatique planifiée.

Les vues matérialisées à actualisation incrémentielle prennent uniquement en charge ON DEMAND.

OVERWRITE

La vue matérialisée est automatiquement actualisée après que les données de sa table de base ont été écrasées par une instruction INSERT OVERWRITE.

Lorsque le mécanisme de déclenchement de l'actualisation est ON OVERWRITE, vous ne pouvez pas définir START WITH ni NEXT.

[START WITH date] [NEXT date]

Facultatif

Modifiable après la création : Non

Lorsque le mécanisme de déclenchement de l'actualisation d'une vue matérialisée est ON DEMAND, vous pouvez définir son calendrier d'actualisation. Si aucun calendrier n'est défini, la vue n'est pas actualisée périodiquement.

START WITH

L'heure de la première actualisation. Si omis, la vue est actualisée immédiatement après sa création.

NEXT

L'heure de la prochaine actualisation planifiée.

  • Pour une vue matérialisée utilisant l'actualisation incrémentielle, vous devez spécifier NEXT. L'intervalle d'actualisation automatique doit être compris entre 5 secondes (s) et 5 minutes (min).

  • Pour une vue matérialisée utilisant l'actualisation complète, NEXT est facultatif. S'il est spécifié, l'intervalle d'actualisation automatique minimum est de 60 secondes (s).

date

Les fonctions temporelles sont prises en charge. L'heure est précise à la seconde près et les millisecondes sont tronquées.

[DISABLE | ENABLE] QUERY REWRITE

Facultatif

Valeur par défaut : DISABLE

Modifiable après la création : Oui (en utilisant ALTER MATERIALIZED VIEW)

Ce paramètre est pris en charge uniquement dans les versions 3.1.4 et ultérieures.

Active ou désactive la réécriture automatique des requêtes pour cette vue matérialisée. Pour plus d'informations, consultez la section Réécriture de requête pour les vues matérialisées.

DISABLE

Désactive la fonctionnalité de réécriture de requête pour la vue matérialisée actuelle.

ENABLE

Active la fonctionnalité de réécriture de requête pour la vue matérialisée actuelle. Après activation, l'optimiseur peut réécrire tout ou partie d'une requête en fonction de son modèle SQL et la rediriger vers la vue matérialisée. Cela évite d'exécuter les calculs d'origine sur la table de base et améliore les performances des requêtes.

query_body

Obligatoire

Modifiable après la création : Non

Définit la requête sur les tables de base pour la vue matérialisée.

Pour une vue matérialisée utilisant l'actualisation complète, la table de base peut être une table interne AnalyticDB for MySQL, une table externe, une vue matérialisée existante ou une vue. Il n'y a aucune restriction sur la requête. Pour plus d'informations sur la syntaxe des requêtes, consultez SELECT.

Pour une vue matérialisée utilisant l'actualisation incrémentielle, la table de base doit être une table interne AnalyticDB for MySQL. La requête doit respecter les règles suivantes :

Règles relatives aux colonnes SELECT

Les colonnes de la liste SELECT doivent respecter les règles suivantes :

  • Avec GROUP BY et des fonctions d'agrégation : Incluez toutes les colonnes GROUP BY dans la liste SELECT.

    Voir les exemples

    Exemple correct (toutes les colonnes GROUP BY sont incluses) :

    CREATE MATERIALIZED VIEW demo_mv1
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT
      sale_id,    -- Colonne GROUP BY
      sale_date,  -- Colonne GROUP BY
      max(quantity) AS max,  -- Les colonnes d'expression nécessitent des alias
      sum(price) AS sum
    FROM sales
    GROUP BY sale_id, sale_date;

    Incorrect (colonne GROUP BY sale_date manquante) :

    CREATE MATERIALIZED VIEW false_mv1
        REFRESH FAST ON DEMAND
         NEXT now() + INTERVAL 3 minute
        AS
        SELECT
          sale_id,
          max(quantity) AS max,
          sum(price) AS sum
        FROM sales
        GROUP BY sale_id, sale_date;  -- sale_date est dans GROUP BY mais pas dans SELECT
  • Avec des fonctions d'agrégation et sans GROUP BY : La liste SELECT ne peut contenir que des colonnes d'agrégation, ou uniquement des colonnes constantes et d'agrégation.

    Voir les exemples

    -- Colonnes d'agrégation uniquement
        CREATE MATERIALIZED VIEW demo_mv2
        REFRESH FAST ON DEMAND
         NEXT now() + INTERVAL 3 minute
        AS
        SELECT
          max(quantity) AS max,
          sum(price) AS sum
        FROM sales;
    
        -- Constante plus colonnes d'agrégation (la constante devient la clé primaire)
        CREATE MATERIALIZED VIEW demo_mv3
        REFRESH FAST ON DEMAND
         NEXT now() + INTERVAL 3 minute
        AS
        SELECT
          1 AS pk,
          max(quantity) AS max,
          sum(price) AS sum
        FROM sales;
  • Sans agrégation : Incluez toutes les colonnes de clé primaire de la table de base.

    Voir les exemples

    -- Clé primaire unique
        CREATE MATERIALIZED VIEW demo_mv4
        REFRESH FAST ON DEMAND
         NEXT now() + INTERVAL 3 minute
        AS
        SELECT
          sale_id,   -- Colonne de clé primaire de la table de base sales
          quantity
        FROM sales;
    
        -- Clé primaire composite : PRIMARY KEY(sale_id, sale_date)
        CREATE MATERIALIZED VIEW demo_mv5
        REFRESH FAST ON DEMAND
         NEXT now() + INTERVAL 3 minute
        AS
        SELECT
          sale_id,    -- Première colonne de clé primaire
          sale_date,  -- Deuxième colonne de clé primaire
          quantity
        FROM sales1;
  • Requêtes UNION ALL : Chaque branche doit produire une colonne nommée union_all_marker avec une valeur constante distincte par branche. Incluez toutes les colonnes de clé primaire de la table de base. La clé primaire de la vue matérialisée doit inclure à la fois les colonnes de clé primaire de la table de base et union_all_marker.

    CREATE MATERIALIZED VIEW demo_union_all_mv (PRIMARY KEY(id, union_all_marker))
        REFRESH FAST NEXT now() + INTERVAL 5 minute
        AS
        SELECT customer_id AS id, "customer" AS union_all_marker
        FROM customer
        UNION ALL
        SELECT sale_id AS id, "sales" AS union_all_marker
        FROM sales;
  • Colonnes d'expression : Toutes les colonnes d'expression de la liste SELECT doivent avoir des alias, par exemple SUM(price) AS total_price.

Autres limitations

  • Les expressions non déterministes, telles que NOW() et RAND(), ne sont pas prises en charge.

  • La clause ORDER BY n'est pas prise en charge.

  • La clause HAVING n'est pas prise en charge.

  • Les fonctions de fenêtrage ne sont pas prises en charge.

  • Les opérations d'ensemble telles que UNION, EXCEPT et INTERSECT ne sont pas prises en charge. UNION ALL est pris en charge dans les versions 3.2.5.0 et ultérieures.

  • Seul INNER JOIN est pris en charge. Les clés de jointure doivent être des colonnes d'origine des tables, avoir le même type de données et être indexées. Vous pouvez joindre un maximum de cinq tables.

    Pour joindre davantage de tables, contactez le support technique.
  • Seules les fonctions d'agrégation suivantes sont prises en charge : COUNT, SUM, MAX, MIN, AVG, APPROX_DISTINCT et COUNT(DISTINCT).

  • AVG ne prend pas en charge le type de données DECIMAL.

  • COUNT(DISTINCT) prend uniquement en charge le type de données INTEGER.

Autorisations requises

L'utilisateur qui crée la vue matérialisée doit disposer de toutes les autorisations suivantes :

  • L'autorisation CREATE sur la base de données où la vue matérialisée sera créée.

  • L'autorisation SELECT sur les colonnes pertinentes (ou sur la table entière) pour toutes les tables de base de la vue matérialisée.

  • Pour créer une vue matérialisée actualisée automatiquement, vous avez également besoin des deux autorisations suivantes :

    • L'autorisation de se connecter à AnalyticDB for MySQL depuis n'importe quelle adresse IP (c'est-à-dire '%').

    • L'autorisation INSERT sur la vue matérialisée ou sur toutes les tables de la base de données où réside la vue matérialisée. Sinon, le système ne pourra pas actualiser les données de la vue matérialisée.

Exemples

Prérequis

Les exemples de cette rubrique utilisent les tables de base créées dans cette section. Pour exécuter les exemples, commencez par créer les tables de base à l'aide des instructions SQL suivantes.

/+ RC_DDL_ENGINE_REWRITE_XUANWUV2=false / -- Définit le moteur de table sur XUANWU. CREATE TABLE customer ( customer_id INT PRIMARY KEY, customer_name VARCHAR(255), is_vip Boolean ); /+ RC_DDL_ENGINE_REWRITE_XUANWUV2=false / -- Définit le moteur de table sur XUANWU. CREATE TABLE sales ( sale_id INT PRIMARY KEY, product_id INT, customer_id INT, price DECIMAL(10, 2), quantity INT, sale_date TIMESTAMP );/+ RC_DDL_ENGINE_REWRITE_XUANWUV2=false / -- Spécifie que la table utilise le moteur XUANWU. CREATE TABLE sales ( sale_id INT PRIMARY KEY, product_id INT, customer_id INT, price DECIMAL(10, 2), quantity INT, sale_date TIMESTAMP );

Vue matérialisée à actualisation complète

  • Créez la vue matérialisée myview1, qui s'actualise toutes les 5 minutes.

    CREATE MATERIALIZED VIEW myview1
    REFRESH   -- Equivalent to REFRESH COMPLETE
     NEXT now() + INTERVAL 5 minute
    AS
    SELECT count(*) as cnt FROM customer;
  • Créez la vue matérialisée myview2, qui s'actualise tous les jours à 2 h 00.

    CREATE MATERIALIZED VIEW myview2
    REFRESH COMPLETE
     START WITH DATE_FORMAT(now() + INTERVAL 1 day, '%Y-%m-%d 02:00:00')
     NEXT DATE_FORMAT(now() + INTERVAL 1 day, '%Y-%m-%d 02:00:00')
    AS
    SELECT count(*) as cnt FROM customer;
  • Créez une vue matérialisée myview3 qui s'actualise tous les lundis à 2 h 00.

    CREATE MATERIALIZED VIEW myview3
    REFRESH COMPLETE ON DEMAND
     START WITH DATE_FORMAT(now() + INTERVAL 7 - weekday(now()) day, '%Y-%m-%d 02:00:00') 
     NEXT DATE_FORMAT(now() + INTERVAL 7 - weekday(now()) day, '%Y-%m-%d 02:00:00')
    AS
    SELECT count(*) as cnt FROM customer;
  • Créez la vue matérialisée myview4, qui est actualisée à 2 h 00 le premier jour de chaque mois.

    CREATE MATERIALIZED VIEW myview4
    REFRESH   -- Equivalent to REFRESH COMPLETE
     NEXT DATE_FORMAT(last_day(now()) + INTERVAL 1 day, '%Y-%m-%d 02:00:00')
    AS
    SELECT count(*) as cnt FROM customer;
  • Créez la vue matérialisée myview5 et actualisez-la une seule fois.

    CREATE MATERIALIZED VIEW myview5
    REFRESH   -- Equivalent to REFRESH COMPLETE
     START WITH now() + INTERVAL 1 day
    AS 
    SELECT count(*) as cnt FROM customer;
  • Créez la vue matérialisée myview6 qui n'est pas actualisée automatiquement et repose entièrement sur des actualisations manuelles.

    CREATE MATERIALIZED VIEW myview6 (
      PRIMARY KEY (customer_id)
    ) DISTRIBUTED BY HASH (customer_id)
    AS
    SELECT customer_id FROM customer;

    Actualisez manuellement la vue matérialisée :

    REFRESH MATERIALIZED VIEW myview6;
  • Créez la vue matérialisée myview7. Vous n'avez pas besoin de définir manuellement une heure d'actualisation car la vue matérialisée est automatiquement actualisée après que la table de base a été écrasée par une opération INSERT OVERWRITE.

    CREATE MATERIALIZED VIEW myview7
    REFRESH COMPLETE ON OVERWRITE
    AS
    SELECT count(*) as cnt FROM customer;

Vue matérialisée mono-table à actualisation incrémentielle

Avant de créer une vue matérialisée utilisant l'actualisation incrémentielle, activez la fonctionnalité de journalisation binaire pour le cluster et les tables de base.
SET ADB_CONFIG BINLOG_ENABLE=true;
ALTER TABLE customer binlog=true;
ALTER TABLE sales binlog=true;
  • Créez une vue matérialisée mono-table nommée fast_mv1 avec actualisation incrémentielle et sans agrégation. Elle s'actualise toutes les 10 secondes.

    CREATE MATERIALIZED VIEW fast_mv1
    REFRESH FAST NEXT now() + INTERVAL 10 second
    AS
    SELECT sale_id, sale_date, price
    FROM sales
    WHERE price > 10;
  • Créez une vue matérialisée mono-table nommée fast_mv2 avec actualisation incrémentielle et une agrégation groupée. Elle s'actualise toutes les 5 secondes.

    CREATE MATERIALIZED VIEW fast_mv2
    REFRESH FAST NEXT now() + INTERVAL 5 second
    AS
    SELECT
       customer_id, sale_date,                 -- The system automatically includes the GROUP BY columns as the primary key of the materialized view.
       COUNT(sale_id) AS cnt_sale_id,          -- Aggregate output column.
       SUM(price * quantity) AS total_revenue, -- Aggregate output column.
       customer_id / 100 AS new_customer_id    -- Non-aggregate output columns can use any expression.
    FROM sales
    WHERE ifnull(price, 1) > 0                 -- Any expression can be used in the condition.
    GROUP BY customer_id, sale_date;
  • Créez une vue matérialisée mono-table nommée fast_mv3 avec actualisation incrémentielle et une agrégation non groupée. Elle s'actualise toutes les minutes.

    CREATE MATERIALIZED VIEW fast_mv3
    REFRESH FAST NEXT now() + INTERVAL 1 minute
    AS
    SELECT count(*) AS cnt   -- The system automatically generates a constant primary key to ensure only one record exists in the materialized view.
    FROM sales;

Vue matérialisée multi-table à actualisation incrémentielle

  • Créez une vue matérialisée multi-table nommée fast_mv4 avec actualisation incrémentielle et sans agrégation. Elle s'actualise toutes les 5 secondes.

    CREATE MATERIALIZED VIEW fast_mv4
    REFRESH FAST NEXT now() + INTERVAL 5 second
    AS
    SELECT 
        c.customer_id,
        c.customer_name,
        s.sale_id,
        (s.price * s.quantity) AS revenue
    FROM 
        sales s
    JOIN 
        customer c ON s.customer_id = c.customer_id;
  • Créez une vue matérialisée multi-table nommée fast_mv5 avec actualisation incrémentielle et une agrégation groupée. Elle s'actualise toutes les 10 secondes.

    CREATE MATERIALIZED VIEW fast_mv5
    REFRESH FAST NEXT now() + INTERVAL 10 second
    AS
    SELECT 
        s.sale_id,
        c.customer_name,
        COUNT(*) AS cnt,           
        SUM(s.price * s.quantity) AS revenue                
    FROM 
        sales s
    JOIN 
        (SELECT customer_id, customer_name FROM customer) c ON c.customer_id = s.customer_id
    GROUP BY 
        s.sale_id, c.customer_name;

Vue matérialisée partitionnée

Créez la vue matérialisée myview8 et définissez la clé de distribution et la clé de partition.

CREATE MATERIALIZED VIEW myview8 (
  quantity INT,    -- The materialized view includes all columns from the query results even if they are not explicitly listed in the definition.
  price DECIMAL(10, 2),
  sale_date TIMESTAMP
) 
DISTRIBUTED BY HASH(sale_id)
PARTITION BY VALUE(date_format(sale_date, "%Y%m%d")) LIFECYCLE 30
AS 
SELECT * FROM sales;

Définir les clés et les index

  • Créez la vue matérialisée myview9, en créant un index uniquement sur la colonne spécifiée customer_name au lieu de toutes les colonnes.

    CREATE MATERIALIZED VIEW myview9 (
      INDEX (sale_date),
      PRIMARY KEY (sale_id)
    ) DISTRIBUTED BY HASH (sale_id)
    REFRESH
     NEXT now() + INTERVAL 1 DAY
    AS
    SELECT * FROM sales;
  • Créez une vue matérialisée nommée myview10 avec une clé primaire, une clé de distribution, un index de clustering, des index sur des colonnes spécifiées et un commentaire.

    CREATE MATERIALIZED VIEW myview10 (
      quantity INT,    -- The materialized view includes all columns from the query results even if they are not explicitly listed in the definition.
      price DECIMAL(10, 2),
      KEY INDEX_ID(customer_id) COMMENT 'customer',
      CLUSTERED KEY INDEX(sale_id),
      PRIMARY KEY(sale_id,sale_date)
    ) 
    DISTRIBUTED BY HASH(sale_id)
    COMMENT 'MATERIALIZED VIEW c'
    AS 
    SELECT * FROM sales;

Vue matérialisée élastique

  • Créez la vue matérialisée élastique myview11, en utilisant le groupe de ressources de type Job serverless pour la créer et l'actualiser, avec une fréquence d'actualisation d'une fois par jour.

    CREATE MATERIALIZED VIEW myview11
    MV_PROPERTIES='{
      "mv_resource_group":"serverless"
    }'
    REFRESH COMPLETE ON DEMAND
     START WITH now()
     NEXT now() + INTERVAL 1 DAY
    AS
    SELECT * FROM sales;
  • Créez la vue matérialisée élastique myview12, qui utilise le groupe de ressources de type Job serverless pour la création et les actualisations, et peut utiliser 12 ACU de ressources de ce groupe.

    CREATE MATERIALIZED VIEW myview12
    MV_PROPERTIES='{
      "mv_resource_group":"serverless",
      "mv_refresh_hints":{"elastic_job_max_acu":"12"}
    }'
    REFRESH COMPLETE ON DEMAND
     START WITH now()
     NEXT now() + INTERVAL 1 DAY
    AS
    SELECT * FROM sales;

Rubriques connexes