將來自 SQL Database 的參考資料用於 Azure 串流分析作業

參考資料是一個靜態或緩慢變化的資料集,你會用來與串流資料結合以豐富資料,例如將產品細節加入銷售事件的串流中。 Azure 串流分析 支援 Azure SQL Database 作為參考資料來源,因此你可以查詢並將這些資料與即時輸入結合。

本文將示範如何透過 Azure 入口網站與 Visual Studio 搭配串流分析工具,將 Azure SQL Database 設定為 Stream Analytics 工作中的參考資料輸入。

透過使用 Azure 入口網站新增 SQL 資料庫參考資料

請依照以下步驟,透過使用 Azure 入口網站,將 Azure SQL Database 加入參考輸入來源:

入口網站必要條件

  1. 建立串流分析作業。

  2. 為 Stream Analytics 工作建立一個儲存帳號。

    重要

    Azure 串流分析 會在這個儲存帳號中保留快照。 在設定保留政策時,請確保所選時間範圍包含你希望的 Stream Analytics 工作所需的復原時間。

  3. 建立你的 Azure SQL Database,並用 Stream Analytics 工作所用的資料集作為參考資料。

定義 SQL Database 參考資料輸入

  1. 在您的串流分析作業中,選取 作業拓撲 下方的 輸入。 選擇 新增參考輸入,然後選擇 SQL 資料庫

    串流分析輸入面板的螢幕擷取畫面,選取了 [新增參考輸入],顯示一個下拉式清單,其中有 Blob 儲存體和 SQL Database 的值。

  2. 填寫 Stream Analytics 的輸入設定。 選擇資料庫名稱、伺服器名稱及登入憑證。 要定期刷新參考資料輸入,請選擇 「開啟 」並在 DD:HH:MM 中指定刷新率。 對於刷新率較短的大型資料集,delta query 會透過擷取 SQL 資料庫中在開始時間 @deltaStartTime與結束時間之間插入或刪除的所有資料列來追蹤參考資料中的變更。 @deltaEndTime

    欲了解更多資訊,請參閱 delta 查詢

    SQL 資料庫新輸入頁面的截圖,左側是設定表單,右側是快照查詢。

  3. 在 SQL 查詢編輯器中測試快照集查詢。 欲了解更多資訊,請參閱使用 Azure 入口網站的 SQL 查詢編輯器連接及查詢資料

在工作設定中指定儲存帳號

儲存帳號設定設定,選 「新增儲存帳號」。

這是儲存帳號設定窗格的截圖,右側窗格有新增儲存帳號按鈕。

啟動作業

  1. 在你設定好其他輸入、輸出和查詢後,開始 Stream Analytics 工作。

使用 Visual Studio 新增 SQL 資料庫參考資料

請使用以下步驟使用 Visual Studio 將 Azure SQL Database 加入參考輸入來源:

Visual Studio 必要條件

  1. 安裝適用於 Visual Studio 的串流分析工具。 串流分析工具支援以下版本的 Visual Studio:

    • Visual Studio 2015
    • Visual Studio 2019
  2. 了解適用於 Visual Studio 的 Stream Analytics 工具快速入門。

  3. 建立儲存體帳戶。

    重要

    Azure 串流分析 會在這個儲存帳號中保留快照。 在設定保留政策時,請確保所選時間範圍包含你希望的 Stream Analytics 工作所需的復原時間。

建立 SQL Database 資料表

使用 SQL Server Management Studio 來建立資料表以儲存您的參考資料。 請參閱使用 SSMS 設計您的第一個 Azure SQL 資料庫以取得詳細資料。

以下陳述建立範例表:

create table chemicals(Id Bigint,Name Nvarchar(max),FullName Nvarchar(max));

選擇您的訂用帳戶

  1. 在 Visual Studio 的 [檢視] 功能表上,選取 [伺服器總管]

  2. 選擇並長按(或右鍵點擊)Azure,選擇連接至 Microsoft Azure 訂閱,然後用你的 Azure 帳號登入。

建立串流分析專案

  1. 選擇 檔案>新增專案

  2. 在範本清單中,選擇 Stream Analytics,然後選擇 Azure 串流分析 Application

  3. 輸入專案 名稱地點解決方案名稱,然後選擇 確定

    新 Project 對話框的截圖,選取 Stream Analytics 範本與 Azure 串流分析 應用程式,並標示名稱、地點及解決方案名稱框。

定義 SQL Database 參考資料輸入

  1. 建立新輸入。

    選取輸入後新增項目對話框的截圖。

  2. 方案總管 中開啟 Input.json

  3. 填寫 [串流分析輸入設定]。 輸入資料庫名稱、伺服器名稱、刷新類型和刷新率。 以 DD:HH:MM 的格式指定重新整理頻率。

    Stream Analytics 輸入設定的截圖,包含輸入或從下拉選單選取的數值。

    如果你選擇只執行一次或定期執行,Visual Studio 會在專案的 Input.json 檔案節點下方產生一個名為 [Input Alias].snapshot.sql 的 SQL CodeBehind 檔案。

    方案總管的螢幕擷取畫面,其中已醒目提示 SQL CodeBehind 檔案 Chemicals.snapshot.sql。

    如果你選擇使用 Delta 定期刷新,Visual Studio會產生兩個 SQL CodeBehind 檔案:[Input Alias].snapshot.sql[Input Alias].delta.sql

    方案總管的螢幕擷取畫面,其中已醒目提示標示 SQL CodeBehind 檔案 Chemicals.delta.sql 和 Chemicals.snapshot.sql。

  4. 在編輯器中開啟該 SQL 檔案,並寫入 SQL 查詢。

  5. 如果你使用 Visual Studio 2019 並安裝了 SQL Server Data Tools,可以選擇執行來測試查詢。 會開啟一個精靈協助你連接 SQL 資料庫,查詢結果會出現在底部的視窗中。

指定儲存體帳戶

打開 JobConfig.json 指定儲存帳號來儲存 SQL 參考快照。

顯示 Stream Analytics 工作設定的截圖,預設值並標示全域儲存設定。

於本機測試並部署到 Azure

在你將工作部署到 Azure 之前,可以在本地測試查詢邏輯與即時輸入資料。 欲了解更多此功能資訊,請參閱 Visual Studio 的 Azure 串流分析 工具在本地測試即時資料(預覽版)。 測試結束後,選擇提交到 Azure。 若要了解如何啟動此作業,請參閱 使用 Azure 串流分析 Tools for Visual Studio 建立 Stream Analytics 作業快速入門。

增量查詢

使用delta查詢時,請使用Azure SQL Database中的時序表

  1. 在 Azure SQL Database 中建立時態表。

       CREATE TABLE DeviceTemporal
       (
          [DeviceId] int NOT NULL PRIMARY KEY CLUSTERED
          , [GroupDeviceId] nvarchar(100) NOT NULL
          , [Description] nvarchar(100) NOT NULL
          , [ValidFrom] datetime2 (0) GENERATED ALWAYS AS ROW START
          , [ValidTo] datetime2 (0) GENERATED ALWAYS AS ROW END
          , PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
       )
       WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.DeviceHistory));  -- DeviceHistory table will be used in Delta query
    
  2. 編寫快照查詢。

    使用 @snapshotTime 參數指示串流分析執行時從系統時間點有效的 SQL 資料庫時序表取得參考資料集。 如果你不提供這個參數,可能會因為時脈偏斜而取得不準確的基準參考資料集。 以下範例展示了完整的快照查詢:

       SELECT DeviceId, GroupDeviceId, [Description]
       FROM dbo.DeviceTemporal
       FOR SYSTEM_TIME AS OF @snapshotTime
    
  3. 編寫差異查詢。

    此查詢會取得在開始時間、 @deltaStartTime 及結束時間 @deltaEndTime 內插入或刪除的所有 SQL 資料庫資料列。 差異查詢必須傳回與快照查詢相同的資料行,以及作業資料行。 此欄位定義該列在 @deltaStartTime@deltaEndTime 之間是否入或刪除。 如果記錄已插入,結果的資料列會被標示為 1;如果已刪除,則會被標示為 2。 查詢也必須新增來自 SQL Server 端的浮水印,以確保能適當擷取差異期間內的所有更新。 使用不含 浮水印 的 delta 查詢可能會導致錯誤的參考資料集。

    針對已更新的記錄,時態表會透過擷取插入和刪除作業來進行記錄。 串流分析執行時會將 delta 查詢的結果套用到前一個快照,以保持參考資料的更新。 下列範例示範了差異查詢:

       SELECT DeviceId, GroupDeviceId, Description, ValidFrom as _watermark_, 1 as _operation_
       FROM dbo.DeviceTemporal
       WHERE ValidFrom BETWEEN @deltaStartTime AND @deltaEndTime   -- records inserted
       UNION
       SELECT DeviceId, GroupDeviceId, Description, ValidTo as _watermark_, 2 as _operation_
       FROM dbo.DeviceHistory   -- table we created in step 1
       WHERE ValidTo BETWEEN @deltaStartTime AND @deltaEndTime     -- record deleted
    

    Stream Analytics 執行時可能會定期執行快照查詢,並執行 delta 查詢以儲存檢查點。

    重要

    使用參考資料增量查詢時,不要多次對時序參考資料表做相同的更新。 這可能會導致錯誤的結果。 以下是一個可能導致參考資料產生錯誤結果的例子:

     UPDATE myTable SET VALUE=2 WHERE ID = 1;
     UPDATE myTable SET VALUE=2 WHERE ID = 1;
    

    正確的範例:

     UPDATE myTable SET VALUE = 2 WHERE ID = 1 and not exists (select * from myTable where ID = 1 and value = 2);
    

    此條件確保不會發生重複更新。

