共用方式為


具體化檢視使用案例

具體化檢視 會在源數據表或其他具體化檢視上公開 匯總 查詢。 本文涵蓋具體化檢視的常見和進階使用案例。

常見的使用案例

以下是使用具體化檢視可以解決的常見案例:

  • 更新數據: 使用 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,請參閱具體化檢視查詢參數和事實和維度數據表

注意

如果您需要具體化不適合更新原則和具體化檢視的聯結,您可以使用協調流程工具和從查詢命令擷取來協調自己的程式。