All Products
Search
Document Center

MaxCompute:Operasi Tampilan yang di-materialisasi

Last Updated:Sep 17, 2026

Tampilan yang di-materialisasi (materialized view) melakukan pra-komputasi dan menyimpan hasil operasi yang memakan waktu, seperti JOIN dan AGGREGATE, sehingga kueri berikutnya dapat langsung membaca hasil yang tersimpan tanpa perlu menghitung ulang.

Latar Belakang

view adalah tabel virtual yang didefinisikan oleh sebuah kueri. Sebaliknya, materialized view adalah tabel fisik yang menyimpan hasil kueri yang telah dipra-hitung dan mengonsumsi sumber daya penyimpanan. Untuk detail penagihan, lihat Aturan Penagihan.

Materialized view cocok untuk skenario berikut:

  • Kueri yang sering dieksekusi dengan pola tetap.

  • Kueri yang melibatkan operasi yang memakan waktu, seperti agregasi dan penggabungan tabel (joins).

  • Kueri yang hanya mengakses sebagian kecil data dalam suatu tabel.

Tabel berikut membandingkan kueri tradisional dengan kueri materialized view.

Item

Kueri tradisional

Kueri Tampilan Terwujud

Pernyataan kueri

Anda mengkueri data secara langsung menggunakan pernyataan SQL.

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

Buat materialized view, lalu kueri materialized view tersebut.

Pernyataan berikut membuat materialized view:

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

Kueri tampilan yang dimaterialisasi:

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

Jika query rewrite diaktifkan untuk materialized view, sistem secara otomatis menggunakan materialized view saat Anda menjalankan kueri berikut:

SELECT empid, deptname 
FROM emps JOIN depts 
ON emps.deptno=depts.deptno 
WHERE hire_date >= '2018-01-01';
-- Ini setara dengan pernyataan berikut.
SELECT empid, deptname FROM mv 
WHERE hire_date >= '2018-01-01';

Karakteristik kueri

Kueri membaca tabel, melakukan join, dan menerapkan filter (klausa WHERE). Untuk tabel sumber yang besar, operasi ini lambat dan intensif sumber daya.

Kueri membaca materialized view dan menerapkan filter. Tidak diperlukan join. MaxCompute secara otomatis mencocokkan kueri dengan materialized view optimal dan membaca data langsung darinya, yang secara signifikan meningkatkan performa kueri.

Perintah

Jenis

Deskripsi

Izin

Titik masuk

Buat materialized view (mendukung partisi dan clustering)

Membuat materialized view berdasarkan pernyataan kueri.

Memerlukan izin CreateTable.

Jalankan perintah ini menggunakan alat berikut:

Perbarui materialized view

Memperbarui materialized view.

Memerlukan izin Alter.

Ubah siklus hidup materialized view

Mengubah siklus hidup materialized view.

Memerlukan izin Alter.

Aktifkan atau nonaktifkan siklus hidup materialized view

Mengaktifkan atau menonaktifkan siklus hidup materialized view.

Memerlukan izin Alter.

Kueri informasi tentang materialized view

Mengkueri informasi dasar tentang materialized view.

Memerlukan izin Describe.

Kueri status materialized view

Memeriksa apakah materialized view valid atau tidak valid.

Memerlukan izin Describe.

Daftar materialized view dalam proyek

Menampilkan semua materialized view dalam proyek, atau materialized view yang sesuai dengan kriteria tertentu.

Memerlukan izin List.

Hapus materialized view

Menghapus materialized view.

Memerlukan izin Drop.

Hapus partisi materialized view

Menghapus partisi dari materialized view.

Memerlukan izin Drop.

Penembusan kueri materialized view

Otomatis mengambil data dari tabel partisi sumber jika data yang dikueri tidak ada di materialized view.

Memerlukan izin Write dan CreateTable.

Penulisan ulang kueri materialized view

Menulis ulang pernyataan kueri agar menggunakan materialized view.

Memerlukan izin Write dan CreateTable.

Jadwalkan pembaruan untuk materialized view

Menjadwalkan pembaruan berkala untuk materialized view.

Memerlukan izin Alter.

Batasan

