共用方式為


快速入門:使用 Visual Studio Code 建立串流分析作業

此快速入門說明如何在您的本機電腦中使用適用於 Visual Studio Code 的 ASA 工具延伸模組,來建立、執行及提交 Azure 串流分析 (ASA) 作業。 您將了解如何建置 ASA 作業,以讀取來自 IoT 中樞的即時串流資料,並篩選溫度大於 27°的事件。 輸出結果會傳送至 Blob 儲存體中的檔案。 本快速入門中使用的輸入資料是由 Raspberry Pi 線上模擬器產生。

注意

Visual Studio Code 工具不支援中國東部、中國北部、德國中部和德國東北部區域中的作業。

必要條件

安裝 Azure 串流分析工具擴充功能

  1. 開啟 Visual Studio Code (VS Code)。

  2. 從左窗格上的 [延伸模組],搜尋串流分析,然後選取 Azure 串流分析工具延伸模組上的 [安裝]

    Screenshot showing the Extensions page of Visual Studio Code with an option to install Stream Analytics extension.

  3. 安裝之後,選取活動列上的 Azure 圖示,然後登入 Azure。

    Screenshot showing how to sign in to Azure.

  4. 登入之後,您就可以在 Azure 帳戶底下看到訂用帳戶。

注意

當您每次開啟 VS Code 時,ASA 工具延伸模組都會自動將您登入。 如果您的帳戶使用雙因素驗證,建議您使用電話驗證而非使用 PIN 碼。 若要登出您的 Azure 帳戶,按 Ctrl + Shift + P 並輸入 Azure: Sign Out

準備輸入資料

定義串流分析作業前,您應先準備輸入資料。 即時感應器資料會內嵌至 IoT 中樞,然後設定為作業輸入。 若要準備作業所需的輸入資料,請遵循下列步驟:

  1. 登入 Azure 入口網站

  2. 選取 [建立資源]> [物聯網] > [IoT 中樞]

    Screenshot showing the Create Resource page for Iot Hub.

  3. 在 [IoT 中樞] 頁面上,輸入下列資訊:

    • 訂用帳戶,選取您的 Azure 訂用帳戶。
    • 資源群組,選取現有的資源群組,或建立新的資源群組。
    • IoT 中樞名稱,輸入您 IoT 中樞的名稱。
    • 區域,選取與您最接近的區域。

    Screenshot showing the IoT Hub page for creation.

  4. 移至 [管理] 頁面,針對 [定價與級別層],選取 [F1: 免費層] (如果您仍然可在訂用帳戶上取得此選項)。 如需詳細資訊,請參閱 Azure IoT 中樞價格

    Screenshot showing the IoT Hub management page.

  5. 選取 [檢閱 + 建立]。 檢閱您的 IoT 中樞資訊,然後選取 [建立]。 此流程可能需要幾分鐘才能部署您的 IoT 中樞。

  6. 建立 IoT 中樞之後,選取 [前往資源] 以瀏覽至 [IoT 中樞] 頁面。 '

  7. 在 [IoT 中樞] 頁面上,選取左側功能表上的 [裝置],然後選取 [+ 新增裝置]

    Screenshot showing the Add Device button on the Devices page.

  8. 提供裝置識別碼,然後選取 [儲存]

    Screenshot showing the Add Device page.

  9. 建立裝置之後,您應該會從 [IoT 裝置] 清單中看到裝置。 如果您沒有看到 [重新整理] 按鈕,請選取頁面上的 [重新整理] 按鈕。

    Screenshot showing the selection of the device on the Devices page.

  10. 從清單中選取您的裝置。 複製主要連接字串,然後將它儲存到記事本以供日後使用。

    Screenshot showing the primary connection string of the device you created.

執行 IoT 模擬器

  1. 在新的瀏覽器索引標籤中,開啟 Raspberry Pi Azure IoT 線上模擬器 \(英文\)。

  2. 將行 15 中的預留位置取代為您先前儲存的 Azure IoT 中樞裝置連接字串。

  3. 選取執行。 下列輸出會顯示傳送至 IoT 中樞的感應器資料和訊息。

    Screenshot showing the Raspberry Pi Azure IoT Online Simulator with output.

