具體化檢視使用案例
具體化檢視 會在源數據表或其他具體化檢視上公開 匯總 查詢。 本文涵蓋具體化檢視的常見和進階使用案例。
常見的使用案例
以下是使用具體化檢視可以解決的常見案例:
更新數據: 使用
arg_max()
(匯總 函式傳回每個實體的最後一筆記錄,) 更新數據。 例如,建立只具體化從現在開始擷取的記錄的檢視:.create materialized-view ArgMax on table T { T | summarize arg_max(Timestamp, *) by User }
減少數據的解析 藉由計算原始數據的定期統計數據,以減少數據的解析。 依時間期間使用各種彙總函數。 例如,每天維護不同使用者的最新快照集:
.create materialized-view UsersByDay on table T { T | summarize dcount(User) by bin(Timestamp, 1d) }
重複資料刪除記錄: 使用
take_any()
(聚合函數) 資料表中的重複資料刪除記錄。 例如,使用 6 小時回溯建立重複資料刪除源數據表的EventId
具體化檢視。 記錄只會針對目前記錄之前擷取 6 小時的記錄進行重複資料刪除。.create materialized-view with(lookback=6h) DeduplicatedTable on table T { T | summarize take_any(*) by EventId }
注意
您可以建立與參考具體化檢視表相同名稱的函式來隱藏源數據表。 此模式可確保查詢數據表的呼叫端會存取重複數據刪除具體化檢視,因為 函式會覆寫具有相同名稱的數據表。 若要避免檢視定義中的循環參考,請使用 table () 函式來參考源數據表:
.create materialized-view DeduplicatedTable on table T { table('T') | summarize take_any(*) by EventId }
如需更多範例,請參閱 .create materialized-view 命令。
進階案例
您可以使用具體化檢視來建立/更新/刪除事件處理。 處理每個數據行不完整或過期資訊的記錄時,具體化檢視可以提供每個數據行的最新更新,但不包括已刪除的實體。
請考慮以下名為 Events
的輸入資料表:
輸入
時間戳記 | 反芻 | 識別碼 | col1 | col2 | col3 |
---|---|---|---|---|---|
2023-10-24 00:00:00.0000000 | C | 1 | 1 | 2 | |
2023-10-24 01:00:00.0000000 | U | 1 | 22 | 33 | |
2023-10-24 02:00:00.0000000 | U | 1 | 23 | ||
2023-10-24 00:00:00.0000000 | C | 2 | 1 | 2 | |
2023-10-24 00:10:00.0000000 | U | 2 | 4 | ||
2023-10-24 02:00:00.0000000 | D | 2 |
使用 arg_max () 匯總函式,建立具體化檢視以取得每個數據行的最新更新:
.create materialized-view ItemHistory on table Events
{
Events
| extend Timestamp_col1 = iff(isnull(col1), datetime(1970-01-01), Timestamp),
Timestamp_col2 = iff(isnull(col2), datetime(1970-01-01), Timestamp),
Timestamp_col3 = iff(isnull(col3), datetime(1970-01-01), Timestamp)
| summarize arg_max(Timestamp_col1, col1), arg_max(Timestamp_col2, col2), arg_max(Timestamp_col3, col3), arg_max(Timestamp, cud) by id
}
輸出
識別碼 | Timestamp_col1 | col1 | Timestamp_col2 | col2 | Timestamp_col3 | col3 | 時間戳記 | 反芻 |
---|---|---|---|---|---|---|---|---|
2 | 2023-10-24 00:00:00.0000000 | 1 | 2023-10-24 00:10:00.0000000 | 4 | 1970-01-01 00:00:00.0000000 | 2023-10-24 02:00:00.0000000 | D | |
1 | 2023-10-24 00:00:00.0000000 | 1 | 2023-10-24 02:00:00.0000000 | 23 | 2023-10-24 01:00:00.0000000 | 33 | 2023-10-24 02:00:00.0000000 | U |
您可以建立 預存函 式來進一步清除結果:
ItemHistory
| project Timestamp, cud, id, col1, col2, col3
| where cud != "D"
| project-away cud
最終輸出
標識子 的每個數據行 1
的最新更新,因為 2
標識碼已刪除。
時間戳記 | 識別碼 | col1 | col2 | col3 |
---|---|---|---|---|
2023-10-24 02:00:00.0000000 | 1 | 1 | 23 | 33 |
具體化檢視與更新原則
具體化檢視和更新原則的運作方式不同,並提供不同的使用案例。 使用下列指導方針來識別您應該使用的指導方針:
具體化檢視適用於 匯總,而更新原則則不適用。 更新原則會針對每個擷取批次個別執行,因此只能在相同的擷取批次內執行匯總。 如果您需要匯總查詢,請一律使用具體化檢視。
更新原則適用於數據轉換、維度數據表的擴充 (通常會使用 查閱運算子) 和其他可在單一擷取範圍內執行的數據操作。
更新原則會在擷取期間執行。 除非執行所有更新原則,否則源數據表或目標數據表中的查詢無法使用數據。 另一方面,具體化檢視不是擷取管線的一部分。 具體化程式會在背景、擷取后定期執行。 源數據表中的記錄在具體化之前可供查詢使用。
更新原則和具體化檢視都可以納入 聯結,但其有效性僅限於特定案例。 具體而言,只有在更新原則或具體化程式時可存取兩端聯結所需的數據時,才適用聯結。 如果在更新原則或具體化執行時擷取相符的實體,則會有忽略數據的風險。 如需詳細資訊
dimension tables
,請參閱具體化檢視查詢參數和事實和維度數據表。
相關內容
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應