Fungsi window, user-defined table-valued function (UDTF), dan fungsi non-deterministik seperti user-defined scalar function (UDF) serta user-defined aggregate function (UDAF) tidak didukung.

Catatan

Jika Anda harus menggunakan fungsi non-deterministik, atur properti tingkat sesi berikut: set odps.sql.materialized.view.support.nondeterministic.function=true;.

Buat materialized view (partisi dan clustering)

Membuat materialized view dari hasil kueri. Anda dapat secara opsional mempartisi dan mengelompokkan (cluster) materialized view tersebut.

  • Batasan

    • Nama materialized view harus unik dalam proyek dan tidak boleh sama dengan tabel, view, atau materialized view yang sudah ada. Anda dapat menjalankan perintah SHOW TABLES; untuk melihat nama semua tabel dan materialized view dalam proyek.

    • Anda tidak dapat membuat materialized view berdasarkan materialized view yang sudah ada.

    • Anda tidak dapat membuat materialized view berdasarkan tabel eksternal.

  • Catatan penggunaan

    • Jika kueri pendefinisian gagal, pembuatan materialized view juga gagal.

    • Kolom kunci partisi materialized view harus berasal dari tabel sumber. Urutan dan jumlah kolom kunci partisi harus sesuai dengan tabel sumber, tetapi nama kolomnya boleh berbeda.

    • Jika Anda menentukan komentar hanya untuk sebagian kolom, operasi akan mengembalikan error.

    • Anda dapat menentukan partisi dan clustering sekaligus. Dalam kasus ini, data dalam setiap partisi memiliki properti clustering yang ditentukan.

    • Jika kueri pendefinisian berisi operator yang tidak didukung, operasi akan mengembalikan error. Untuk daftar operator yang didukung, lihat Penulisan ulang kueri materialized view.

    • Secara default, MaxCompute tidak mendukung pembuatan materialized view menggunakan fungsi non-deterministik, seperti user-defined function (UDF) dan user-defined aggregate function (UDAF). Jika kasus penggunaan Anda memerlukan fungsi non-deterministik, jalankan perintah set odps.sql.materialized.view.support.nondeterministic.function=true; pada tingkat sesi.

    • Materialized view mendukung partisi kosong. Saat partisi tabel sumber kosong, penyegaran materialized view secara otomatis membuat partisi kosong yang sesuai.

  • Sintaks

    CREATE MATERIALIZED VIEW [IF NOT EXISTS] [project_name.]<mv_name>
    [LIFECYCLE <days>]    --Menentukan siklus hidup.
    [BUILD DEFERRED]    --Membuat skema tanpa mengisi data.
    [(<col_name> [COMMENT <col_comment>], ...)]    --Komentar kolom.
    [DISABLE REWRITE]    --Menentukan apakah materialized view dapat digunakan untuk query rewrite.
    [COMMENT 'table comment']    --Komentar tabel.
    [PARTITIONED BY (<col_name> [, <col_name>, ...])]    --Membuat materialized view sebagai tabel partisi.
    [CLUSTERED BY | RANGE CLUSTERED BY (<col_name> [, <col_name>, ...])
      [SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])]
        INTO <number_of_buckets> BUCKETS]    --Menetapkan properti shuffle dan sort untuk tabel terkluster.
    [REFRESH EVERY <num> {MINUTES | HOURS | DAYS}] 
    [TBLPROPERTIES("compressionstrategy"="{normal|high|extreme}",    --Menentukan strategi kompresi penyimpanan data untuk tabel.
                    "enable_auto_substitute"="true",    --Menentukan apakah akan mengaktifkan penembusan kueri ke tabel sumber saat partisi tidak ada.
                    "enable_auto_refresh"="true",    --Menentukan apakah akan mengaktifkan penyegaran otomatis.
                    "refresh_interval_minutes"="120",    --Menentukan interval penyegaran.
                    "only_refresh_max_pt"="true"    --Untuk materialized view partisi, hanya menyegarkan partisi terbaru dari tabel sumber.
                    )]
    AS <select_statement>;
  • Parameter

    Parameter

    Wajib

    Deskripsi

    IF NOT EXISTS

    Tidak

    Jika Anda tidak menentukan IF NOT EXISTS dan materialized view sudah ada, operasi akan gagal dengan error.

    project_name

    Tidak

    Nama proyek MaxCompute untuk materialized view. Jika Anda menghilangkan parameter ini, proyek saat ini yang digunakan.

    1. Login ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.

    2. Di panel navigasi sebelah kiri, pilih Manage Configurations > Projects.

      Lihat nama proyek Anda.

    mv_name

    Ya

    Nama materialized view.

    days

    Tidak

    Siklus hidup materialized view dalam hari. Nilainya harus bilangan bulat antara 1 hingga 37231.

    BUILD DEFERRED

    Tidak

    Jika ditentukan, membuat skema materialized view tanpa mengisinya dengan data.

    col_name

    Tidak

    Nama kolom dalam materialized view.

    col_comment

    Tidak

    Komentar untuk kolom.

    DISABLE REWRITE

    Tidak

    Menonaktifkan query rewrite untuk materialized view. Secara default, query rewrite diaktifkan. Anda dapat menjalankan ALTER MATERIALIZED VIEW [project_name.]<mv_name> DISABLE REWRITE; untuk menonaktifkan query rewrite, dan menjalankan ALTER MATERIALIZED VIEW [project_name.]<mv_name> ENABLE REWRITE; untuk mengaktifkannya.

    PARTITIONED BY

    Tidak

    Kolom kunci partisi. Gunakan parameter ini untuk membuat materialized view partisi.

    CLUSTERED BY|RANGE CLUSTERED BY

    Tidak

    Properti shuffle untuk membuat tabel terkluster.

    SORTED BY

    Tidak

    Properti sort untuk membuat tabel terkluster.

    REFRESH EVERY

    Tidak

    Interval penyegaran terjadwal untuk materialized view. Satuan yang valid adalah MINUTES, HOURS, atau DAYS.

    number_of_buckets

    Tidak

    Jumlah bucket saat membuat tabel terkluster.

    TBLPROPERTIES

    Tidak

    • compressionstrategy: Menentukan strategi kompresi penyimpanan data. Nilai yang valid adalah normal, high, dan extreme. enable_auto_substitute: Menentukan apakah akan mengaktifkan penembusan kueri ke tabel partisi sumber saat partisi tidak ada. Untuk informasi lebih lanjut, lihat Penulisan ulang kueri materialized view.

    • enable_auto_refresh: Opsional. Atur properti ini ke true untuk mengaktifkan penyegaran data otomatis.

    • refresh_interval_minutes: Parameter ini hanya diperlukan ketika enable_auto_refresh diatur ke true. Ini menentukan interval penyegaran dalam menit.

    • only_refresh_max_pt: Opsional. Properti ini hanya berlaku untuk materialized view partisi. Jika diatur ke true, hanya partisi terbaru dari tabel sumber yang disegarkan.

    select_statement

    Ya

    Pernyataan SELECT yang mendefinisikan materialized view. Untuk informasi lebih lanjut, lihat Sintaks SELECT.

  • Contoh

    • Contoh 1: Buat materialized view

      1. Buat dua tabel, mf_t dan mf_t1, dan masukkan data.

        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'; 
        -- Hasil berikut dikembalikan.
        +------------+------------+------------+------------+
        | 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';
        -- Hasil berikut dikembalikan.
        +------------+------------+------------+------------+
        | id         | value      | name       | ds         |
        +------------+------------+------------+------------+
        | 1          | 10         | kyle       | 1          |
        | 3          | 20         | john       | 1          |
        +------------+------------+------------+------------+
      2. Buat materialized view.

        • Contoh 1: Buat materialized view partisi dengan ds sebagai kunci partisi.

          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';
          --Kueri materialized view.
          SELECT * FROM mf_mv WHERE ds =1;
          +------------+------------+------------+
          | key        | value      | ds         |
          +------------+------------+------------+
          | 1          | 10         | 1          |
          +------------+------------+------------+
        • Contoh 2: Buat materialized view non-partisi yang terkluster.

          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';
        • Contoh 3: Buat materialized view partisi dan terkluster.

          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';
    • Contoh 2: Buat partisi kosong dengan menyegarkan dari partisi sumber kosong.

      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; 
      --Partisi ds=2 di tabel sumber kosong. Menyegarkan partisi dengan ds > 0 membuat partisi kosong yang sesuai di materialized view.
      ds=1
      ds=2
      
      SELECT * FROM mf_mv_blank_pts WHERE ds>0; 
      --Hasil menunjukkan bahwa hanya partisi ds=1 yang berisi data.
      +------------+------------+------------+
      | id         | name       | ds         |
      +------------+------------+------------+
      | 1          | aba        | 1          |
      | 2          | cbd        | 1          |
      +------------+------------+------------+