建立 Blob 儲存體

  1. 從 Azure 入口網站的左上角,選取 [建立資源]>[儲存體]>[儲存體帳戶]

    Screenshot showing the Create storage account menu.

  2. 在 [建立儲存體帳戶] 窗格中,輸入儲存體帳戶名稱、位置和資源。 選擇與您建立的 IoT 中樞相同的位置和資源群組。 然後,選取 [檢閱] 和 [建立] 以建立儲存體帳戶。

    Screenshot showing the Create storage account page.

  3. 在 [儲存體帳戶] 頁面上,選取左側功能表中的 [容器],然後選取命令列上的 [+ 容器]

    Screenshot showing the Containers page.

  4. 從 [新增容器] 頁面中,提供容器的名稱、將 [公用存取層級] 保留為 [私人 (沒有匿名存取)],然後選取 [確定]

    Screenshot showing the creation of a blob container page.

建立串流分析專案

  1. 在 Visual Studio Code 中,按 Ctrl+Shift+P,並輸入 ASA:建立新專案

    Screenshot showing the selection of ASA: Create New Project in the command palette.

  2. 輸入您的專案名稱 (例如 myASAproj),然後選取專案的資料夾。

    Screenshot showing entering an ASA project name.

  3. ASA 專案即會新增至您的工作區。 其包含三個資料夾:輸入輸出功能。 此外也包含查詢指令碼 (*.asaql)JobConfig.json 檔案和 asaproj.json 組態檔。

    Screenshot showing Stream Analytics project files in Visual Studio Code.

    Asaproj.json 檔案包含將串流分析作業提交至 Azure 所需的輸入、輸出和作業組態設定。

    注意

    當您從命令選擇區新增輸入和輸出時,對應的路徑會自動新增至 asaproj.json。 如果您直接在磁碟上新增或移除輸入或輸出,您必須手動從 asaproj.json 加以新增或移除。 您可以選擇將輸入和輸出放在某個位置,然後在每個 asaproj.json 檔案中指定路徑,以在不同的作業中參考這些輸入和輸出。

定義轉換查詢

  1. 開啟 myASAproj.asaql 檔案並新增下列查詢:

    SELECT *
    INTO Output
    FROM Input
    WHERE Temperature > 27
    

    Screenshot showing the transformation query.

設定作業輸入

  1. 以滑鼠右鍵按一下您串流分析專案中的輸入資料夾。 然後,從捷徑功能表中選取 [ASA:新增輸入]

    Screenshot showing the ASA: Add input menu in Visual Studio Code.

    或者,按 Ctrl+Shift+P 以開啟命令選擇區,並輸入 ASA:新增輸入

  2. 選擇 [IoT 中樞] 作為輸入類型。

    Screenshot showing the selection of your IoT hub in VS Code command palette.

  3. 從下拉式功能表中,選取 ASA 指令碼 *.asaql 和 [Azure 訂用帳戶],然後按 ENTER

  4. 在 [輸入] 資料夾底下,您會看到已建立 IoTHub1.json 檔案。 將設定取代為下列建議值,並保留此處未提及之欄位的預設值。

    設定 建議的值 名描述
    Name 輸入 此輸入名稱會用於查詢中的 FROM 陳述式。
    IotHubNamespace spiothub 您 IoT 中樞的名稱。 如果從您的訂用帳戶選取,就會自動偵測到 IoT 中樞名稱。
    SharedAccessPolicyName iothubowner

    Screenshot showing the IoT Hub configuration in VS Code.

  5. 選取 [預覽資料],以查看是否已為您的作業成功設定輸入資料。 它將擷取 IoT 中樞範例,並在預覽視窗中顯示。

    Screenshot showing the preview of input data in your IoT hub.

設定作業輸出

  1. Ctrl+Shift+P 以開啟命令選擇區,並輸入 ASA:新增輸出

  2. 針對接收類型選擇 [Data Lake Storage Gen2/Blob 儲存體]

  3. 使用此輸出來選取查詢指令碼。

  4. 輸入 BlobStorage1 作為輸出檔案名稱。

  5. 使用下列值來編輯設定。 請將此處未提及的欄位保留為預設值。

    設定 建議的值 名描述
    Name 輸出 此輸出名稱會用於查詢中的 INTO 陳述式。
    儲存體帳戶 spstorageaccount0901 選擇或輸入儲存體帳戶的名稱。 系統會自動偵測建立在相同訂用帳戶中的儲存體帳戶名稱。
    容器 spcontainer 選取您在儲存體帳戶中建立的現有容器。

Screenshot showing the configuration of output for the Stream Analytics job.

編譯指令碼並提交至 Azure

