具體化檢視使用案例
具體化檢視表 公開源數據表或其他具體化檢視的 匯總 查詢。 本文涵蓋具體化檢視的常見和進階使用案例。
常見的使用案例
以下是可使用具體化檢視來解決的常見案例:
更新數據:使用
arg_max()
傳回每個實體的最後一筆記錄,以 更新數據。 例如,建立只具體化從現在開始擷取的記錄的檢視:.create materialized-view ArgMax on table T { T | summarize arg_max(Timestamp, *) by User }
減少數據解析 藉由計算原始數據的定期統計數據來減少數據的解析。 使用各種 聚合函數 一段時間。 例如,維護每天相異使用者 up-to日期快照集:
.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
如需 具體化檢視查詢參數 和 事實和維度數據表的詳細資訊,請參閱 。