Tüm Ürünler
Search
Belge Merkezi

MaxCompute:Materialized view işlemleri

Son Güncelleme:Oct 04, 2026

Materialized view, JOIN ve AGGREGATE gibi zaman alan işlemlerin sonuçlarını önceden hesaplayıp depolar; böylece sonraki sorgular bu sonuçları yeniden hesaplamak yerine doğrudan okuyabilir.

Arka plan

Bir view, bir sorgu ile tanımlanan sanal bir tablodur. Buna karşın materialized view, önceden hesaplanmış sorgu sonuçlarını depolayan ve depolama kaynakları tüketen fiziksel bir tablodur. Faturalama ayrıntıları için bkz. Faturalandırma kuralları.

Materialized view'ler aşağıdaki senaryolar için uygundur:

  • Sıkça çalıştırılan ve sabit desene sahip sorgular.

  • Toplama ve birleştirme gibi zaman alan işlemler içeren sorgular.

  • Bir tablodaki verilerin yalnızca küçük bir alt kümesine erişen sorgular.

Aşağıdaki tabloda geleneksel sorgular ile materialized view sorguları karşılaştırılmıştır.

Öğe

Geleneksel sorgu

Materialized view sorgusu

Sorgu deyimi

Verileri doğrudan SQL deyimlerini kullanarak sorgularsınız.

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

Bir materialized view oluşturun ve ardından bunu sorgulayın.

Aşağıdaki deyim bir materialized view oluşturur:

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';

Materialized view'yi sorgulayın:

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

Materialized view için sorgu yeniden yazma etkinleştirilmişse sistem aşağıdaki sorguyu çalıştırdığınızda otomatik olarak materialized view'i kullanır:

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';

Sorgu özellikleri

Sorgu tabloları okur, birleştirmeler yapar ve filtreler (WHERE yan tümcesi) uygular. Büyük kaynak tablolar için bu işlemler yavaş olur ve yoğun kaynak tüketir.

Sorgu materialized view'i okur ve filtreler uygular. Birleştirmelere gerek yoktur. MaxCompute, sorguyu en uygun materialized view ile otomatik olarak eşleştirir ve verileri doğrudan buradan okur; bu da sorgu performansını önemli ölçüde artırır.

Komutlar

Tür

Açıklama

İzinler

Giriş noktaları

Materialized view oluşturma (bölümleme ve kümeleme desteklenir)

Bir sorgu deyimine dayalı olarak materialized view oluşturur.

CreateTable izni gerektirir.

Bu komutları aşağıdaki araçları kullanarak çalıştırın:

Materialized view güncelleme

Bir materialized view'i günceller.

Alter izni gerektirir.

Materialized view yaşam döngüsünü değiştirme

Bir materialized view'in yaşam döngüsünü değiştirir.

Alter izni gerektirir.

Materialized view yaşam döngüsünü etkinleştirme veya devre dışı bırakma

Bir materialized view'in yaşam döngüsünü etkinleştirir veya devre dışı bırakır.

Alter izni gerektirir.

Materialized view hakkında bilgi sorgulama

Bir materialized view'in temel bilgilerini sorgular.

Describe izni gerektirir.

Materialized view durumunu sorgulama

Bir materialized view'in geçerli mi yoksa geçersiz mi olduğunu kontrol eder.

Describe izni gerektirir.

Projedeki materialized view'leri listeleme

Bir projedeki tüm materialized view'leri veya belirli kriterlerle eşleşen materialized view'leri listeler.

List izni gerektirir.

Materialized view silme

Bir materialized view'i siler.

Drop izni gerektirir.

Materialized view bölümünü silme

Bir materialized view'den bir bölümü siler.

Drop izni gerektirir.

Materialized view sorgu geçişi

Sorgulanan veriler materialized view'de bulunmuyorsa verileri otomatik olarak kaynak bölümlenmiş tablodan alır.

Write ve CreateTable izinleri gerektirir.

Materialized view sorgu yeniden yazma

Bir sorgu deyimini materialized view'i kullanacak şekilde yeniden yazar.

Write ve CreateTable izinleri gerektirir.

Materialized view için güncellemeleri zamanlama

Bir materialized view için periyodik güncellemeleri zamanlar.

Alter izni gerektirir.

Sınırlamalar