Perbarui materialized view

Saat data dalam tabel sumber atau partisinya berubah, materialized view menjadi tidak valid dan tidak dapat digunakan untuk query rewrite. Periksa status view dan bangun ulang jika diperlukan. Untuk informasi lebih lanjut, lihat Kueri informasi tentang materialized view.

  • Catatan

    • Operasi rebuild hanya memperbarui tabel sumber atau partisi yang berubah.

    • Anda dapat mengaktifkan penyegaran terjadwal untuk memperbarui data secara otomatis. Untuk informasi lebih lanjut, lihat Penyegaran terjadwal untuk materialized view.

  • Sintaks

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

    Parameter

    Wajib

    Deskripsi

    project_name

    Tidak

    Nama proyek MaxCompute untuk materialized view. Jika Anda menghilangkan parameter ini, proyek saat ini yang digunakan.

    1. Login ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.

    2. Di panel navigasi sebelah kiri, pilih Manage Configurations > Projects.

      Lihat nama proyek Anda.

    mv_name

    Ya

    Nama materialized view yang akan diperbarui.

    ds

    Tidak

    Nama bidang partisi dalam materialized view.

    max_pt

    Tidak

    Mengambil nilai partisi maksimum dari tabel atau materialized view yang ditentukan (table_name).

    expression

    Tidak

    Ekspresi yang menentukan partisi yang akan dibangun ulang. Ini digunakan untuk materialized view partisi.

  • Contoh

    • Contoh 1: Perbarui materialized view non-partisi.

      -- Buat tabel non-partisi.
      CREATE TABLE count_test(a BIGINT, b BIGINT); 
      -- Buat materialized view non-partisi.
      CREATE MATERIALIZED VIEW count_mv LIFECYCLE 7 AS SELECT COUNT(*) FROM count_test; 
      -- Perbarui materialized view non-partisi. 
      ALTER MATERIALIZED VIEW count_mv rebuild; 
    • Contoh 2: Perbarui partisi materialized view.

      ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds='1');
    • Contoh 3: Perbarui partisi berdasarkan kondisi.

      ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds>='1', ds<='2');
    • Contoh 4: Perbarui partisi terbaru.

      -- Buat tabel partisi contoh.
      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);
          
      -- Lihat data partisi.
      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  |
      +-----------+-------------+-------------+-----------+--------+
      -- Lihat data partisi.
      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     |
      +-----------+-------------+-------------+-----------+--------+
      
      -- Buat materialized view.
      CREATE MATERIALIZED VIEW mv_deferred BUILD DEFERRED AS SELECT * FROM sale_detail_jt;
      
      -- Kueri materialized view mv_deferred.
      SELECT * FROM mv_deferred;
      -- Hasil berikut dikembalikan:
      +-----------+-------------+-------------+-----------+--------+
      | shop_name | customer_id | total_price | sale_date | region |
      +-----------+-------------+-------------+-----------+--------+
      +-----------+-------------+-------------+-----------+--------+
      
      -- Buat tabel partisi.
      CREATE TABLE mf_part (id bigint,name string) PARTITIONED BY (dt string);
      -- Masukkan data.
      INSERT INTO mf_part PARTITION(dt='2013') VALUES(1,'name1'),(2,'name2');
      -- Kueri data.
      SELECT * FROM mf_part WHERE dt='2013';
      -- Hasil berikut dikembalikan:
      +------------+------+----+
      | id         | name | dt |
      +------------+------+----+
      | 1          | name1 | 2013 |
      | 2          | name2 | 2013 |
      +------------+------+----+
      
      -- Buat materialized view partisi.
      CREATE MATERIALIZED VIEW mv_rebuild BUILD DEFERRED PARTITIONED BY (dt) AS SELECT * FROM mf_part;
      
      -- Kueri data dari materialized view.
      SELECT * FROM mv_rebuild WHERE dt='2013';
      -- Hasil berikut dikembalikan:
      +------------+------+----+
      | id         | name | dt |
      +------------+------+----+
      +------------+------+----+
      -- Segarkan data partisi terbaru.
      ALTER MATERIALIZED VIEW mv_rebuild REBUILD PARTITION(dt=max_pt('mf_part'));
      
      -- Kueri data dari materialized view.
      SELECT * FROM mv_rebuild WHERE dt='2013'; 
      -- Hasil berikut dikembalikan:
      +------------+------+----+
      | id         | name | dt |
      +------------+------+----+
      | 1          | name1 | 2013 |
      | 2          | name2 | 2013 |
      +------------+------+----+

