Tüm Ürünler
Search
Belge Merkezi

MaxCompute:Scheduled refresh of materialized views

Son Güncelleme:Oct 04, 2026

Materialized view'ler önceden hesaplanmış sorgu sonuçlarını önbelleğe alır; ancak kaynak tablolardaki değişiklikler bu verilerin güncelliğini yitirmesine neden olabilir. Zamanlanmış yenileme, sabit bir aralıkla veya Cron çizelgesine göre otomatik yenileme görevleri çalıştırarak materialized view'in kaynak tablolarıyla senkronize kalmasını sağlar.

Nasıl çalışır

Zamanlanmış yenileme, MaxCompute tarafından yapılandırdığınız çizelgeye göre arka planda gönderilen bir görevdir. Tamamlanma süresi küme kaynaklarına ve görevin boyutuna bağlıdır.

Yenileme kapsamı

  • Bölümlendirilmiş materialized view'ler -- Bölüm anahtarı sütunlarına karşılık gelen bölümlendirilmiş kaynak tablonun bir bölümünde veri değişikliği olursa yalnızca materialized view'in ilgili bölümü yenilenir. Materialized view ile ilişkili diğer tablolarda veri değişikliği olursa tam yenileme çalışır.

  • Bölümlendirilmemiş materialized view'ler -- MaxCompute, son yenilemeden bu yana kaynak tablo verilerinde değişiklik olup olmadığını kontrol eder. Değişiklik yoksa yenileme atlanır.

Çakışma yönetimi

Bir sonraki zamanlanmış saat geldiğinde hala çalışan bir yenileme varsa MaxCompute bekleyen yenilemeyi iptal eder ve bir sonraki zamanlanmış saatinde yeni bir yenileme tetikler.

Saat 10:00:00 itibarıyla 20 dakikalık aralığa sahip örnek:


Zamanlanan Saat


Sonuç


10:00:00


Yenileme başlar, 10:30:00 tarihinde tamamlanır


10:20:00


İptal edildi (önceki yenileme hala devam ediyor)


10:40:00


Yenileme zamanlandığı gibi başlar

Önemli

MaxCompute, çizelge yapılandırması değişikliklerini 30 dakikaya kadar gecikmeyle algılayabilir. Çizelgeyi etkinleştirdiğinizde veya değiştirdiğinizde zamanlanmış yenileme görevi bu gecikmeyle gönderilebilir.

Zamanlama yöntemleri

Bir materialized view'in ne zaman yenileneceğini kontrol eden üç yöntem bulunur. Üç yöntem de TBLPROPERTIES içinde "enable_auto_refresh"="true" ayarını gerektirir.


Yöntem


Sözdizimi


Aralık Birimi


En Uygun Kullanım


EVERY yan tümcesi (Önerilir)


REFRESH EVERY N MINUTES/HOURS/DAYS


Dakika, saat veya gün


Okunabilir sözdizimine sahip sabit aralıklar


refresh_interval_minutes


TBLPROPERTIES("refresh_interval_minutes"="N")


Yalnızca dakika


Tablo özellikleri üzerinden dakika düzeyinde kontrol


refresh_cron


TBLPROPERTIES("refresh_cron"="expression")


Quartz Cron ifadesi


Günün belirli saatlerine göre zamanlamalar veya gelişmiş Cron desenleri

Zamanlanmış yenilemeyi etkinleştirme

Ön koşullar

  • Yeterli hesaplama kaynağına sahip bir MaxCompute projesi

  • Veri içeren bir kaynak tablo

Tüm örneklerde aşağıdaki kaynak tablo kullanılır:

CREATE TABLE mf_refresh (id BIGINT, name STRING);
INSERT INTO TABLE mf_refresh VALUES (1,'kyle'),(2,'tom');

Tam sözdizimi

CREATE MATERIALIZED VIEW [IF NOT EXISTS] [project_name.]mv_name
[LIFECYCLE days]
[(col_name [COMMENT col_comment], ...)]
[DISABLE REWRITE]
[PARTITIONED BY (col_name [, col_name, ...])]
[CLUSTERED BY|RANGE CLUSTERED BY (col_name [, col_name, ...])
  [SORTED BY (col_name [ASC | DESC] [, col_name [ASC | DESC] ...])]
  INTO number_of_buckets BUCKETS]