Pencere fonksiyonları, kullanıcı tanımlı tablo değerli fonksiyonlar (UDTF'ler) ve kullanıcı tanımlı skaler fonksiyonlar (UDF'ler) ile kullanıcı tanımlı toplama fonksiyonları (UDAF'ler) gibi deterministik olmayan fonksiyonlar desteklenmez.

Not

Deterministik olmayan bir fonksiyon kullanmanız gerekiyorsa bu oturum düzeyindeki özelliği ayarlayın: set odps.sql.materialized.view.support.nondeterministic.function=true;.

Materialized view oluşturma (bölümleme ve kümeleme)

Bir sorgu sonucundan materialized view oluşturur. İsteğe bağlı olarak materialized view'i bölmeye ve kümeleyebilirsiniz.

  • Sınırlamalar

    • Materialized view adı proje içinde benzersiz olmalı ve mevcut bir tablo, view veya materialized view ile aynı olmamalıdır. Projedeki tüm tabloların ve materialized view'lerin adlarını görüntülemek için SHOW TABLES; komutunu çalıştırabilirsiniz.

    • Mevcut bir materialized view'e dayalı olarak materialized view oluşturamazsınız.

    • Harici bir tabloya dayalı olarak materialized view oluşturamazsınız.

  • Kullanım notları

    • Tanımlayıcı sorgu başarısız olursa materialized view oluşturma işlemi de başarısız olur.

    • Materialized view'in bölüm anahtarı sütunları bir kaynak tablodan türetilmelidir. Bölüm anahtarı sütunlarının sırası ve sayısı kaynak tablo ile eşleşmelidir ancak adları farklı olabilir.

    • Yalnızca bir sütun alt kümesi için açıklama belirtirseniz işlem hata döndürür.

    • Hem bölümlemeyi hem de kümelemeyi belirtebilirsiniz. Bu durumda her bölümdeki veriler belirtilen kümeleme özelliklerine sahip olur.

    • Tanımlayıcı sorgu desteklenmeyen operatörler içeriyorsa işlem hata döndürür. Desteklenen operatörlerin listesi için bkz. Materialized view sorgu yeniden yazma.

    • Varsayılan olarak MaxCompute kullanıcı tanımlı fonksiyonlar (UDF'ler) ve kullanıcı tanımlı toplama fonksiyonları (UDAF'ler) gibi deterministik olmayan fonksiyonlar kullanarak materialized view oluşturmayı desteklemez. Kullanım durumunuz deterministik olmayan fonksiyonlar gerektiriyorsa oturum düzeyinde set odps.sql.materialized.view.support.nondeterministic.function=true; komutunu çalıştırın.

    • Materialized view'ler boş bölümleri destekler. Kaynak tablo bölümü boş olduğunda materialized view'i yenilemek otomatik olarak ilgili boş bölümü oluşturur.

  • Sözdizimi

    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>;
  • Parametreler

    Parametre

    Zorunlu

    Açıklama

    IF NOT EXISTS

    Hayır

    IF NOT EXISTS belirtmezseniz ve materialized view zaten varsa işlem hata ile başarısız olur.

    project_name

    Hayır

    Materialized view için MaxCompute projesinin adı. Bu parametreyi atlarsanız geçerli proje kullanılır.

    1. MaxCompute console adresinde oturum açın ve sol üst köşeden bir bölge seçin.

    2. Sol gezinme bölmesinde Manage Configurations > Projects seçeneğini belirleyin.

      Proje adınızı görüntüleyin.

    mv_name

    Evet

    Materialized view'in adı.

    days

    Hayır

    Materialized view'in gün cinsinden yaşam döngüsü. Değer 1 ile 37231 arasında bir tamsayı olmalıdır.

    BUILD DEFERRED

    Hayır

    Belirtilirse materialized view şemasını veri doldurmadan oluşturur.

    col_name

    Hayır

    Materialized view'deki bir sütunun adı.

    col_comment

    Hayır

    Bir sütun için açıklama.

    DISABLE REWRITE

    Hayır

    Materialized view için sorgu yeniden yazmayı devre dışı bırakır. Varsayılan olarak sorgu yeniden yazma etkindir. Sorgu yeniden yazmayı devre dışı bırakmak için ALTER MATERIALIZED VIEW [project_name.]<mv_name> DISABLE REWRITE; ve etkinleştirmek için ALTER MATERIALIZED VIEW [project_name.]<mv_name> ENABLE REWRITE; komutunu çalıştırabilirsiniz.

    PARTITIONED BY

    Hayır

    Bölüm anahtarı sütunları. Bölümlenmiş bir materialized view oluşturmak için bu parametreyi kullanın.

    CLUSTERED BY|RANGE CLUSTERED BY

    Hayır

    Kümeleme tablosu oluşturma için karıştırma özelliği.

    SORTED BY

    Hayır

    Kümeleme tablosu oluşturma için sıralama özelliği.

    REFRESH EVERY

    Hayır

    Materialized view için zamanlanmış yenileme aralığı. Geçerli birimler MINUTES, HOURS veya DAYS'tir.

    number_of_buckets

    Hayır

    Kümeleme tablosu oluştururken kova sayısı.

    TBLPROPERTIES

    Hayır

    • compressionstrategy: Veri depolama sıkıştırma stratejisini belirtir. Geçerli değerler normal, high ve extreme'dir. enable_auto_substitute: Bir bölüm mevcut olmadığında kaynak bölümlenmiş tabloya sorgu geçişinin etkinleştirilip etkinleştirilmeyeceğini belirtir. Daha fazla bilgi için bkz. Materialized view sorgu yeniden yazma.

    • enable_auto_refresh: İsteğe bağlı. Otomatik veri yenilemeyi etkinleştirmek için bu özelliği true olarak ayarlayın.

    • refresh_interval_minutes: Bu parametre yalnızca enable_auto_refresh değeri true olarak ayarlandığında gereklidir. Dakika cinsinden yenileme aralığını belirtir.

    • only_refresh_max_pt: İsteğe bağlı. Bu özellik yalnızca bölümlenmiş materialized view'ler için geçerlidir. true olarak ayarlanırsa yalnızca kaynak tablodan en son bölüm yenilenir.

    select_statement

    Evet

    Materialized view'i tanımlayan SELECT deyimi. Daha fazla bilgi için bkz. SELECT Söz Dizimi.

  • Örnekler

    • Örnek 1: Materialized view oluşturma

      1. mf_t ve mf_t1 adlı iki tablo oluşturun ve veri ekleyin.

        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. Materialized view oluşturun.

        • Örnek 1: ds bölüm anahtarı olarak bölümlenmiş bir materialized view oluşturun.

          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          |
          +------------+------------+------------+
        • Örnek 2: Bölümlenmemiş, kümeleme yapılmış bir materialized view oluşturun.

          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';
        • Örnek 3: Bölümlenmiş ve kümeleme yapılmış bir materialized view oluşturun.

          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';
    • Örnek 2: Boş bir kaynak bölümden yenileyerek boş bir bölüm oluşturma.

      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          |
      +------------+------------+------------+

Materialized view güncelleme

Kaynak tablolardaki veya bölümlerdeki veriler değiştiğinde materialized view geçersiz hale gelir ve sorgu yeniden yazma için kullanılamaz. View durumunu kontrol edin ve gerekirse yeniden oluşturun. Daha fazla bilgi için bkz. Materialized view hakkında bilgi sorgulama.

  • Notlar

    • Yeniden oluşturma işlemi yalnızca değişen kaynak tabloları veya bölümleri günceller.

    • Verileri otomatik olarak güncellemek için zamanlanmış yenilemeyi etkinleştirebilirsiniz. Daha fazla bilgi için bkz. Materialized view'ler için zamanlanmış yenileme.

  • Sözdizimi

    ALTER MATERIALIZED VIEW [<project_name>.]<mv_name>
          REBUILD [PARTITION (<ds>=max_pt(<table_name>),<expression1>...)];
  • Parametreler

    Parametre

    Zorunlu

    Açıklama

    project_name

    Hayır

    Materialized view için MaxCompute projesinin adı. Bu parametreyi atlarsanız geçerli proje kullanılır.

    1. MaxCompute console adresinde oturum açın ve sol üst köşeden bir bölge seçin.

    2. Sol gezinme bölmesinde Manage Configurations > Projects seçeneğini belirleyin.

      Proje adınızı görüntüleyin.

    mv_name

    Evet

    Güncellenecek materialized view'in adı.

    ds

    Hayır

    Materialized view'deki bölüm alanının adı.

    max_pt

    Hayır

    Belirtilen tablo veya materialized view'den (table_name) maksimum bölüm değerini alır.

    expression

    Hayır

    Yeniden oluşturulacak bölümleri belirten bir ifade. Bu, bölümlenmiş materialized view'ler için kullanılır.

  • Örnekler

    • Örnek 1: Bölümlenmemiş bir materialized view'i güncelleme.

      -- 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; 
    • Örnek 2: Materialized view bölümünü güncelleme.

      ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds='1');
    • Örnek 3: Koşula göre bölümleri güncelleme.

      ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds>='1', ds<='2');
    • Örnek 4: En son bölümü güncelleme.

      -- 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 |
      +------------+------+----+