指令碼編譯會檢查語法和產生選自動部署的 Azure Resource Manager 範本。

  1. 以滑鼠右鍵按一下指令碼,然後選取 [ASA:編譯指令碼]

    Screenshot showing the compilation of script option from the Stream Analytics explorer in VS Code.

  2. 編譯之後,您會在專案底下看到 [部署] 資料夾,其中包含兩個 Azure Resource Manager 範本。 這兩個檔案會用於自動部署。

    Screenshot showing the generated deployment templates in the project folder.

  3. 在查詢編輯器中,選取 [提交至 Azure]

    Screenshot showing the submit job button to submit the Stream Analytics job to Azure.

    然後遵循指示來完成流程:選取訂用帳戶 > 選取作業 > 建立新作業 > 輸入作業名稱 > 選擇資源群組和區域。

  4. 選取 [發行至 Azure],然後完成。 等候它開啟新的索引標籤 [雲端作業檢視],其中顯示您的作業狀態。

    Screenshot showing the publish to Azure button in VS Code.

啟動串流分析工作並查看輸出

  1. 在 [雲端作業檢視] 索引標籤上,選取 [開始] 以在雲端中執行作業。 此程序可能需要幾分鐘才能完成。

    Screenshot showing the Start job button in the Cloud view page.

  2. 如果您的作業成功啟動,作業狀態就會變更為 [執行中]。 您可以看到一個邏輯圖表,其中顯示 ASA 作業的執行方式。

    Screenshot showing the job running status in VS Code.

  3. 若要檢視輸出結果,您可以在 Visual Studio Code 延伸模組中或 Azure 入口網站中開啟 Blob 儲存體。

    Screenshot showing the output file in the Blob container.

    下載並開啟檔案以查看輸出。

    {"messageId":11,"deviceId":"Raspberry Pi Web Client","temperature":28.165519323167562,"humidity":76.875393581654379,"EventProcessedUtcTime":"2022-09-01T22:53:58.1015921Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:52:57.6250000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:52:57.6290000Z"}}
    {"messageId":14,"deviceId":"Raspberry Pi Web Client","temperature":29.014941877871451,"humidity":64.93477299527828,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:03.6100000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:03.6140000Z"}}
    {"messageId":17,"deviceId":"Raspberry Pi Web Client","temperature":28.032846241745975,"humidity":66.146114343897338,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:19.5960000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:19.5830000Z"}}
    {"messageId":18,"deviceId":"Raspberry Pi Web Client","temperature":30.176185593576143,"humidity":72.697359909427419,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:21.6120000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:21.6140000Z"}}
    {"messageId":20,"deviceId":"Raspberry Pi Web Client","temperature":27.851894248213021,"humidity":71.610229530268214,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:25.6270000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:25.6140000Z"}}
    {"messageId":21,"deviceId":"Raspberry Pi Web Client","temperature":27.718624694772238,"humidity":66.540445035685153,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:48.0820000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:48.0830000Z"}}
    {"messageId":22,"deviceId":"Raspberry Pi Web Client","temperature":27.7849054424326,"humidity":74.300662748167085,"EventProcessedUtcTime":"2022-09-01T22:54:09.3393532Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:54:09.2390000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:54:09.2400000Z"}}
    {"messageId":28,"deviceId":"Raspberry Pi Web Client","temperature":30.839892925680324,"humidity":76.237611741451786,"EventProcessedUtcTime":"2022-09-01T22:54:47.8053253Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:54:47.6180000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:54:47.6150000Z"}}
    {"messageId":29,"deviceId":"Raspberry Pi Web Client","temperature":30.561040300759053,"humidity":78.3845172058103,"EventProcessedUtcTime":"2022-09-01T22:54:49.8070489Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:54:49.6030000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:54:49.5990000Z"}}
    {"messageId":31,"deviceId":"Raspberry Pi Web Client","temperature":28.163585438418679,"humidity":60.0511571297096,"EventProcessedUtcTime":"2022-09-01T22:55:25.1528729Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:55:24.9050000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:55:24.9120000Z"}}
    {"messageId":32,"deviceId":"Raspberry Pi Web Client","temperature":31.00503387156985,"humidity":78.68821066044552,"EventProcessedUtcTime":"2022-09-01T22:55:43.2652127Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:55:43.0480000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:55:43.0520000Z"}}
    

清除資源

若不再需要,請刪除資源群組、串流分析作業和所有相關資源。 刪除作業可避免因為作業使用串流單位而產生費用。 如果您計劃在未來使用該作業,您可以將其停止並在之後需要時重新啟動。 如果您將不繼續使用此作業,請使用下列步驟,刪除本快速入門所建立的所有資源:

  1. 從 Azure 入口網站的左側功能表中,選取 [資源群組],然後選取您所建立資源的名稱。

  2. 在資源群組頁面上,選取 [刪除]。 在下一個視窗中輸入要刪除的資源名稱,然後選取 [刪除]

下一步

若要深入了解適用於 Visual Studio Code 的 ASA 工具延伸模組,請繼續下列文章: