全部产品
Search
文档中心

AnalyticDB:BUAT TAMPILAN MATERIALIZASI

更新时间:Jul 15, 2025

Topik ini menjelaskan cara menggunakan pernyataan BUAT TAMPILAN MATERIALIZASI untuk membuat tampilan materialisasi yang mendukung penyegaran lengkap atau cepat serta mengonfigurasi waktu penyegaran.

Sintaks

CREATE [OR REPLACE] MATERIALIZED VIEW mv_name
[mv_definition]
[mv_properties]
[REFRESH [COMPLETE|FAST]]
[ON [DEMAND |OVERWRITE]]
[START WITH date] [NEXT date]
[[DISABLE|ENABLE] QUERY REWRITE]
[COMMENT 'view_comment']
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]

Parameter

OR REPLACE

Opsional

Dapat diubah setelah pembuatan: tidak

Hanya kluster AnalyticDB for MySQL versi 3.1.4.7 atau lebih baru yang mendukung parameter ini.
  • Jika tidak ada tampilan materialisasi yang ada menggunakan nama yang sama, AnalyticDB for MySQL akan membuat tampilan materialisasi.

  • Jika tampilan materialisasi yang ada menggunakan nama yang sama, AnalyticDB for MySQL akan membuat tampilan sementara untuk menulis data baru dan kemudian mengganti tampilan materialisasi asli setelah data ditulis.

mv_definition

Opsional

Dapat diubah setelah pembuatan: tidak

Skema dari tampilan materialisasi.

Anda dapat memilih apakah akan secara eksplisit menentukan skema tampilan materialisasi. Jika Anda tidak secara eksplisit menentukan skema tampilan materialisasi, AnalyticDB for MySQL mendefinisikan kolom tampilan materialisasi dengan menggunakan kolom dari hasil kueri tampilan materialisasi, menentukan kunci utama untuk tampilan materialisasi, membuat indeks pada semua kolom, dan mengonfigurasi penyimpanan data panas dan mesin XUANWU.

Jika Anda ingin secara manual menentukan skema tampilan materialisasi, termasuk kunci distribusi, kunci partisi, kunci utama, indeks, dan kebijakan penyimpanan bertingkat data panas dan dingin, gunakan metode definisi skema yang sama seperti yang digunakan untuk menjalankan pernyataan BUAT TABEL. Sebagai contoh, jika Anda tidak perlu mengindeks semua kolom, Anda dapat menggunakan kata kunci INDEX untuk menentukan kolom indeks. Jika Anda ingin mengurangi biaya penyimpanan tampilan materialisasi, Anda dapat mengatur kebijakan penyimpanan tampilan materialisasi ke penyimpanan campuran atau menyimpan data hanya dalam satu tahun terakhir.

Aturan Kunci Utama
  • Penyegaran Lengkap: Jika Anda tidak secara eksplisit menentukan kunci utama, AnalyticDB for MySQL secara otomatis menghasilkan kolom bernama __adb_auto_id__ dan menggunakan kolom tersebut sebagai kunci utama tampilan materialisasi. Jika Anda ingin secara eksplisit menentukan kunci utama, Anda dapat menentukan kolom dari hasil kueri tampilan materialisasi sebagai kunci utama.

  • Penyegaran Cepat: Kunci utama, baik ditentukan secara eksplisit maupun dihasilkan secara otomatis, harus mematuhi aturan berikut:

    • Jika Anda menentukan fungsi agregat dengan klausa GROUP BY, kunci utama harus berupa kolom yang dirujuk dalam klausa GROUP BY. Sebagai contoh, jika GROUP BY a,b ditentukan, kunci utama harus berupa kolom a dan b.

    • Jika Anda menentukan fungsi agregat tanpa klausa GROUP BY, kunci utama harus berupa konstanta.

    • Jika Anda menentukan kueri non-agregat, kunci utama harus sesuai dengan kunci utama tabel dasar. Sebagai contoh, jika kunci utama tabel dasar adalah PRIMARY KEY(sale_id,sale_date), kunci utama tampilan materialisasi juga harus PRIMARY KEY(sale_id,sale_date).

Rekomendasi

Untuk meningkatkan kinerja kueri tampilan materialisasi, kami sarankan Anda menentukan kunci utama, kunci distribusi, dan kunci partisi saat membuat tampilan materialisasi.

mv_properties

Opsional

Dapat diubah setelah pembuatan: ya (dengan menggunakan pernyataan ALTER MATERIALIZED VIEW)

Hanya kluster AnalyticDB for MySQL Enterprise Edition, Basic Edition, atau Data Lakehouse Edition versi 3.1.9.3 atau lebih baru yang mendukung parameter ini.

Kebijakan sumber daya tampilan materialisasi, yang terdiri dari parameter mv_resource_group yang menentukan grup sumber daya dan parameter mv_refresh_hints yang menentukan konfigurasi petunjuk penyegaran. Parameter mv_properties dalam format JSON. Contoh:

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

Grup sumber daya yang digunakan untuk membuat dan menyegarkan tampilan materialisasi. Jika Anda tidak menentukan grup sumber daya, grup sumber daya default bernama user_default digunakan.

Anda dapat mengatur parameter ini ke grup sumber daya interaktif atau grup sumber daya pekerjaan yang menggunakan mesin XIHE. Grup sumber daya pekerjaan memerlukan latensi penyegaran beberapa detik atau menit untuk menyediakan sumber daya. Jika Anda tidak memiliki persyaratan tinggi untuk latensi penyegaran, Anda dapat menentukan grup sumber daya pekerjaan. Tampilan materialisasi yang menggunakan grup sumber daya pekerjaan disebut tampilan materialisasi elastis. Jika Anda ingin meningkatkan kinerja penyegaran tampilan materialisasi elastis, Anda dapat mengonfigurasi bidang elastic_job_max_acu dalam parameter mv_refresh_hints untuk meningkatkan batas sumber daya tampilan materialisasi. Untuk informasi lebih lanjut, lihat contoh berikut dari tampilan materialisasi elastis.

Anda dapat melihat grup sumber daya pada tab Grup Sumber Daya di konsol AnalyticDB for MySQL atau memanggil operasi DescribeDBResourceGroup untuk menanyakan daftar grup sumber daya.

Jika grup sumber daya yang ditentukan tidak ada, kesalahan akan terjadi saat Anda membuat tampilan materialisasi.

mv_refresh_hints

Konfigurasi petunjuk penyegaran tampilan materialisasi. Untuk informasi tentang parameter petunjuk yang didukung, lihat bagian "Parameter petunjuk umum" dari topik Konfigurasi dan parameter konfigurasi petunjuk.

REFRESH [COMPLETE | FAST]

Opsional

Nilai default: COMPLETE

Dapat diubah setelah pembuatan: tidak

Kebijakan penyegaran tampilan materialisasi. Untuk informasi tentang perbedaan antara kebijakan penyegaran dan skenario yang berlaku, lihat bagian "Pilih kebijakan penyegaran" dari topik Segarkan tampilan materialisasi.

COMPLETE

Penyegaran lengkap mengeksekusi kueri tampilan materialisasi untuk memindai data di semua partisi tabel dasar yang terlibat dan menggunakan hasil kueri untuk menimpa data asli tampilan materialisasi.

Penyegaran lengkap mendukung mekanisme pemicu penyegaran berikut: penyegaran otomatis pada interval terjadwal (ditentukan oleh klausa ON DEMAND [START WITH date] [NEXT date]), penyegaran otomatis saat tabel dasar ditimpa (ditentukan oleh klausa ON OVERWRITE), dan penyegaran manual.

FAST
Hanya kluster AnalyticDB for MySQL versi 3.1.9.0 atau lebih baru yang mendukung parameter ini. Di kluster AnalyticDB for MySQL versi 3.1.9.0, Anda hanya dapat membuat tampilan materialisasi satu tabel yang mendukung penyegaran cepat. Di kluster AnalyticDB for MySQL versi 3.2.0.0 atau lebih baru, Anda dapat membuat tampilan materialisasi satu tabel dan multi-tabel yang mendukung penyegaran cepat.

Penyegaran cepat menulis ulang kueri tampilan materialisasi (query_body) untuk hanya memindai data yang diperbarui di tabel dasar (INSERT, DELETE, UPDATE) dan memperbarui data tampilan materialisasi. Ini mencegah semua data tabel dasar dipindai dan mengurangi overhead penyegaran.

Sebelum Anda membuat tampilan materialisasi yang mendukung penyegaran cepat di kluster AnalyticDB for MySQL, Anda harus mengaktifkan fitur pencatatan biner untuk kluster dan tabel dasar. Jika tidak, kesalahan akan terjadi. Untuk informasi lebih lanjut, lihat bagian "Aktifkan fitur pencatatan biner" dari topik Segarkan tampilan materialisasi.

Jika Anda ingin membuat tampilan materialisasi yang mendukung penyegaran cepat, Anda harus mengatur mekanisme pemicu penyegaran ke penyegaran otomatis pada interval terjadwal dengan menentukan klausa ON DEMAND {NEXT date}.

Batasan tertentu diberlakukan pada tampilan materialisasi yang mendukung penyegaran cepat. Jika kueri tampilan materialisasi tidak memenuhi persyaratan penyegaran cepat, kesalahan akan terjadi saat Anda membuat tampilan materialisasi.

ON [DEMAND | OVERWRITE]

Opsional

Nilai default: DEMAND

Dapat diubah setelah pembuatan: tidak

Mekanisme pemicu penyegaran tampilan materialisasi. Untuk informasi tentang perbedaan antara mekanisme pemicu penyegaran dan skenario yang berlaku, lihat bagian "Pilih mekanisme pemicu penyegaran" dari topik Segarkan tampilan materialisasi.

DEMAND

Penyegaran sesuai permintaan. Anda dapat memicu penyegaran secara manual atau menggunakan klausa NEXT untuk mengonfigurasi penyegaran otomatis pada interval terjadwal.

Untuk tampilan materialisasi yang mendukung penyegaran cepat, Anda hanya dapat mengatur mekanisme pemicu penyegaran ke ON DEMAND.

OVERWRITE

Penyegaran otomatis saat tabel dasar ditimpa dengan mengeksekusi pernyataan INSERT OVERWRITE.

Jika Anda mengatur mekanisme pemicu penyegaran ke ON OVERWRITE, Anda tidak dapat menentukan klausa START WITH atau NEXT.

[START WITH date] [NEXT date]

Opsional

Dapat diubah setelah pembuatan: tidak

Waktu penyegaran tampilan materialisasi saat Anda mengatur mekanisme pemicu penyegaran ke ON DEMAND. Jika Anda tidak menentukan waktu penyegaran, tampilan materialisasi tidak akan disegarkan secara otomatis pada interval terjadwal.

START WITH

Waktu penyegaran pertama tampilan materialisasi. Jika Anda tidak menentukan klausa START WITH, waktu penyegaran pertama adalah waktu saat tampilan materialisasi dibuat.

NEXT

Waktu penyegaran berikutnya tampilan materialisasi.

  • Untuk tampilan materialisasi yang mendukung penyegaran cepat, Anda harus menentukan klausa NEXT dan mengatur interval penyegaran otomatis dalam rentang 5 detik hingga 5 menit.

  • Untuk tampilan materialisasi yang mendukung penyegaran lengkap, Anda dapat memilih apakah akan menentukan klausa NEXT. Jika Anda menentukan klausa NEXT, Anda harus mengatur interval penyegaran otomatis setidaknya 60 detik.

date

Fungsi waktu didukung dan harus akurat hingga detik. Milidetik dipotong.

[DISABLE | ENABLE] QUERY REWRITE

Opsional

Nilai default: DISABLE

Dapat diubah setelah pembuatan: ya (dengan menggunakan pernyataan ALTER MATERIALIZED VIEW)

Hanya kluster AnalyticDB for MySQL versi 3.1.4 atau lebih baru yang mendukung parameter ini.

Mengaktifkan atau menonaktifkan fitur penulisan ulang kueri untuk tampilan materialisasi. Untuk informasi lebih lanjut, lihat Penulisan ulang kueri tampilan materialisasi.

DISABLE

Menonaktifkan fitur penulisan ulang kueri untuk tampilan materialisasi.

ENABLE

Mengaktifkan fitur penulisan ulang kueri untuk tampilan materialisasi. Setelah Anda mengaktifkan fitur penulisan ulang kueri, pengoptimal menggunakan tampilan materialisasi untuk menulis ulang seluruh atau sebagian kueri berdasarkan pola SQL tanpa perlu melakukan komputasi pada tabel dasar. Ini meningkatkan kinerja kueri.

query_body

Wajib

Dapat diubah setelah pembuatan: tidak

Kueri tampilan materialisasi pada tabel dasar.

Tampilan materialisasi lengkap dapat dibuat berdasarkan tabel internal dan eksternal AnalyticDB for MySQL, tampilan materialisasi yang ada, dan tampilan. Tidak ada batasan yang diberlakukan pada kueri tabel dasar. Untuk informasi tentang sintaks kueri, lihat SELECT.

Tampilan materialisasi cepat hanya dapat dibuat berdasarkan tabel internal dan eksternal AnalyticDB for MySQL. Kueri tabel dasar harus mematuhi aturan berikut:

SELECT kolom

  • Jika Anda menentukan fungsi agregat dengan klausa GROUP BY, kolom SELECT harus mencakup semua kolom yang dirujuk dalam klausa GROUP BY.

    Lihat contoh

    Contoh benar

    Contoh salah

    CREATE MATERIALIZED VIEW demo_mv1
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT 
      sale_id, -- Tentukan salah satu kolom GROUP BY.
      sale_date, -- Tentukan salah satu kolom GROUP BY.
      max(quantity) AS max, -- Anda harus menentukan alias untuk kolom berbasis ekspresi.
      sum(price)AS sum
    FROM sales
    GROUP BY sale_id,sale_date;
    CREATE MATERIALIZED VIEW false_mv1
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT 
      sale_id, -- Kolom SELECT tidak mencakup kolom GROUP BY sale_date.
      max(quantity) AS max,
      sum(price)AS sum
    FROM sales
    GROUP BY sale_id,sale_date;
  • Jika Anda menentukan fungsi agregat tanpa klausa GROUP BY, kolom SELECT dapat mencakup hanya kolom konstan dan agregat, atau hanya kolom agregat.

    Lihat contoh

    Contoh benar

    Contoh salah

    Cakup hanya kolom agregat max dan sum.

    CREATE MATERIALIZED VIEW demo_mv2
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT 
      max(quantity) AS max, -- Anda harus menentukan alias untuk kolom berbasis ekspresi.
      sum(price)AS sum
    FROM sales;

    Cakup kolom selain kolom konstan dan agregat.

    CREATE MATERIALIZED VIEW false_mv2
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT
      sale_id, 
      max(quantity) AS max,
      sum(price) AS sum
    FROM sales;

    Cakup kolom konstan pk dan kolom agregat max dan sum.

    CREATE MATERIALIZED VIEW demo_mv3
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT 
      1 AS pk,  -- Jika Anda menentukan fungsi agregat tanpa klausa GROUP BY, kolom konstan digunakan sebagai kunci utama.
      max(quantity) AS max,
      sum(price) AS sum
    FROM sales;
  • Jika Anda menentukan kueri non-agregat, kolom SELECT harus mencakup semua kolom kunci utama dari tabel dasar.

    Lihat contoh

    Contoh benar

    Contoh salah

    CREATE MATERIALIZED VIEW demo_mv4
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT 
      sale_id, -- Tentukan kolom kunci utama dari tabel dasar.
      quantity
    FROM sales;
    CREATE MATERIALIZED VIEW false_mv3
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT 
      sale_date, -- Kolom SELECT tidak mencakup kolom kunci utama sale_id.
      quantity
    FROM sales;

    Asumsikan bahwa tabel sales1 memiliki kunci utama komposit yang didefinisikan sebagai PRIMARY KEY(sale_id,sale_date).

    CREATE MATERIALIZED VIEW demo_mv5
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT 
      sale_id, -- Tentukan salah satu kolom kunci utama dari tabel dasar.
      sale_date, -- Tentukan salah satu kolom kunci utama dari tabel dasar.
      quantity
    FROM sales1;

    Asumsikan bahwa tabel sales1 memiliki kunci utama komposit yang didefinisikan sebagai PRIMARY KEY(sale_id,sale_date).

    CREATE MATERIALIZED VIEW false_mv4
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT 
      sale_id, -- Kolom SELECT tidak mencakup kolom kunci utama lainnya sale_date.
      quantity
    FROM sales1;
  • Anda harus menentukan alias untuk kolom berbasis ekspresi yang dirujuk dalam klausa SELECT. Kami sarankan Anda menentukan alias yang mudah diidentifikasi. Contoh: SUM(price) AS total_price.

Batasan Lainnya

  • Anda tidak dapat menentukan ekspresi yang mungkin menghasilkan nilai tak tentu. Contoh: NOW() dan RAND().

  • Anda tidak dapat menentukan klausa ORDER BY.

  • Anda tidak dapat menentukan klausa HAVING.

  • Anda tidak dapat menentukan fungsi jendela.

  • Anda tidak dapat menentukan operator set, seperti UNION, EXCEPT, dan INTERSECT.

  • Anda hanya dapat menentukan INNER JOIN untuk operasi join. Bidang JOIN harus berupa bidang asli dari tabel dasar, menggunakan tipe data yang sama, dan digunakan untuk membuat indeks. Anda dapat menggabungkan hingga lima tabel dasar.

    Untuk menggabungkan lebih banyak tabel dasar, hubungi dukungan teknis.
  • Anda hanya dapat menentukan fungsi agregat berikut: COUNT(), SUM(), MAX(), MIN(), AVG(), APPROX_DISTINCT(), dan COUNT(DISTINCT).

  • Fungsi AVG() tidak mendukung tipe DECIMAL.

  • Fungsi COUNT(DISTINCT) hanya mendukung tipe INTEGER.

Izin yang Diperlukan

Sebelum membuat tampilan materialisasi, pastikan Anda memiliki izin berikut:

  • Izin CREATE pada tabel di database tempat Anda ingin membuat tampilan materialisasi.

  • Izin SELECT pada kolom tertentu atau semua kolom dari semua tabel dasar yang dirujuk dalam tampilan materialisasi.

  • Jika Anda ingin membuat tampilan materialisasi yang dapat disegarkan secara otomatis, Anda juga memerlukan izin berikut:

    • Izin untuk terhubung ke AnalyticDB for MySQL dari alamat IP apa pun yang dilambangkan oleh '%'.

    • Izin INSERT pada tampilan materialisasi atau semua tabel di database tempat tampilan materialisasi berada. Jika tidak, data di tampilan materialisasi tidak dapat disegarkan.

Contoh

Persiapan Contoh

Sebelum membuat tampilan materialisasi, jalankan pernyataan BUAT TABEL untuk membuat tabel dasar.

/*+ RC_DDL_ENGINE_REWRITE_XUANWUV2=false */ -- Atur mesin tabel ke XUANWU. 
CREATE TABLE customer (
    customer_id INT PRIMARY KEY,
    customer_name VARCHAR(255),
    is_vip Boolean
);
/*+ RC_DDL_ENGINE_REWRITE_XUANWUV2=false */ -- Atur mesin tabel ke XUANWU. 
CREATE TABLE sales (
    sale_id INT PRIMARY KEY,
    product_id INT,
    customer_id INT,
    price DECIMAL(10, 2),
    quantity INT,
    sale_date TIMESTAMP
);

Buat Tampilan Materialisasi yang Mendukung Penyegaran Lengkap

  • Buat tampilan materialisasi bernama myview1 yang disegarkan secara otomatis setiap interval 5 menit.

    CREATE MATERIALIZED VIEW myview1
    REFRESH   -- Setara dengan REFRESH COMPLETE.
     NEXT now() + INTERVAL 5 minute
    AS
    SELECT count(*) as cnt FROM customer;
  • Buat tampilan materialisasi bernama myview2 yang disegarkan secara otomatis pada pukul 02:00:00 setiap hari.

    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;
  • Buat tampilan materialisasi bernama myview3 yang disegarkan secara otomatis pada pukul 02:00:00 setiap Senin.

    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;
  • Buat tampilan materialisasi bernama myview4 yang disegarkan secara otomatis pada pukul 02:00:00 pada hari pertama setiap bulan.

    CREATE MATERIALIZED VIEW myview4
    REFRESH   -- Setara dengan REFRESH COMPLETE. 
     NEXT DATE_FORMAT(last_day(now()) + INTERVAL 1 day, '%Y-%m-%d 02:00:00')
    AS
    SELECT count(*) as cnt FROM customer;
  • Buat tampilan materialisasi bernama myview5 yang disegarkan secara otomatis hanya sekali.

    CREATE MATERIALIZED VIEW myview5
    REFRESH   -- Setara dengan REFRESH COMPLETE.
     START WITH now() + INTERVAL 1 day
    AS 
    SELECT count(*) as cnt FROM customer;
  • Buat tampilan materialisasi bernama myview6 yang tidak disegarkan secara otomatis. Anda hanya dapat menyegarkan tampilan materialisasi secara manual.

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

    Segarkan tampilan materialisasi secara manual:

    REFRESH MATERIALIZED VIEW myview6;
  • Buat tampilan materialisasi bernama myview7 yang disegarkan secara otomatis saat tabel dasar ditimpa. Anda tidak perlu menentukan waktu penyegaran secara manual.

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

Buat Tampilan Materialisasi Satu Tabel yang Mendukung Penyegaran Cepat

Sebelum membuat tampilan materialisasi yang mendukung penyegaran cepat di kluster AnalyticDB for MySQL, Anda harus mengaktifkan fitur pencatatan biner untuk kluster dan tabel dasar.
SET ADB_CONFIG BINLOG_ENABLE=true;
ALTER TABLE customer binlog=true;
ALTER TABLE sales binlog=true;
  • Buat tampilan materialisasi satu tabel bernama fast_mv1 yang mendukung penyegaran cepat setiap interval 10 detik. Kueri tampilan materialisasi tidak melibatkan fungsi agregat.

    CREATE MATERIALIZED VIEW fast_mv1
    REFRESH FAST NEXT now() + INTERVAL 10 second
    AS
    SELECT sale_id, sale_date, price
    FROM sales
    WHERE price > 10;
  • Buat tampilan materialisasi satu tabel bernama fast_mv2 yang mendukung penyegaran cepat setiap interval 5 detik. Kueri tampilan materialisasi melibatkan fungsi agregat dengan GROUP BY.

    CREATE MATERIALIZED VIEW fast_mv2
    REFRESH FAST NEXT now() + INTERVAL 5 second
    AS
    SELECT
       customer_id, sale_date,                 -- Sistem menggunakan kolom GROUP BY sebagai kunci utama tampilan materialisasi. 
       COUNT(sale_id) AS cnt_sale_id,          -- Lakukan operasi agregat pada kolom. 
       SUM(price * quantity) AS total_revenue, -- Lakukan operasi agregat pada kolom. 
       customer_id / 100 AS new_customer_id    -- Anda dapat menggunakan ekspresi untuk mendefinisikan kolom yang tidak terlibat dalam operasi agregat. 
    FROM sales
    WHERE ifnull(price, 1) > 0                 -- Anda dapat menggunakan ekspresi untuk mendefinisikan kondisi WHERE. 
    GROUP BY customer_id, sale_date;
  • Buat tampilan materialisasi satu tabel bernama fast_mv3 yang mendukung penyegaran cepat setiap interval 1 menit. Kueri tampilan materialisasi melibatkan fungsi agregat tanpa GROUP BY.

    CREATE MATERIALIZED VIEW fast_mv3
    REFRESH FAST NEXT now() + INTERVAL 1 minute
    AS
    SELECT count(*) AS cnt   -- Sistem menghasilkan konstanta sebagai kunci utama untuk memastikan bahwa hanya satu catatan yang terkandung dalam tampilan materialisasi. 
    FROM sales;

Buat Tampilan Materialisasi Multi-Tabel yang Mendukung Penyegaran Cepat

  • Buat tampilan materialisasi multi-tabel bernama fast_mv4 yang mendukung penyegaran cepat setiap interval 5 detik. Kueri tampilan materialisasi tidak melibatkan fungsi agregat.

    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;
  • Buat tampilan materialisasi multi-tabel bernama fast_mv5 yang mendukung penyegaran cepat setiap interval 10 detik. Kueri tampilan materialisasi melibatkan fungsi agregat dengan klausa GROUP BY.

    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;

Buat Tampilan Materialisasi Terpartisi

Buat tampilan materialisasi bernama myview8 dengan kunci distribusi dan kunci partisi.

CREATE MATERIALIZED VIEW myview8 (
  quantity INT,    --Tampilan materialisasi mencakup semua kolom dari hasil kueri meskipun tidak ada kolom yang ditampilkan secara eksplisit.     
  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;

Buat Tampilan Materialisasi dengan Kunci Utama, Kunci Distribusi, atau Indeks

  • Buat tampilan materialisasi bernama myview9 untuk mana kolom customer_name diindeks.

    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;
  • Buat tampilan materialisasi bernama myview10 untuk mana kunci utama, kunci distribusi, indeks terkluster, indeks berbasis kolom, dan komentar ditentukan.

    CREATE MATERIALIZED VIEW myview10 (
      quantity INT,    --Tampilan materialisasi mencakup semua kolom dari hasil kueri meskipun tidak ada kolom yang ditampilkan secara eksplisit.     
      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 'TAMPILAN MATERIALISASI c'
    AS 
    SELECT * FROM sales;

Buat Tampilan Materialisasi Elastis

  • Buat tampilan materialisasi elastis bernama myview11 yang disegarkan secara otomatis sekali sehari menggunakan sumber daya grup sumber daya pekerjaan bernama serverless.

    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;
  • Buat tampilan materialisasi elastis bernama myview12 yang disegarkan secara otomatis sekali sehari menggunakan hingga 12 unit komputasi AnalyticDB (ACUs) sumber daya dalam grup sumber daya pekerjaan bernama serverless.

    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;

Referensi