Materialized view yaşam döngüsünü değiştirme

Mevcut bir materialized view'in yaşam döngüsünü değiştirir.

  • Sözdizimi

    ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> SET LIFECYCLE <days>;
  • Parametreler

    Parametre

    Zorunlu

    Açıklama

    project_name

    Hayır

    Materialized view için MaxCompute projesinin adı. Bu parametreyi atlarsanız geçerli proje kullanılır.

    1. MaxCompute console adresinde oturum açın ve sol üst köşeden bir bölge seçin.

    2. Sol gezinme bölmesinde Manage Configurations > Projects seçeneğini belirleyin.

      Proje adınızı görüntüleyin.

    mv_name

    Evet

    Değiştirilecek materialized view'in adı.

    days

    Evet

    Materialized view için yeni yaşam döngüsü (gün cinsinden).

  • Örnek

    -- Set the lifecycle of the materialized view to 10 days.
    ALTER MATERIALIZED VIEW count_mv SET LIFECYCLE 10;

Materialized view yaşam döngüsünü etkinleştirme veya devre dışı bırakma

Bir materialized view için yaşam döngüsü yönetimini etkinleştirir veya devre dışı bırakır.

  • Sözdizimi

    ALTER MATERIALIZED VIEW  [<project_name>.]<mv_name> [<pt_spec>] {enable|disable} LIFECYCLE;
  • Parametreler

    Parametre

    Zorunlu

    Açıklama

    project_name

    Hayır

    Materialized view için MaxCompute projesinin adı. Bu parametreyi atlarsanız geçerli proje kullanılır.

    1. MaxCompute console adresinde oturum açın ve sol üst köşeden bir bölge seçin.

    2. Sol gezinme bölmesinde Manage Configurations > Projects seçeneğini belirleyin.

      Proje adınızı görüntüleyin.

    mv_name

    Evet

    Değiştirilecek materialized view'in adı.

    pt_spec

    Hayır

    Değiştirilecek bölüm. Biçim şöyledir: (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). Burada partition_col bir bölüm sütunudur ve partition_col_value bunun değeridir.

    enable|disable

    Evet

    enable etkin anlamına gelir ve disable devre dışı anlamına gelir. Devre dışı bırakılırsa bölüm veya tablo yaşam döngüsü yönetimine tabi olmaz.

  • Örnekler

    • Örnek 1: Materialized view'in bir bölümü için yaşam döngüsü yönetimini etkinleştirme.

      ALTER MATERIALIZED VIEW mf_mv_blank_pts  PARTITION (ds='1') enable LIFECYCLE;
    • Örnek 2: Materialized view'in bir bölümü için yaşam döngüsü yönetimini devre dışı bırakma.

      ALTER MATERIALIZED VIEW mf_mv_blank_pts  PARTITION (ds='1') disable LIFECYCLE;