Ubah siklus hidup materialized view

Mengubah siklus hidup materialized view yang sudah ada.

  • Sintaks

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

    Parameter

    Wajib

    Deskripsi

    project_name

    Tidak

    Nama proyek MaxCompute untuk materialized view. Jika Anda menghilangkan parameter ini, proyek saat ini yang digunakan.

    1. Login ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.

    2. Di panel navigasi sebelah kiri, pilih Manage Configurations > Projects.

      Lihat nama proyek Anda.

    mv_name

    Ya

    Nama materialized view yang akan diubah.

    days

    Ya

    Siklus hidup baru untuk materialized view, dalam hari.

  • Contoh

    -- Atur siklus hidup materialized view menjadi 10 hari.
    ALTER MATERIALIZED VIEW count_mv SET LIFECYCLE 10;

Aktifkan atau nonaktifkan siklus hidup materialized view

Mengaktifkan atau menonaktifkan manajemen siklus hidup untuk materialized view.

  • Sintaks

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

    Parameter

    Required

    Description

    project_name

    No

    Nama Proyek MaxCompute untuk tampilan yang di-materialisasi. Jika Anda menghilangkan parameter ini, proyek saat ini akan digunakan.

    1. Login ke MaxCompute console dan pilih Wilayah di pojok kiri atas.

    2. Pada panel navigasi sebelah kiri, pilih Manage Configurations > Projects.

      Lihat nama proyek Anda.

    mv_name

    Yes

    Nama tampilan yang di-materialisasi yang akan dimodifikasi.

    pt_spec

    No

    Partisi yang akan dimodifikasi. Formatnya adalah (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...), di mana partition_col adalah kolom partisi dan partition_col_value adalah nilainya.

    enable|disable

    Yes

    enable berarti diaktifkan, dan disable berarti dinonaktifkan. Jika dinonaktifkan, partisi atau tabel tersebut tidak dikenai manajemen lifecycle.

  • Contoh

    • Contoh 1: Aktifkan manajemen siklus hidup untuk partisi materialized view.

      ALTER MATERIALIZED VIEW mf_mv_blank_pts  PARTITION (ds='1') enable LIFECYCLE;
    • Contoh 2: Nonaktifkan manajemen siklus hidup untuk partisi materialized view.

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

Informasi materialized view

Menampilkan detail materialized view, seperti skema dan waktu modifikasi.

  • Sintaks

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

    Parameter

    Wajib

    Deskripsi

    project_name

    Tidak

    Nama proyek MaxCompute untuk materialized view. Jika Anda menghilangkan parameter ini, proyek saat ini yang digunakan.

    1. Login ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.

    2. Di panel navigasi sebelah kiri, pilih Manage Configurations > Projects.

      Lihat nama proyek Anda.

    mv_name

    Ya

    Nama materialized view yang akan dikueri.

  • Contoh

    DESC EXTENDED mv;

    Perintah ini mengembalikan output berikut:

    Catatan

    Output contoh ini hanya tersedia di klien MaxCompute v0.43 atau yang lebih baru. Untuk informasi lebih lanjut, lihat Terhubung ke MaxCompute menggunakan 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 |
    +------------------------------------------------------------------------------------+

Kueri status materialized view

Kueri status materialized view untuk memeriksa apakah valid. Materialized view memiliki salah satu status berikut:

  • Valid

    MaxCompute membaca data langsung dari materialized view, bukan dari tabel sumber.

  • Tidak valid

    MaxCompute tidak dapat membaca data dari materialized view. Kueri kembali ke tabel sumber tanpa akselerasi performa.