測試查詢

確認你的查詢回傳的資料集是否符合串流分析工作用作參考資料的預期資料。 要測試你的查詢,請前往入口網站中「工作拓撲」區塊的輸入。 接著在你的 SQL 資料庫參考輸入中選擇 「範例資料 」。 樣本開放後,您可以下載檔案並檢查回傳的資料是否符合預期。 為了優化你的開發與測試迭代,可以使用 Visual Studio 的 Stream Analytics 工具。 你也可以使用其他你偏好的工具,先確保查詢從 Azure SQL Database 回傳正確的結果,然後在你的 Stream Analytics 工作中使用該查詢。

使用 Visual Studio Code 測試查詢

在 Visual Studio Code 上安裝 Azure 串流分析工具SQL Server (mssql),並設定 ASA 專案。 如需詳細資訊,請參閱快速入門:在 Visual Studio Code 中建立 Azure 串流分析工作SQL Server (mssql) 延伸模組教學課程

  1. 設定 SQL 參考資料輸入。

    Visual Studio Code編輯器分頁的截圖,顯示 ReferenceSQLDatabase.json 檔案。

  2. 選擇 SQL Server 圖示並選擇新增連線

    左側窗格的螢幕擷取畫面,其中醒目提示了「新增連線」選項。

  3. 填寫連線資訊。

    連線表單的截圖,資料庫和伺服器資訊框被標示出來。

  4. 選擇並長按(或右鍵點擊)參考 SQL 並選擇 執行查詢

    已醒目提示 [執行查詢] 選項的操作功能表螢幕擷取畫面。

  5. 選擇您的連線。

    一個對話框的截圖,上面寫著從下方清單建立連線設定檔,並且標示出唯一的清單條目。

  6. 檢閱並驗證您的查詢結果。

    查詢搜尋結果的截圖會在 Visual Studio Code 編輯器的分頁中顯示。

常見問題集

使用 Azure 串流分析 的 SQL 參考資料輸入會產生額外費用嗎?

在 Stream Analytics 作業中,不會有額外的每個串流單位費用。 不過,Stream Analytics 作業必須與 Azure 儲存體帳戶建立關聯。 Stream Analytics 工作會查詢 SQL 資料庫(在工作啟動與刷新期間)以取得參考資料集,並將該快照儲存在儲存帳號中。 儲存這些快照會產生額外費用,詳見 Azure 儲存帳號的價格頁面

我怎麼知道參考資料快照是否被從 SQL 資料庫查詢,並用於 Azure 串流分析 工作?

有兩個指標依邏輯名稱(在 Azure 入口網站的指標)篩選,讓你能監控 SQL 資料庫參考資料輸入的健康狀況。

  • InputEvents:此指標衡量從 SQL 資料庫參考資料集載入的紀錄數量。
  • InputEventBytes:此計量用來衡量載入至 Stream Analytics 作業記憶體中的參考資料快照大小。

這兩個指標共同表示工作是否查詢 SQL 資料庫以取得參考資料集,然後將其載入記憶體。

我需要特殊類型的 Azure SQL Database 嗎?

Azure 串流分析 可支援任何類型的 Azure SQL Database。 不過,你為參考資料輸入設定的刷新率可能會影響你的查詢負載。 要使用 delta query 選項,請使用 Azure SQL Database 中的時序表。

為什麼 Azure 串流分析 會把快照儲存在 Azure 儲存體 帳號中?

串流分析保證每個事件僅處理一次,且事件至少傳遞一次。 如果暫時性問題影響你的工作,需要少量重播來恢復狀態。 要啟用重播,這些快照必須儲存在 Azure 儲存體 帳號中。 欲了解更多關於檢查點重播的資訊,請參閱 Azure 串流分析 工作中的檢查點與重播概念