このトピックでは、マテリアライズドビューのスケジュール更新機能と関連操作について説明します。
使用上の注意
具体化されたビューのスケジュールされた更新は、本質的に、システムバックグラウンドによって提出されるタスクである。 更新完了時間は、使用可能なクラスターリソースの量とタスクのサイズによって異なります。
スケジュールされた更新がトリガーされると、すべてのデータが更新されます。
パーティション化されたマテリアライズドビューのパーティションキー列に対応するパーティション化ベーステーブルのパーティション内のデータが変更された場合、マテリアライズドビューの関連付けられたパーティション内のデータのみが更新されます。 他のパーティションのデータは影響を受けません。 パーティション分割されたマテリアライズドビューに関連付けられている他のテーブルのデータが変更されると、マテリアライズドビューの全データが更新されます。
パーティション分割されていないマテリアライズドビューのスケジュール更新機能を有効にすると、更新操作が必要かどうかが自動的に確認されます。 ソーステーブル内のデータが更新されない場合、更新操作はスキップされます。
スケジュールされた更新が次の更新時間の前に完了しない場合、システムは自動的に次のスケジュールされた更新をキャンセルし、最後のスケジュールされた時間に新しい更新をトリガーします。
例えば、スケジュールされた更新は、20分の間隔でトリガされる。 第1の更新が
10:00:00にスケジュールされている場合、第2の更新は10:20:00にスケジュールされる予定であり、第3の更新は10:40:00にスケジュールされる予定である。最初の更新が
10:00:00で開始し、10:30:00で終了する場合、10:20:00にスケジュールされる予定の更新はキャンセルされ、次の更新は10:40:00にスケジュールされます。MaxComputeは、マテリアライズドビューのスケジュールされた更新設定をリアルタイムで検出できず、マテリアライズドビューの自動更新タスクを30分未満の遅延で送信する場合があります。
マテリアライズドビューのスケジュール更新機能の有効化
次のいずれかの方法を使用して、MaxComputeのマテリアライズドビューのスケジュール更新機能を有効にできます。
このトピックの例では、mf_refreshテーブルに基づいてマテリアライズドビューが作成されます。
CREATE TABLE mf_refresh (id bigint, name string);
INSERT INTO TABLE mf_refresh VALUES (1,'kyle'),(2,'tom');EVERYパラメーターの使用
マテリアライズドビューを作成するときに、マテリアルビューを更新する間隔を指定します。 間隔は、N分、時間、または日とすることができる。 次の更新時間は、前の更新時間にN分、時間、または日を加えたものである。
構文
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [project_name.]mv_name [LIFECYCLE days] -- The lifecycle of the materialized view. [(col_name [COMMENT col_comment], ...)] -- The column comments. [DISABLE REWRITE] -- Specifies whether to disable the query rewrite operation that is performed based on the materialized view. [PARTITIONED BY (col_name [, col_name, ...]) -- The partition key columns in the materialized view. This parameter is required when you create a partitioned materialized view. [CLUSTERED BY|RANGE CLUSTERED BY (col_name [, col_name, ...]) [SORTED BY (col_name [ASC | DESC] [, col_name [ASC | DESC] ...])] INTO number_of_buckets BUCKETS] -- The shuffle and sort attributes of the materialized view. This parameter is required when you create a clustered materialized view. [REFRESH EVERY xx MINUTES/HOURS/DAYS] -- The scheduled update interval of the materialized view. TBLPROPERTIES("enable_auto_refresh"="true") -- Enable the scheduled update feature for the materialized view. AS <select_statement>;例
10分間隔で更新されるマテリアライズドビューを作成します。
mf_mv_refreshという名前のマテリアライズドビューを作成し、マテリアライズドビューを照会します。
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; SELECT * FROM mf_mv_refresh;次の結果が返されます。
+------------+------------+ | id | name | +------------+------------+ | 1 | kyle | | 2 | tom | +------------+------------+テーブルにデータを挿入します。
INSERT INTO TABLE mf_refresh VALUES (3,'jen'),(4,'cathy');10分後にマテリアライズドビューを照会します。
SELECT * FROM mf_mv_refresh;次の結果が返されます。
+------------+------------+ | id | name | +------------+------------+ | 1 | kyle | | 2 | tom | | 3 | jen | | 4 | cathy | +------------+------------+
を使用します。Use therefresh_interval_minutesTBLPROPERTIESのパラメータ
マテリアライズドビューを作成するときに、スケジュールされた更新間隔を指定します。 たとえば、スケジュールされた更新間隔をN分に設定します。 次の更新時点は、前の更新時点にN分を加えたものである。
構文
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [project_name.]mv_name [LIFECYCLE days] -- The lifecycle of the materialized view. [(col_name [COMMENT col_comment], ...)] -- The column comments. [DISABLE REWRITE] -- Specifies whether to disable the query rewrite operation that is performed based on the materialized view. [PARTITIONED BY (col_name [, col_name, ...]) -- The partition key columns in the materialized view. This parameter is required when you create a partitioned materialized view. [CLUSTERED BY|RANGE CLUSTERED BY (col_name [, col_name, ...]) [SORTED BY (col_name [ASC | DESC] [, col_name [ASC | DESC] ...])] INTO number_of_buckets BUCKETS] -- The shuffle and sort attributes of the materialized view. This parameter is required when you create a clustered materialized view. TBLPROPERTIES("enable_auto_refresh"="true", "refresh_interval_minutes"="xx") -- Enable the scheduled update feature. AS <select_statement>;例
20分間隔で更新されるマテリアライズド・ビューを作成します。
mf_mv_refresh2という名前のマテリアライズドビューを作成し、マテリアライズドビューを照会します。
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; SELECT * FROM mf_mv_refresh2;次の結果が返されます。
+------------+------------+ | id | name | +------------+------------+ | 1 | kyle | | 2 | tom | | 3 | jen | | 4 | cathy | +------------+------------+テーブルにデータを挿入します。
INSERT INTO TABLE mf_refresh VALUES (5,'roger'),(6,'david');20分後にマテリアライズドビューを照会します。
SELECT * FROM mf_mv_refresh2;次の結果が返されます。
+------------+------------+ | id | name | +------------+------------+ | 1 | kyle | | 2 | tom | | 3 | jen | | 4 | cathy | | 5 | roger | | 6 | david | +------------+------------+
TBLPROPERTIESのrefresh_cronパラメーターを使用
Cron式を使用して、スケジュールされた更新の間隔または時点を指定できます。
構文
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [project_name.]mv_name [LIFECYCLE days] -- The lifecycle of the materialized view. [(col_name [COMMENT col_comment], ...)] -- The column comments. [DISABLE REWRITE] -- Specifies whether to disable the query rewrite operation that is performed based on the materialized view. [PARTITIONED BY (col_name [, col_name, ...]) -- The partition key columns in the materialized view. This parameter is required when you create a partitioned materialized view. [CLUSTERED BY|RANGE CLUSTERED BY (col_name [, col_name, ...]) [SORTED BY (col_name [ASC | DESC] [, col_name [ASC | DESC] ...])] INTO number_of_buckets BUCKETS] -- The shuffle and sort attributes of the materialized view. This parameter is required when you create a clustered materialized view. TBLPROPERTIES("enable_auto_refresh"="true", "refresh_cron"="xx") -- Enable the scheduled update feature. AS <select_statement>;refresh_cronパラメーターは、Quartz cron形式の文字列です。 詳細については、「Cron式の例」をご参照ください。例
5分間隔で更新されるマテリアライズド・ビューを作成します。
mf_mv_refresh3という名前のマテリアライズドビューを作成し、マテリアライズドビューを照会します。
CREATE MATERIALIZED VIEW IF NOT EXISTS mf_mv_refresh3 TBLPROPERTIES("enable_auto_refresh"="true", "refresh_cron"="* */5 * * * ? *") AS SELECT id,name FROM mf_refresh; SELECT * FROM mf_mv_refresh3;次の結果が返されます。
+------------+------------+ | id | name | +------------+------------+ | 1 | kyle | | 2 | tom | | 3 | jen | | 4 | cathy | | 5 | roger | | 6 | david | +------------+------------+テーブルにデータを挿入します。
INSERT INTO TABLE mf_refresh VALUES (7,'ethan'),(8,'cal');5分後にマテリアライズドビューを照会します。
SELECT * FROM mf_mv_refresh3;次の結果が返されます。
+------------+------------+ | id | name | +------------+------------+ | 1 | kyle | | 2 | tom | | 7 | ethan | | 8 | cal | | 3 | jen | | 4 | cathy | | 5 | roger | | 6 | david | +------------+------------+
毎晩20:00に更新されるマテリアライズドビューを作成します。
mf_mv_refresh4という名前のマテリアライズドビューを作成し、マテリアライズドビューを照会します。
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; SELECT * FROM mf_mv_refresh4;次の結果が返されます。
+------------+------------+ | id | name | +------------+------------+ | 1 | kyle | | 2 | tom | | 7 | ethan | | 8 | cal | | 3 | jen | | 4 | cathy | | 5 | roger | | 6 | david | +------------+------------+テーブルにデータを挿入します。
INSERT INTO TABLE mf_refresh VALUES (9,'annie'),(10,'zoe');20:00後にマテリアライズドビューを照会します。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 | +------------+------------+
マテリアライズドビューのスケジュール更新の間隔の変更
次のいずれかのステートメントを実行して、マテリアライズド・ビューのスケジュールされた更新の間隔を変更します。
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");スケジュール更新の無効化
次のステートメントを実行して、マテリアライズド・ビューのスケジュール更新機能を無効にします。
ALTER MATERIALIZED VIEW mf_mv_refresh SET TBLPROPERTIES("enable_auto_refresh"="false");マテリアライズドビューの更新履歴の表示
マテリアライズド・ビューの更新履歴を表示するには、次のステートメントを実行します。
DESC EXTENDED mv;次の結果が返されます。 マテリアライズドビューの詳細については、「マテリアライズドビューに関する情報の照会」をご参照ください。
+------------------------------------------------------------------------------------+
| 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 |
+------------------------------------------------------------------------------------+関連ドキュメント
マテリアライズドビューに対する操作の詳細については、「マテリアライズドビュー操作」をご参照ください。
共通クエリをマテリアライズドビューからクエリに書き直す方法の詳細については、「マテリアライズドビューのクエリと書き直し」をご参照ください。