Gunakan fungsi berikut untuk memeriksa apakah data dalam materialized view valid.

  • Sintaks

    boolean materialized_view_is_valid(<mv_name>,<partition_value>);
  • Contoh

    Memeriksa apakah data dalam materialized view konsisten dengan data terbaru di tabel sumber. Fungsi mengembalikan true jika data konsisten dan false jika tidak.

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

Daftar materialized view

Menampilkan semua materialized view dalam proyek, atau hanya yang sesuai dengan pola tertentu.

Catatan

Perintah SHOW MATERIALIZED VIEWS memerlukan klien MaxCompute (odpscmd) v0.43.0 atau yang lebih baru.

  • Sintaks

    -- Menampilkan semua materialized view dalam proyek.
    SHOW MATERIALIZED VIEWS;
    -- Menampilkan materialized view dalam proyek yang sesuai dengan pola <materialized_view>.
    SHOW MATERIALIZED VIEWS LIKE '<materialized_view>';
  • Contoh

    -- Menampilkan materialized view yang dimulai dengan 'test'. Tanda bintang (*) adalah wildcard.
    SHOW MATERIALIZED VIEWS LIKE 'test*';         

    Perintah ini mengembalikan hasil berikut:

    ALIYUN$account_name:test_two_mv
    ALIYUN$account_name:test_create_one_mv

Hapus materialized view

Menghapus materialized view.

  • Sintaks

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

    Parameter

    Wajib

    Deskripsi

    IF EXISTS

    Tidak

    Jika Anda tidak menentukan IF EXISTS, operasi akan mengembalikan error jika materialized view tidak ada.

    project_name

    Tidak

    Nama proyek MaxCompute untuk materialized view. Jika Anda menghilangkan parameter ini, proyek saat ini yang digunakan.

    1. Login ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.

    2. Di panel navigasi sebelah kiri, pilih Manage Configurations > Projects.

      Lihat nama proyek Anda.

    mv_name

    Ya

    Nama materialized view yang akan dihapus.

    purge

    Tidak

    Jika Anda menentukan purge, operasi segera menghapus data materialized view.

  • Contoh

    • Hapus materialized view count_mv.

      DROP MATERIALIZED VIEW count_mv;
    • Hapus materialized view count_mv dan segera hapus datanya.

      DROP MATERIALIZED VIEW count_mv purge;

Hapus partisi dari materialized view

