.alter materialized-view
適用於: ✅Microsoft網狀架構✅Azure 數據總管
改變具體化檢視可用於變更具體化檢視的查詢,同時保留檢視中的現有數據。
警告
更改具體化檢視時,請特別小心。 不正確的使用可能會導致數據遺失。
權限
您必須至少有 具體化檢視管理員 許可權才能執行此命令。
語法
.alter
materialized-view
[ with
(
PropertyName =
PropertyValue,
...)
] MaterializedViewName SourceTableName查詢on table
{
}
深入瞭解 語法慣例。
參數
姓名 | 類型 | 必要 | 描述 |
---|---|---|---|
PropertyName、 PropertyValue | string |
名稱與值組形式的屬性清單,來自支援的屬性清單。 | |
MaterializedViewName | string |
✔️ | 具體化檢視的名稱。 |
SourceTableName | string |
✔️ | 定義檢視的來源數據表名稱。 |
查詢 | string |
✔️ | 具體化檢視的查詢定義。 |
支援的屬性
PropertyName =
PropertyValue)
子句支援with
(
下列屬性。 所有屬性都是選擇性的。
名稱 | 類型 | 描述 |
---|---|---|
lookback | timespan |
僅適用於arg_max arg_min //take_any 具體化檢視。 它會限制預期重複項目的時間週期。 例如,如果在檢視上 arg_max 指定了 6 小時的回溯,新擷取記錄與現有記錄之間的重複資料刪除只會考慮最多 6 小時前擷取的記錄。 回溯相對於 ingestion_time 。 不正確地定義回溯期間可能會導致具體化檢視中的重複專案。 例如,如果特定索引鍵的記錄在擷取相同索引鍵的記錄之後 10 小時內嵌,且回溯設定為 6 小時,該索引鍵會在檢視中重複。 回溯期間會同時套用具體化時間和查詢時間。 |
autoUpdateSchema | bool |
是否要自動更新源數據表上的檢視變更。 預設值為 false 。 此選項僅適用於 類型的 arg_max(Timestamp, *) /arg_min(Timestamp, *) /take_any(*) 檢視(只有當數據行的自變數為 * 時)。 如果此選項設定為 true ,源數據表的變更將會自動反映在具體化檢視中。 |
dimensionTables | 陣列 | 包含檢視中維度數據表數位的動態自變數。 請參閱 查詢參數。 |
folder | string |
具體化檢視的資料夾。 |
docString | string |
記錄具體化檢視的字串。 |
傳回
輸出架構:
名稱 | 類型 | Description |
---|---|---|
名稱 | string |
具體化檢視的名稱。 |
SourceTable | string |
定義檢視的來源數據表名稱。 |
Query | string |
具體化檢視的查詢定義。 |
MaterializedTo | datetime |
源數據表中具體化ingestion_time() 時間戳上限。 如需詳細資訊,請參閱 具體化檢視的運作方式。 |
LastRun | datetime |
上次執行具體化的時間。 |
LastRunResult | string |
上次執行的結果。 傳 Completed 回成功執行,否則 Failed 傳回 。 |
IsHealthy | bool |
true 當檢視視為狀況良好時, false 否則為 。 如果檢視已成功具體化到最後一小時(MaterializedTo ago(1h) 大於 ),則檢視會視為狀況良好。 |
IsEnabled | bool |
true 啟用檢視時(請參閱 停用或啟用具體化檢視)。 |
Folder | string |
建立具體化檢視的資料夾。 |
DocString | string |
指派給具體化檢視的描述。 |
AutoUpdateSchema | bool |
是否啟用檢視以進行自動更新。 |
EffectiveDateTime | datetime |
檢視的有效日期時間,在建立期間決定 (請參閱 .create materialized-view )。 |
回顧 | timespan |
時間範圍會限制預期重複項目的時間週期。 |
範例
修改具體化檢視的查詢定義
下列命令會修改具體化檢視 MyView 的查詢定義:
.alter materialized-view MyView on table MyTable
{
MyTable | summarize arg_max(Column3, *) by Column1
}
輸出
名稱 | SourceTable | Query | MaterializedTo | LastRun | LastRunResult | IsHealthy | IsEnabled | Folder | DocString | AutoUpdateSchema | EffectiveDateTime | 回顧 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
MyView | MyTable | MyTable |summarize arg_max(Column3, *) by Column1 | 2023-02-26T16:40:03.3345704Z | 2023-02-26T16:44:15.9033667Z | 已完成 | true | true | false | 2023-02-23T14:01:42.5172342Z |
使用案例
- 將匯總新增至檢視 - 例如,藉由將檢視查詢變更為 ,將匯總新增
avg
至T | summarize count(), min(Value) by Id
T | summarize count(), min(Value), avg(Value) by Id
。 - 變更摘要運算子以外的運算符。 例如,藉由將 變更
T | summarize arg_max(Timestamp, *) by User
為T | where User != 'someone' | summarize arg_max(Timestamp, *) by User
來篩選掉某些記錄。 - 因為源數據表中的變更,因此不會變更查詢。 例如,假設的檢視
T | summarize arg_max(Timestamp, *) by Id
未設定為autoUpdateSchema
(請參閱.create materialized-view
命令)。 如果從檢視的源數據表加入或移除數據行,則會自動停用檢視。 使用完全相同的查詢執行alter命令,以變更具體化檢視的架構,以配合新的資料表架構。 使用 啟用具體化檢視命令,在變更之後仍必須明確啟用檢視 。
限制
不支援變更:
- 依表達式對具體化檢視群組所做的變更。
- 變更數據行類型。
- 重新命名數據行。 例如,將的檢視
T | summarize count() by Id
變更為T | summarize Count=count() by Id
卸除數據行count_
,並建立新的數據行Count
,其一開始只包含 Null。
對現有資料的影響:
- 改變具體化檢視不會影響現有的數據。
- 將篩選新增至查詢只會套用至新擷取的記錄,而且不會變更已經具體化的記錄。
- 新數據行會接收所有現有記錄的 Null,直到在 alter 命令修改 Null 值之後擷取的記錄為止。
- 例如:的
T | summarize count() by bin(Timestamp, 1d)
檢視會變更為T | summarize count(), sum(Value) by bin(Timestamp, 1d)
。 對於在變更檢視之前已經處理記錄的特定Timestamp=T
數據,數據sum
行會包含部分數據。 此檢視只會包含更改執行之後處理的記錄。