Materialized view bilgisi

Şema ve değişiklik zamanı gibi bir materialized view'in ayrıntılarını görüntüler.

  • Sözdizimi

    DESC EXTENDED [<project_name>.]<mv_name>;
  • Parametreler

    Parametre

    Zorunlu

    Açıklama

    project_name

    Hayır

    Materialized view için MaxCompute projesinin adı. Bu parametreyi atlarsanız geçerli proje kullanılır.

    1. MaxCompute console adresinde oturum açın ve sol üst köşeden bir bölge seçin.

    2. Sol gezinme bölmesinde Manage Configurations > Projects seçeneğini belirleyin.

      Proje adınızı görüntüleyin.

    mv_name

    Evet

    Sorgulanacak materialized view'in adı.

  • Örnek

    DESC EXTENDED mv;

    Komut aşağıdaki çıktıyı döndürür:

    Not

    Bu örnek çıktı yalnızca MaxCompute istemcisi v0.43 veya sonraki sürümlerde kullanılabilir. Daha fazla bilgi için bkz. odpscmd kullanarak MaxCompute'e bağlanma.

    +------------------------------------------------------------------------------------+
    | 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 |
    +------------------------------------------------------------------------------------+

Materialized view durumunu sorgulama

Geçerli olup olmadığını kontrol etmek için bir materialized view'in durumunu sorgulayın. Bir materialized view aşağıdaki durumlardan birine sahiptir:

  • Geçerli

    MaxCompute verileri kaynak tablo yerine doğrudan materialized view'den okur.

  • Geçersiz

    MaxCompute verileri materialized view'den okuyamaz. Sorgular performans hızlandırması olmadan kaynak tabloya geri döner.