Menghapus satu atau beberapa partisi dari materialized view yang sudah ada.

  • Sintaks

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

    Parameter

    Wajib

    Deskripsi

    project_name

    Tidak

    Nama proyek MaxCompute untuk materialized view. Jika Anda menghilangkan parameter ini, proyek saat ini yang digunakan.

    1. Login ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.

    2. Di panel navigasi sebelah kiri, pilih Manage Configurations > Projects.

      Lihat nama proyek Anda.

    mv_name

    Ya

    Nama materialized view partisi tempat partisi akan dihapus.

    IF EXISTS

    Tidak

    Jika Anda menghilangkan IF EXISTS dan materialized view tidak ada, error akan dikembalikan.

    pt_spec

    Ya

    Partisi yang akan dihapus. Anda harus menentukan minimal satu partisi. Formatnya adalah (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col menentukan kolom partisi, dan partition_col_value menentukan nilai partisi.

  • Contoh

    • Contoh 1: Hapus partisi dari materialized view partisi.

      ALTER MATERIALIZED VIEW mf_mv_blank_pts DROP PARTITION (ds='1');
    • Contoh 2: Hapus partisi yang memenuhi kondisi tertentu dari materialized view partisi.

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

Penembusan kueri materialized view

Materialized view partisi mungkin tidak berisi data untuk semua partisi — misalnya, jika Anda hanya menyegarkan yang terbaru. Saat kueri menargetkan partisi yang tidak memiliki data di materialized view, sistem secara otomatis kembali ke tabel partisi sumber. Gambar berikut mengilustrasikan proses ini.

查询透穿图示

Untuk mengaktifkan fitur kueri penembusan untuk materialized view, atur parameter berikut:

Saat membuat materialized view, tambahkan konfigurasi "enable_auto_substitute"="true" ke tblproperties.

Contoh berikut menunjukkan cara menggunakan materialized view yang mendukung kueri penembusan.

  1. Buat materialized view partisi yang mendukung kueri penembusan.

    -- Buat tabel sumber bernama src.
    CREATE TABLE src(id bigint,name string) PARTITIONED BY (dt string);
    -- Masukkan data.
    INSERT INTO src PARTITION(dt='20210101') VALUES(1,'Alex');
    INSERT INTO src PARTITION(dt='20210102') VALUES(2,'Flink');
    
    -- Buat materialized view partisi yang mendukung kueri penembusan.
    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. Kueri data dari partisi 20210101 di materialized view mv.

    SELECT * FROM mv WHERE dt='20210101';
  3. Kueri data dari partisi 20210102 di materialized view mv. Sistem secara otomatis melakukan kueri penembusan ke tabel sumber karena partisi ini belum dimaterialisasi.

    SELECT * FROM mv WHERE dt = '20210102';
    -- Karena data untuk partisi 20210102 belum dimaterialisasi, kueri ditulis ulang untuk mengakses tabel sumber. Ini setara dengan:
    SELECT * FROM (SELECT id, name, dt FROM src WHERE dt='20210102') t;
  4. Kueri data dari rentang partisi di materialized view mv. Sistem secara otomatis melakukan kueri penembusan ke tabel sumber untuk data yang tidak dimaterialisasi dan menggabungkannya dengan data yang dimaterialisasi menggunakan operasi UNION sebelum mengembalikan hasil.

    SELECT * FROM mv WHERE dt >= '20201230' AND dt<='20210102' AND id=5; 
    -- Karena data untuk partisi 20201230 dan 20210102 belum dimaterialisasi, kueri ditulis ulang untuk mengakses tabel sumber. Ini setara dengan:
    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;

Aturan Penagihan

Biaya materialized view terdiri dari dua komponen:

  • Biaya penyimpanan

    Materialized view mengonsumsi penyimpanan fisik, sehingga dikenakan biaya penyimpanan berdasarkan pay-as-you-go. Untuk informasi lebih lanjut, lihat Harga penyimpanan (pay-as-you-go).

  • Biaya komputasi

    Membuat, memperbarui, dan mengkueri materialized view — termasuk penulisan ulang kueri saat view valid — mengonsumsi sumber daya komputasi dan dikenakan biaya komputasi.

    • Jika proyek MaxCompute Anda menggunakan paket langganan , tidak ada biaya tambahan yang dikenakan.

    • Jika proyek MaxCompute Anda menggunakan paket pay-as-you-go , MaxCompute menghitung biaya berdasarkan kompleksitas SQL dan volume data masukan. Untuk informasi lebih lanjut, lihat Harga SQL Standar. Perhatikan hal berikut:

      • Pernyataan SQL yang digunakan untuk menyegarkan materialized view sama dengan kueri pendefinisinya. Jika proyek terikat ke kelompok sumber daya komputasi langganan, operasi menggunakan sumber daya yang telah Anda beli tanpa biaya tambahan. Jika proyek menggunakan kelompok sumber daya pay-as-you-go, biaya tergantung pada volume data masukan dan kompleksitas SQL. Setelah penyegaran, biaya penyimpanan dikenakan berdasarkan ukuran aktual materialized view.

      • Saat materialized view valid, query rewrite membaca data dari view tersebut. Volume data masukan bergantung pada materialized view, bukan tabel sumber. Jika view tidak valid, query rewrite tidak tersedia dan kueri membaca langsung dari tabel sumber. Untuk informasi lebih lanjut, lihat Kueri status materialized view.

      • Saat materialized view dibuat dari join multi-tabel, pembengkakan data (data bloat) dapat terjadi. Membaca dari materialized view tidak selalu mengurangi biaya dibandingkan membaca dari tabel sumber.

Referensi