[REFRESH EVERY N MINUTES/HOURS/DAYS]
TBLPROPERTIES("enable_auto_refresh"="true"[, "refresh_interval_minutes"="N"][, "refresh_cron"="expression"])
AS <select_statement>;


Parametre


Açıklama


LIFECYCLE days


Materialized view'in sona ermesinden önceki gün sayısı


DISABLE REWRITE


Materialized view tabanlı otomatik sorgu yeniden yazmayı devre dışı bırakır


PARTITIONED BY


Bölümlendirilmiş materialized view'ler için bölüm anahtarı sütunları


CLUSTERED BY / RANGE CLUSTERED BY


Karma ve sıralama nitelikleri. INTO number_of_buckets BUCKETS gerektirir


REFRESH EVERY N MINUTES/HOURS/DAYS


Sabit yenileme aralığı


"enable_auto_refresh"="true"


Zamanlanmış yenilemeyi etkinleştirir. Üç yöntem için de gereklidir


"refresh_interval_minutes"="N"


Dakika cinsinden yenileme aralığı


"refresh_cron"="expression"


Zamana dayalı zamanlama için Quartz Cron ifadesi. İfade 6 veya 7 alan kullanır (saniye, dakika, saat, ayın günü, ay, haftanın günü ve isteğe bağlı olarak yıl). Standart 5 alanlı Unix cron desteklenmez. Daha fazla bilgi için bkz. Cron ifade örnekleri

Yöntem 1: EVERY yan tümcesi (Önerilir)

Yenileme aralığını doğrudan CREATE MATERIALIZED VIEW ifadesinde belirtin. Sonraki yenileme, önceki yenileme zamanına belirtilen aralığın eklenmesiyle çalışır.

  1. Her 10 dakikada bir yenilenen bir materialized view oluşturun.

       CREATE MATERIALIZED VIEW IF NOT EXISTS mf_mv_refresh
       REFRESH EVERY 10 MINUTES
       TBLPROPERTIES("enable_auto_refresh"="true")
       AS SELECT id, name FROM mf_refresh;
  2. İlk verileri doğrulamak için materialized view'i sorgulayın. Çıktı:

       SELECT * FROM mf_mv_refresh;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       +------------+------------+
  3. Kaynak tabloya yeni satırlar ekleyin.

       INSERT INTO TABLE mf_refresh VALUES (3,'jen'),(4,'cathy');
  4. 10 dakika sonra materialized view'i sorgulayın. Zamanlanmış yenileme tamamlandıktan sonra yeni satırlar görünür. Çıktı:

       SELECT * FROM mf_mv_refresh;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 3          | jen        |
       | 4          | cathy      |
       +------------+------------+

Yöntem 2: refresh_interval_minutes

Yenileme aralığını TBLPROPERTIES aracılığıyla dakika cinsinden ayarlayın. Sonraki yenileme, önceki yenileme zamanına belirtilen dakika sayısının eklenmesiyle çalışır.

  1. Her 20 dakikada bir yenilenen bir materialized view oluşturun.

       CREATE MATERIALIZED VIEW IF NOT EXISTS mf_mv_refresh2
       TBLPROPERTIES("enable_auto_refresh"="true", "refresh_interval_minutes"="20")
       AS SELECT id, name FROM mf_refresh;
  2. İlk verileri doğrulamak için materialized view'i sorgulayın. Çıktı:

       SELECT * FROM mf_mv_refresh2;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 3          | jen        |
       | 4          | cathy      |
       +------------+------------+
  3. Kaynak tabloya yeni satırlar ekleyin.

       INSERT INTO TABLE mf_refresh VALUES (5,'roger'),(6,'david');
  4. 20 dakika sonra materialized view'i sorgulayın. Zamanlanmış yenileme tamamlandıktan sonra yeni satırlar görünür. Çıktı:

       SELECT * FROM mf_mv_refresh2;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 3          | jen        |
       | 4          | cathy      |
       | 5          | roger      |
       | 6          | david      |
       +------------+------------+

Yöntem 3: refresh_cron

Aralık tabanlı veya günün saatine göre zamanlamaları tanımlamak için bir Quartz Cron ifadesi kullanın. refresh_cron değeri, Quartz Cron formatında bir dizedir.

Örnek: Her 5 dakikada bir yenileme

  1. Her 5 dakikada bir yenilenen bir materialized view oluşturun.

       CREATE MATERIALIZED VIEW IF NOT EXISTS mf_mv_refresh3
       TBLPROPERTIES("enable_auto_refresh"="true", "refresh_cron"="* */5 * * * ?  *")
       AS SELECT id, name FROM mf_refresh;
  2. İlk verileri doğrulamak için materialized view'i sorgulayın. Çıktı:

       SELECT * FROM mf_mv_refresh3;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 3          | jen        |
       | 4          | cathy      |
       | 5          | roger      |
       | 6          | david      |
       +------------+------------+
  3. Kaynak tabloya yeni satırlar ekleyin.

       INSERT INTO TABLE mf_refresh VALUES (7,'ethan'),(8,'cal');
  4. 5 dakika sonra materialized view'i sorgulayın. Zamanlanmış yenileme tamamlandıktan sonra yeni satırlar görünür. Çıktı:

       SELECT * FROM mf_mv_refresh3;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 7          | ethan      |
       | 8          | cal        |
       | 3          | jen        |
       | 4          | cathy      |
       | 5          | roger      |
       | 6          | david      |
       +------------+------------+

Örnek: Her gün saat 20:00'de yenileme

  1. Her gün saat 20:00'de yenilenen bir materialized view oluşturun.

       CREATE MATERIALIZED VIEW IF NOT EXISTS mf_mv_refresh4
       TBLPROPERTIES("enable_auto_refresh"="true", "refresh_cron"="0 0 20 * * ?  *")
       AS SELECT id, name FROM mf_refresh;
  2. İlk verileri doğrulamak için materialized view'i sorgulayın. Çıktı:

       SELECT * FROM mf_mv_refresh4;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 7          | ethan      |
       | 8          | cal        |
       | 3          | jen        |
       | 4          | cathy      |
       | 5          | roger      |
       | 6          | david      |
       +------------+------------+
  3. Kaynak tabloya yeni satırlar ekleyin.

       INSERT INTO TABLE mf_refresh VALUES (9,'annie'),(10,'zoe');
  4. Saat 20:00'den sonra materialized view'i sorgulayın. Zamanlanmış yenileme tamamlandıktan sonra yeni satırlar görünür. Çıktı:

       SELECT * FROM mf_mv_refresh4;
       +------------+------------+
       | id         | name       |
       +------------+------------+
       | 1          | kyle       |
       | 2          | tom        |
       | 9          | annie      |
       | 10         | zoe        |
       | 7          | ethan      |
       | 8          | cal        |
       | 3          | jen        |
       | 4          | cathy      |
       | 5          | roger      |
       | 6          | david      |
       +------------+------------+

Yenileme çizelgesini değiştirme

Yenileme aralığını değiştirmek veya farklı bir zamanlama yöntemine geçmek için ALTER MATERIALIZED VIEW kullanın:

ALTER MATERIALIZED VIEW mf_mv_refresh2 SET TBLPROPERTIES("enable_auto_refresh"="true", "refresh_interval_minutes"="xx");
ALTER MATERIALIZED VIEW mf_mv_refresh3 SET TBLPROPERTIES("enable_auto_refresh"="true", "refresh_cron"="xx");

Zamanlanmış yenilemeyi devre dışı bırakma

enable_auto_refresh değerini false olarak ayarlayın:

ALTER MATERIALIZED VIEW mf_mv_refresh SET TBLPROPERTIES("enable_auto_refresh"="false");

Yenileme geçmişini görüntüleme

Yenileme geçmişini ve yapılandırma ayrıntılarını görüntülemek için DESC EXTENDED çalıştırın:

DESC EXTENDED mv;

Çıktı, her yenileme çalıştırması için örnek ID'si, durum, başlangıç zamanı ve bitiş zamanını içeren AutoRefresh History bölümünü içerir:

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

MaxCompute'de TERMINATED durumu, görev yürütmesinin tamamlandığı anlamına gelir. Bu durum hem başarılı hem de başarısız çalıştırmaları kapsar. Materialized view meta verileri hakkında daha fazla bilgi için bkz. Materialized view hakkında bilgi sorgulama.

İlgili Konular