Bir materialized view'deki verilerin geçerli olup olmadığını kontrol etmek için aşağıdaki işlevi kullanın.

  • Sözdizimi

    boolean materialized_view_is_valid(<mv_name>,<partition_value>);
  • Örnekler

    Bir materialized view'deki verilerin kaynak tablodaki en son verilerle tutarlı olup olmadığını kontrol eder. İşlev veriler tutarlıysa true değilse false döndürür.

    • SELECT materialized_view_is_valid("count_mv");
    • SELECT materialized_view_is_valid("mf_mv_blank_pts","1");

Materialized view'leri listeleme

Bir projedeki tüm materialized view'leri veya yalnızca belirli bir desenle eşleşenleri listeler.

Not

SHOW MATERIALIZED VIEWS komutu MaxCompute istemcisi (odpscmd) v0.43.0 veya sonraki bir sürümü gerektirir.

  • Sözdizimi

    -- 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>';
  • Örnek

    -- Lists materialized views that start with 'test'. The asterisk (*) is a wildcard.
    SHOW MATERIALIZED VIEWS LIKE 'test*';         

    Komut aşağıdaki sonucu döndürür:

    ALIYUN$account_name:test_two_mv
    ALIYUN$account_name:test_create_one_mv

Materialized view silme

Bir materialized view'i siler.

  • Sözdizimi

    DROP MATERIALIZED VIEW [IF EXISTS] [<project_name>.]<mv_name> [purge];
  • Parametreler

    Parametre

    Zorunlu

    Açıklama

    IF EXISTS

    Hayır

    IF EXISTS belirtmezseniz materialized view mevcut değilse işlem hata döndürür.

    project_name

    Hayır

    Materialized view için MaxCompute projesinin adı. Bu parametreyi atlarsanız geçerli proje kullanılır.

    1. MaxCompute console adresinde oturum açın ve sol üst köşeden bir bölge seçin.

    2. Sol gezinme bölmesinde Manage Configurations > Projects seçeneğini belirleyin.

      Proje adınızı görüntüleyin.

    mv_name

    Evet

    Silinecek materialized view'in adı.

    purge

    Hayır

    purge, belirtirseniz işlem materialized view'in verilerini hemen siler.

  • Örnekler

    • count_mv materialized view'ini silin.

      DROP MATERIALIZED VIEW count_mv;
    • count_mv materialized view'ini silin ve verilerini hemen silin.

      DROP MATERIALIZED VIEW count_mv purge;

Materialized view'den bölümleri silme

