教學課程:使用 Azure 事件方格 和 Azure Functions 將事件中樞擷取的數據從 Azure 儲存體 遷移至 Azure Synapse Analytics
在本教學課程中,您將使用 Azure 事件方格 和 Azure Functions,將事件中樞擷取的數據從 Azure Blob 儲存體 遷移至 Azure Synapse Analytics,特別是專用 SQL 集區。
此圖表描述您在本教學課程中建置之解決方案的工作流程:
- 傳送至 Azure 事件中樞的數據會在 Azure Blob 記憶體中擷取。
- 當數據擷取完成時,就會產生事件並傳送至 Azure 事件方格。
- Azure 事件方格 將此事件數據轉送至 Azure 函式應用程式。
- 函式應用程式會使用事件數據中的 Blob URL,從記憶體擷取 Blob。
- 函式應用程式會將 Blob 資料遷移至 Azure Synapse Analytics。
在本文中,您會採取下列步驟:
- 部署教學課程所需的基礎結構
- 將程式代碼發佈至 Functions 應用程式
- 建立事件方格訂閱
- 將範例數據串流至事件中樞
- 確認 Azure Synapse Analytics 中擷取的數據
必要條件
若要完成本教學課程,您必須具備:
- 本文假設您已熟悉事件方格和事件中樞(特別是擷取功能)。 如果您不熟悉 Azure 事件方格,請參閱 Azure 事件方格 簡介。 若要瞭解 Azure 事件中樞 的擷取功能,請參閱在 Azure Blob 儲存體 或 Azure Data Lake 儲存體 中透過 Azure 事件中樞 擷取事件。
- Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
- 具有工作負載的Visual Studio :.NET桌面開發、Azure 開發、ASP.NET 和Web開發、Node.js開發,以及 Python 開發。
- 將 EventHubsCaptureEventGridDemo 範例項目 下載到您的電腦。
- WindTurbineDataGenerator – 簡單的發行者,可將範例風力渦輪機數據傳送至已啟用擷取功能的事件中樞。
- FunctionDWDumper – 當 Avro 檔案擷取至 Azure 儲存體 Blob 時,接收來自 Azure 事件方格 通知的 Azure 函式。 它會接收 Blob 的 URI 路徑、讀取其內容,並將此數據推送至 Azure Synapse Analytics(專用 SQL 集區)。
部署基礎結構
在此步驟中,您會使用 Resource Manager 範本部署必要的基礎結構。 當您部署範本時,會建立下列資源:
- 已啟用擷取功能的事件中樞。
- 儲存體 擷取檔案的帳戶。
- 裝載函式應用程式的App Service 方案
- 用於處理事件的函式應用程式
- 裝載數據倉儲的 SQL Server
- 用來儲存已遷移數據的 Azure Synapse Analytics (專用 SQL 集區)
使用 Azure CLI 部署基礎結構
登入 Azure 入口網站。
選取 頂端的 [Cloud Shell ] 按鈕。
您會看到 Cloud Shell 在瀏覽器底部開啟。
在 Cloud Shell 中,如果尚未選取 Bash,請選取 [Bash ],如上圖所示。
執行下列 CLI 命令來建立 Azure 資源群組:
將下列命令複製並貼到 Cloud Shell 視窗中。 如有需要,請變更資源組名和位置。
az group create -l eastus -n rgDataMigration
按 ENTER 鍵 。
以下是範例:
user@Azure:~$ az group create -l eastus -n rgDataMigration { "id": "/subscriptions/00000000-0000-0000-0000-0000000000000/resourceGroups/rgDataMigration", "location": "eastus", "managedBy": null, "name": "rgDataMigration", "properties": { "provisioningState": "Succeeded" }, "tags": null }
執行下列 CLI 命令,以部署上一節中提及的所有資源(事件中樞、記憶體帳戶、函式應用程式、Azure Synapse Analytics):
將命令複製並貼到 Cloud Shell 視窗中。 或者,您可以複製/貼到您選擇的編輯器、設定值,然後將命令複製到 Cloud Shell。 如果您看到因 Azure 資源名稱而發生錯誤,請刪除資源群組、修正名稱,然後再次重試命令。
重要
在執行 命令之前,請先指定下列實體的值:
- 您稍早建立的資源群組名稱。
- 事件中樞命名空間的名稱。
- 事件中樞的名稱。 您可以將值保留為 (hubdatamigration)。
- SQL Server 的名稱。
- SQL 用戶和密碼的名稱。
- 資料庫的名稱。
- 儲存體帳戶的名稱。
- 函式應用程式的名稱。
az deployment group create \ --resource-group rgDataMigration \ --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/event-grid/EventHubsDataMigration.json \ --parameters eventHubNamespaceName=<event-hub-namespace> eventHubName=hubdatamigration sqlServerName=<sql-server-name> sqlServerUserName=<user-name> sqlServerPassword=<password> sqlServerDatabaseName=<database-name> storageName=<unique-storage-name> functionAppName=<app-name>
在 Cloud Shell 視窗中按 ENTER 鍵以執行命令。 此程式可能需要一些時間,因為您正在建立一堆資源。 在命令的結果中,請確定沒有任何失敗。
選取 Cloud Shell 視窗右上角的 [Cloud Shell] 按鈕,以關閉 Cloud Shell。
確認資源已建立
在 Azure Synapse Analytics 中建立數據表
在本節中,您會在稍早建立的專用 SQL 集區中建立數據表。
在資源群組中的資源清單中,選取您的 專用 SQL 集區。
在 [專用 SQL 集區] 頁面上,於左側功能表中的 [一般工作] 區段中,選取 [查詢編輯器][預覽]。
輸入 SQL Server 的使用者和密碼名稱,然後選取 [確定]。 如果您看到允許用戶端存取 SQL Server 的訊息,請選取 [允許列出 SQL Server> 上的 <IP <位址>] ,然後選取 [確定]。
在查詢視窗中,複製並執行下列 SQL 文稿:
CREATE TABLE [dbo].[Fact_WindTurbineMetrics] ( [DeviceId] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [MeasureTime] datetime NULL, [GeneratedPower] float NULL, [WindSpeed] float NULL, [TurbineSpeed] float NULL ) WITH (CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = ROUND_ROBIN);
將此索引標籤或視窗保持開啟,以便確認數據已在教學課程結尾建立。
發佈 Azure Functions 應用程式
首先,從 Azure 入口網站 取得 Functions 應用程式的發行配置檔。 然後,使用發佈配置檔從 Visual Studio 發佈 Azure Functions 專案或應用程式。
取得發行設定檔
在 [ 資源群組 ] 頁面上,選取 資源清單中的 Azure Functions 應用程式 。
在應用程式的 [ 函式應用程式] 頁面上,選取 命令行上的 [取得發佈配置檔 ]。
下載檔案並將其儲存到 EventHubsCaptureEventGridDemo 資料夾的 FunctionEGDDumper 子資料夾中。
使用發佈配置檔發佈 Functions 應用程式
啟動 Visual Studio。
開啟您從 GitHub 下載的EventHubsCaptureEventGridDemo.sln解決方案,作為必要條件的一部分。 您可以在資料夾中找到它
/samples/e2e/EventHubsCaptureEventGridDemo
。在 [方案總管] 中,以滑鼠右鍵按兩下 [FunctionEGDWDumper] 項目,然後選取 [發佈]。
在下列畫面中,選取 [開始] 或 [新增發行配置檔]。
在 [發佈] 對話框中,選取 [目標匯入配置檔],然後選取 [下一步]。
在 [匯入配置檔] 索引標籤上,選取您稍早在 FunctionEGDWDumper 資料夾中儲存的發佈配置檔,然後選取 [完成]。
當 Visual Studio 設定設定檔時,請選取 [ 發佈]。 確認發行成功。
在開啟 Azure 函式頁面的網頁瀏覽器中,選取中間窗格中的 [函式]。 確認 EventGridTriggerMigrateData 函式會顯示在清單中。 如果您沒有看到,請再次嘗試從 Visual Studio 發佈,然後在入口網站中重新整理頁面。
發佈函式之後,您就可以訂閱事件。
訂閱事件
在網頁瀏覽器的新索引標籤或新視窗中,登入 Azure 入口網站。
在 Azure 入口網站中,選取左側功能表中的 [資源群組]。
在搜尋方塊中輸入資源群組的名稱,以篩選資源群組清單。
在清單中選取您的資源群組。
從資源清單中選取事件中樞命名空間。
在 [事件中 樞命名空間] 頁面上,選取 左側功能表上的 [事件 ],然後在工具欄上選取 [+ 事件訂閱 ]。
在 [ 建立事件訂閱 ] 頁面上,遵循下列步驟:
輸入事件訂用帳戶的名稱。
輸入系統主題的名稱。 系統主題提供傳送事件的傳送者端點。 如需詳細資訊,請參閱 系統主題
針對 [ 端點類型],選取 [Azure 函式]。
針對 [端點],選取連結。
在 [ 選取 Azure 函式 ] 頁面上,如果未自動填入這些步驟,請遵循這些步驟。
- 選取具有 Azure 函式的 Azure 訂用帳戶。
- 選取函式的資源群組。
- 選取函式應用程式。
- 選取部署位置。
- 選取 EventGridTriggerMigrateData 函式。
在 [ 選取 Azure 函式 ] 頁面上,選取 [ 確認選取專案]。
然後,回到 [ 建立事件訂閱 ] 頁面上,選取 [ 建立]。
確認已建立事件訂用帳戶。 切換至事件中樞命名空間之 [事件] 頁面上的 [事件訂閱] 索引標籤。
執行應用程式以產生數據
您已完成設定事件中樞、奉獻 SQL 集區(先前稱為 SQL 數據倉儲)、Azure 函式應用程式和事件訂用帳戶。 在執行產生事件中樞資料的應用程式之前,您需要設定一些值。
在 Azure 入口網站 中,流覽至您的資源群組,就像您稍早所做的一樣。
選取事件中樞命名空間。
在 [事件中 樞命名空間] 頁面中,選取 左側功能表上的 [共用存取原則 ]。
在原則清單中選取 [RootManageSharedAccessKey ]。
選取 [連線 ion string-primary key] 文本框旁的 [複製] 按鈕。
返回您的 Visual Studio 解決方案。
以滑鼠右鍵按兩下 WindTurbineDataGenerator 專案,然後選取 [ 設定為啟始專案]。
在WindTurbineDataGenerator專案中,開啟 [program.cs]。
將取代
<EVENT HUBS NAMESPACE CONNECTION STRING>
為您從入口網站複製的 連接字串。如果您已針對 以外的
hubdatamigration
事件中樞使用不同的名稱,請將 取代<EVENT HUB NAME>
為事件中樞的名稱。private const string EventHubConnectionString = "Endpoint=sb://demomigrationnamespace.servicebus.windows.net/..."; private const string EventHubName = "hubdatamigration";
建置方案。 執行WindTurbineGenerator.exe應用程式。
幾分鐘后,在您開啟查詢視窗的其他瀏覽器索引標籤中,查詢數據倉儲中的數據表以取得已移轉的數據。
select * from [dbo].[Fact_WindTurbineMetrics]
監視解決方案
本節可協助您監視或疑難解答解決方案。
檢視記憶體帳戶中擷取的數據
流覽至資源群組,然後選取用來擷取事件數據的記憶體帳戶。
在 [儲存體 帳戶] 頁面上,選取左側功能表上的 儲存體 瀏覽器。
展開 [BLOB 容器],然後選取 [windturbinecapture]。
在右窗格中開啟與事件中樞命名空間相同的資料夾。
開啟與事件中樞相同的資料夾(hubdatamigration)。
鑽研資料夾,您會看到AVRO檔案。 以下是範例:
確認事件方格觸發程式叫用函式
瀏覽至資源群組,然後選取函式應用程式。
選取 中間窗格中的 [函式 ] 索引標籤。
從清單中選取 EventGridTriggerMigrateData 函式。
在 [ 函式 ] 頁面上,選取 左側功能表上的 [監視 ]。
選取 [ 設定 ] 以設定 Application Insights 以擷取叫用記錄。
建立新的 Application Insights 資源或使用現有的資源。
流覽回 函式的 [監視] 頁面。
確認正在傳送事件的用戶端應用程式 (WindTurbineDataGenerator) 仍在執行中。 如果沒有,請執行應用程式。
等候幾分鐘(5 分鐘以上),然後選取 [ 重新 整理] 按鈕以查看函式調用。
選取調用以查看詳細數據。
事件方格會將事件數據散發給訂閱者。 下列範例示範在 Blob 中擷取透過事件中樞串流數據時所產生的事件數據。 特別請注意
fileUrl
,物件中的data
屬性會指向記憶體中的 Blob。 函式應用程式會使用此 URL 來擷取具有所擷取數據的 Blob 檔案。{ "topic": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourcegroups/rgDataMigration/providers/Microsoft.EventHub/namespaces/spehubns1207", "subject": "hubdatamigration", "eventType": "Microsoft.EventHub.CaptureFileCreated", "id": "4538f1a5-02d8-4b40-9f20-36301ac976ba", "data": { "fileUrl": "https://spehubstorage1207.blob.core.windows.net/windturbinecapture/spehubns1207/hubdatamigration/0/2020/12/07/21/49/12.avro", "fileType": "AzureBlockBlob", "partitionId": "0", "sizeInBytes": 473444, "eventCount": 2800, "firstSequenceNumber": 55500, "lastSequenceNumber": 58299, "firstEnqueueTime": "2020-12-07T21:49:12.556Z", "lastEnqueueTime": "2020-12-07T21:50:11.534Z" }, "dataVersion": "1", "metadataVersion": "1", "eventTime": "2020-12-07T21:50:12.7065524Z" }
確認數據儲存在專用 SQL 集區中
在開啟查詢視窗的瀏覽器索引標籤中,查詢專用SQL集區中的數據表以取得已移轉的數據。
下一步
- 如需設定和執行範例的詳細資訊,請參閱 事件中樞擷取和事件方格範例。
- 在本教學課程中,您已建立事件的事件訂用
CaptureFileCreated
帳戶。 如需此事件和 Azure Blob 儲存體 所支援之所有事件的詳細資訊,請參閱 Azure 事件中樞 為事件方格來源。 - 若要深入瞭解事件中樞擷取功能,請參閱在 Azure Blob 儲存體 或 Azure Data Lake 儲存體 中透過 Azure 事件中樞 擷取事件。