Share via


連續資料匯出概觀

本文說明如何使用定期執行的查詢,將資料從 Kusto 連續匯出到外部資料表。 結果會儲存在外部資料表中以定義目的地 (例如 Azure Blob 儲存體),以及匯出資料的結構描述。 此程式可保證所有記錄都只會匯出「剛好一次」,但可能會有一些例外狀況。 根據預設,連續匯出會在分散式模式中執行,其中所有節點會同時匯出,因此成品數目取決於叢集中的節點數目。 連續導出不是針對叢集外低延遲串流數據所設計。

若要啟用連續資料匯出,請先建立外部資料表,然後建立連續匯出定義並指向外部資料表。

在某些情況下,您必須使用受控識別成功設定連續匯出作業。 如需詳細資訊,請參閱 使用受控識別來執行連續匯出作業

權限

所有連續匯出命令至少需要資料庫 管理員許可權。

連續匯出指南

  • 輸出結構描述

    • 匯出查詢的輸出結構描述必須與匯出的外部資料表結構描述相符。
  • 頻率

    • 連續匯出會根據 intervalBetweenRuns 屬性中所設定的時間週期執行。 建議此間隔的值應設為至少幾分鐘,視您願意接受的延遲而定。 如果內嵌速率很高,則時間間隔可以小到一分鐘。

      注意

      intervalBetweenRuns 只能當作建議,無法保證精確度。 連續匯出不適合用來匯出定期彙總。 例如,若設定 intervalBetweenRuns=1h 以及每小時彙總 (T | summarize by bin(Timestamp, 1h)) 將無法如預期般運作,因為連續匯出不會剛好在整點時執行。 因此,在每個小時的間隔內都會收到匯出資料中的多個項目。

  • 檔案數目

    • 每次連續匯出時匯出的檔案數目,取決於外部資料表的分割方式。 如需詳細資訊,請參閱匯出到外部資料表命令。 每次連續匯出時,一律會寫入到新的檔案,永遠不會附加到現有的檔案。 因此,匯出的檔案數目也取決於連續匯出的執行頻率。 頻率參數為 intervalBetweenRuns
  • 外部資料表儲存體帳戶

    • 為了獲得最佳效能,叢集和記憶體帳戶 () 應該共置在相同的 Azure 區域中。
    • 連續匯出會以分散式方式運作,因此會同時匯出叢集中的所有節點。 在大型叢集上,如果匯出的資料量很大,這可能會導致儲存體節流。 建議您為外部資料表設定多個儲存體帳戶。 如需詳細資訊,請參閱執行匯出命令期間發生儲存失敗

匯出剛好一次

為保證只匯出「剛好一次」,連續匯出會使用資料庫資料指標。 連續匯出查詢不應包含時間戳記篩選,資料庫資料指標機制可確保系統在處理記錄時不會超過一次。 若在查詢中新增時間戳記篩選,可能會導致匯出的資料中遺漏資料。

在查詢中要參考的所有資料表上,都必須啟用 IngestionTime 原則 (在匯出時,系統應該只處理此查詢「剛好一次」)。 依預設會在所有新建立的資料表上啟用此原則。

只匯出「剛好一次」的保證,只適用於顯示匯出成品命令中所報告的檔案。 連續匯出不保證每一筆記錄只會寫入到外部資料表一次。 如果在匯出開始之後發生失敗,而且某些成品已經寫入外部數據表,則外部數據表可能包含重複專案。 如果在完成之前中止寫入作業,外部數據表可能會包含損毀的檔案。 在這種情況下,系統不會刪除外部資料表中的成品,但也不會在顯示匯出成品命令中報告這些成品。 利用 show exported artifacts command 來使用匯出的檔案,可保證資料不會重複也不會損毀。

從事實和維度資料表匯出

依預設,匯出查詢中參考的所有資料表都會假設為事實資料表。 因此,其範圍可用資料庫資料指標來界定。 語法會明確宣告範圍要包含哪些資料表 (事實),以及不包含哪些 (維度)。 如需詳細資料,請參閱建立命令中的 over 參數。

匯出查詢只會包含自上一次匯出執行以來加入的記錄。 匯出查詢可能包含 維度數據表 ,其中維度數據表的所有記錄都包含在所有匯出查詢中。 在連續匯出的事實和維度資料表之間使用聯結時,請記住,系統只會處理事實資料表中的記錄一次。 如果匯出時執行維度資料表中的記錄遺漏了某些索引鍵,在匯出檔案中的維度資料行內,這些索引鍵的記錄可能會遺漏,也可能包含 null 值。 會傳回遺漏或 null 的記錄,取決於查詢是使用內部或外部聯結。 連續匯出定義中的 forcedLatency 屬性在這種情況下很有用,因為事實和維度資料表會在相同時間進行內嵌,以便讓記錄相符。

注意

不支援只連續匯出維度資料表。 匯出查詢必須至少包含一個事實資料表。

監視連續匯出

使用下列匯出計量來監視連續匯出作業的健康情況:

  • Continuous export max lateness - 叢集內連續匯出的最大延遲 (分鐘)。 這是目前的時間,與叢集內所有連續匯出工作最小 ExportedTo 時間之間的時間。 如需詳細資訊,請參閱 .show continuous export 命令。
  • Continuous export result - 每次連續匯出執行的成功/失敗結果。 您可以按照連續匯出名稱來分割此計量。

使用 .show continuous export failures 命令可查看連續匯出作業的特定失敗。

警告

如果連續匯出因為永久失敗而失敗超過 7 天,系統會自動停用匯出。 永久錯誤包括:找不到外部資料表、連續匯出查詢的結構描述與外部資料表的結構描述不符、無法存取儲存體帳戶。 修正錯誤之後,就可以使用 .enable continuous export 命令重新啟用連續匯出。

資源耗用量

  • 連續匯出對叢集的影響,取決於連續匯出正在執行的查詢。 大部分的資源 (例如 CPU 和記憶體) 都是耗用在執行查詢上。
  • 可同時執行的匯出作業數目,受限於叢集的資料匯出容量。 如需詳細資訊,請參閱 管理命令節流。 如果叢集沒有足夠的容量可處理所有連續匯出,有些連續匯出就會開始落後。
  • show commands-and-queries 命令可以用來預估資源耗用量。
    • 篩選 | where ClientActivityId startswith "RunContinuousExports" 可查看與連續匯出相關聯的命令和查詢。

匯出歷程資料

連續匯出只會從建立的時間點開始匯出資料。 在那之前內嵌的記錄,應使用非連續的匯出命令分開匯出。 歷程記錄數據可能太大,無法在單一導出命令中匯出。 如有需要,請將查詢分割成數個較小的批次。

若要避免連續匯出所匯出的資料重複,請使用顯示連續匯出命令所傳回的 StartCursor,並只匯出資料指標值 where cursor_before_or_at 的記錄。 例如:

.show continuous-export MyExport | project StartCursor
StartCursor
636751928823156645

接著執行:

.export async to table ExternalBlob
<| T | where cursor_before_or_at("636751928823156645")

從具有數據列層級安全性的數據表連續匯出

若要使用參考具有數據 列層級安全策略之數據表的查詢來建立連續匯出作業,您必須:

連續匯出至差異數據表 - 預覽

持續匯出至差異數據表目前為預覽狀態。

重要

連續數據匯出不支援差異數據表數據分割。

如果 差異通訊協定寫入器版本 高於 1,Kusto 將不會寫入現有的差異數據表。

若要定義對差異數據表的連續匯出,請執行下列步驟:

  1. 建立外部差異數據表,如 在 Azure 記憶體上建立和改變差異外部數據表中所述。

    注意

    如果未提供架構,Kusto 會在目標記憶體容器中已定義差異數據表時,嘗試自動推斷它。
    不支援差異數據表數據分割。

  2. 使用 建立或改變連續匯出中所述的命令,定義此數據表的連續匯出。

    重要

    差異數據表的架構必須與連續匯出查詢同步。 如果基礎差異數據表變更,匯出可能會因為非預期的行為而開始失敗。

限制

一般

  • 目標資料表允許下列格式: CSVTSVJSON、 和 Parquet
  • 連續匯出並非設計用來處理 具體化檢視,因為具體化檢視可能會更新,而匯出至記憶體的數據一律只會附加,而且永遠不會更新。
  • 無法在從屬資料庫上建立連續匯出,因為從屬資料庫是唯讀的,且連續匯出需要進行寫入作業。
  • 源數據表中的記錄必須使用 更新原則直接內嵌至數據表,或 從查詢命令擷取。 如果使用 .move 範圍 或使用 .rename 數據表將記錄移到數據表中,則連續匯出可能不會處理這些記錄。 請參閱資料庫資料指標頁面中所述的限制。
  • 如果連續匯出使用的成品是為了觸發事件方格通知,請參閱事件方格文件中的已知問題一節

跨資料庫和跨叢集

  • 連續導出不支援跨叢集呼叫。
  • 連續導出僅支持維度數據表的跨資料庫呼叫。 所有事實數據表都必須位於本機資料庫中。 如需詳細資訊,請參閱 從事實和維度數據表匯出
  • 如果連續匯出包含跨資料庫呼叫,則必須使用 受控識別進行設定。

原則