Mevcut bir materialized view'den bir veya daha fazla bölümü siler.

  • Sözdizimi

    ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> DROP [IF EXISTS] PARTITION <pt_spec> [PARTITION <pt_spec>, PARTITION <pt_spec>....];
  • Parametreler

    Parametre

    Zorunlu

    Açıklama

    project_name

    Hayır

    Materialized view için MaxCompute projesinin adı. Bu parametreyi atlarsanız geçerli proje kullanılır.

    1. MaxCompute console adresinde oturum açın ve sol üst köşeden bir bölge seçin.

    2. Sol gezinme bölmesinde Manage Configurations > Projects seçeneğini belirleyin.

      Proje adınızı görüntüleyin.

    mv_name

    Evet

    Bölümlerin silineceği bölümlenmiş materialized view'in adı.

    IF EXISTS

    Hayır

    IF EXISTS atlanırsa ve materialized view mevcut değilse hata döndürülür.

    pt_spec

    Evet

    Silinecek bölümler. En az bir bölüm belirtmeniz gerekir. Biçim şöyledir: (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col bölüm sütununu belirtir ve partition_col_value bölüm değerini belirtir.

  • Örnekler

    • Örnek 1: Bölümlenmiş bir materialized view'den bir bölümü silme.

      ALTER MATERIALIZED VIEW mf_mv_blank_pts DROP PARTITION (ds='1');
    • Örnek 2: Belirtilen bir koşulu karşılayan bölümleri bölümlenmiş bir materialized view'den silme.

      ALTER MATERIALIZED VIEW mf_mv_blank_pts DROP PARTITION (ds>='1' AND ds<='2');

Materialized view sorgu geçişi

Bölümlenmiş bir materialized view tüm bölümler için veri içermeyebilir; örneğin yalnızca en son olanları yenilerseniz. Bir sorgu materialized view'de verisi olmayan bir bölümü hedeflediğinde sistem otomatik olarak kaynak bölümlenmiş tabloya geri döner. Aşağıdaki şekil bu süreci göstermektedir.

查询透穿图示

Bir materialized view için geçiş sorgusu özelliğini etkinleştirmek üzere aşağıdaki parametreyi ayarlayın:

Materialized view'i oluştururken tblproperties öğesine "enable_auto_substitute"="true" yapılandırmasını ekleyin.

Aşağıdaki örnek geçiş sorgularını destekleyen bir materialized view'in nasıl kullanılacağını göstermektedir.

  1. Geçiş sorgularını destekleyen bölümlenmiş bir materialized view oluşturun.

    -- 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. mv materialized view'indeki 20210101 bölümünden veri sorgulayın.

    SELECT * FROM mv WHERE dt='20210101';
  3. mv materialized view'indeki 20210102 bölümünden veri sorgulayın. Bu bölüm materialize edilmediğinden sistem otomatik olarak kaynak tabloda bir geçiş sorgusu gerçekleştirir.

    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. mv materialized view'indeki bir bölüm aralığından veri sorgulayın. Sistem materialize edilmemiş veriler için kaynak tabloda otomatik olarak bir geçiş sorgusu gerçekleştirir ve sonucu döndürmeden önce bunu materialize edilmiş verilerle bir UNION işlemi kullanarak birleştirir.

    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;

Faturalandırma kuralları

Materialized view maliyetleri iki bileşenden oluşur:

  • Depolama ücretleri

    Materialized view'ler fiziksel depolama tüketir ve kullandıkça öde bazında depolama ücretlerine neden olur. Daha fazla bilgi için bkz. Depolama fiyatlandırması (kullandıkça öde).

  • Hesaplama maliyetleri

    Materialized view oluşturma, güncelleme ve sorgulama — view geçerli olduğunda sorgu yeniden yazma dahil — hesaplama kaynaklarını tüketir ve hesaplama maliyetlerine neden olur.

    • MaxCompute projeniz abonelik planındaysa ayrı ücretlendirme yapılmaz.

    • MaxCompute projeniz kullandıkça öde planındaysa MaxCompute SQL karmaşıklığına ve giriş veri hacmine göre maliyetleri hesaplar. Daha fazla bilgi için bkz. Standard SQL fiyatlandırması. Aşağıdakileri göz önünde bulundurun:

      • Bir materialized view'i yenilemek için kullanılan SQL deyimi tanımlayıcı sorguyla aynıdır. Proje abonelik hesaplama kaynak grubuna bağlıysa işlem satın aldığınız kaynakları ek maliyet olmadan kullanır. Proje kullandıkça öde kaynak grubu kullanıyorsa maliyet giriş veri hacmine ve SQL karmaşıklığına bağlıdır. Yenilemeden sonra depolama ücretleri materialized view'in gerçek boyutuna göre tahsil edilir.

      • Materialized view geçerli olduğunda sorgu yeniden yazma verileri view'den okur. Giriş veri hacmi kaynak tablo yerine materialized view'e bağlıdır. View geçersizse sorgu yeniden yazma kullanılamaz ve sorgular doğrudan kaynak tablodan okur. Daha fazla bilgi için bkz. Materialized view durumunu sorgulama.

      • Bir materialized view çoklu tablo birleştirmelerinden oluşturulduğunda veri şişmesi meydana gelebilir. Materialized view'den okumak kaynak tablolardan okumaya kıyasla her zaman maliyetleri azaltmaz.

Referanslar