共用方式為


具體化檢視使用案例

適用於:✅Microsoft FabricAzure 數據總管

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

常見的使用案例

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

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

注意

如果您需要 具體化 不適合更新原則和具體化檢視的聯結,您可以自行管理此程式。 若要建立及儲存聯結作業的結果,請使用 協調流程工具,並從查詢命令內嵌。