快速入門 - 使用 Azure CLI 建立串流分析作業

在本快速入門中,您將使用 Azure CLI 來定義串流分析作業,以篩選出溫度讀數大於 27 的即時感應器訊息。 串流分析作業會從 IoT 中樞讀取資料、轉換資料,以及將輸出資料寫入 Blob 儲存體中的容器。 本快速入門中使用的輸入資料是由 Raspberry Pi 線上模擬器產生。

開始之前

如果您沒有 Azure 訂閱,請在開始之前,先建立 Azure 免費帳戶

必要條件

  • 建立資源群組。 所有 Azure 資源都必須部署至資源群組。 資源群組可讓您組織和管理相關的 Azure 資源。

    針對此快速入門,請使用下列 az group create 命令,在 eastus 位置中建立一個名為 streamanalyticsrg 的資源群組:

    az group create --name streamanalyticsrg --location eastus
    

準備輸入資料

在您定義串流分析作業之前,請先準備用於作業輸入的資料。 下列 Azure CLI 命令會準備作業所需的輸入資料。

  1. 使用 az iot hub create 命令建立 IoT 中樞。 此範例會建立名為 MyASAIoTHub 的 IoT 中樞。 由於 IoT 中樞名稱必須是全域唯一的,因此如果已取得名稱,您可能必須變更名稱。 將 SKU 設定為 F1 可使用免費層 (如果適用於您的訂用帳戶)。 否則,請選擇下一個最低層。

    iotHubName=MyASAIoTHub
    az iot hub create --name $iotHubName --resource-group streamanalyticsrg --sku S1
    

    建立 IoT 中樞後,使用 az iot hub connection-string show 命令來取得 IoT 中樞連接字串。 複製整個連接字串,並加以儲存。 您會在將 IoT 中樞新增為串流分析作業的輸入時使用它。

    az iot hub connection-string show --hub-name $iotHubName
    
  2. 使用 az iothub device-identity create 命令,將裝置新增到 IoT 中樞。 此範例會建立名為 MyASAIoTDevice 的裝置。

    az iot hub device-identity create --hub-name $iotHubName --device-id "MyASAIoTDevice"
    
  3. 使用 az iot hub device-identity connection-string show 命令取得裝置連接字串。 複製整個連接字串並加以儲存,以便在建立 Raspberry Pi 模擬器時使用。

    az iot hub device-identity connection-string show --hub-name $iotHubName --device-id "MyASAIoTDevice" --output table
    

    輸出範例:

    HostName=MyASAIoTHub.azure-devices.net;DeviceId=MyASAIoTDevice;SharedAccessKey=a2mnUsg52+NIgYudxYYUNXI67r0JmNubmfVafojG8=
    

建立 Blob 儲存體帳戶

下列 Azure CLI 命令會建立用於作業輸出的 Blob 儲存體帳戶

  1. 使用 az storage account create 命令建立一般用途的儲存體帳戶。 一般用途的儲存體帳戶可以用於所有四個服務:Blob、檔案、資料表和佇列。

    storageAccountName="asatutorialstorage$RANDOM"
    az storage account create \
        --name $storageAccountName \
        --resource-group streamanalyticsrg \
        --location eastus \
        --sku Standard_ZRS \
        --encryption-services blob
    
  2. 執行 az storage account keys list 命令,以取得儲存體帳戶的金鑰。

    key=$(az storage account keys list -g streamanalyticsrg -n $storageAccountName --query "[0].value" -o tsv)
    echo $key
    

    重要

    記下 Azure 儲存體帳戶的存取金鑰。 稍後在本快速入門中,您將使用此金鑰。

  3. 使用 az storage container create 命令,建立名為 state 且用於儲存 Blob 的容器。 您可以使用儲存體帳戶金鑰來授權作業以建立容器。 如需有關藉由 Azure CLI 授權資料作業的詳細資訊,請參閱 藉由 Azure CLI 來授權 Blob 或佇列資料的存取權

    az storage container create \
        --account-name $storageAccountName \
        --name state \
        --account-key $key \
        --auth-mode key
    

建立串流分析作業

使用 az stream-analytics job create 命令來建立串流分析作業。

az stream-analytics job create \
    --job-name "streamanalyticsjob" \
    --resource-group "streamanalyticsrg" \
    --location "eastus" \
    --output-error-policy "Drop" \
    --out-of-order-policy "Drop" \
    --order-max-delay 5 \
    --arrival-max-delay 16 \
    --data-locale "en-US"

設定作業的輸入

使用 az stream-analytics input Cmdlet,將輸入新增至您的作業。 此 Cmdlet 會採用 JSON 格式的作業名稱、作業輸入名稱、資源群組名稱和輸入屬性作為參數。 在此範例中,您將建立 IoT 中樞來作為輸入。

重要

  • IOT HUB ACCESS KEY 取代為您所儲存 IOT 中樞連接字串中的共用存取金鑰值。 例如,如果 IOT 中樞連接字串為:HostName=MyASAIoTHub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=xxxxxxxxxxxxxx=,則共用存取金鑰值為 xxxxxxxxxxxxxx=。 取代值時,請確定您不會刪除 " (雙引號) 的 \ (逸出) 字元。
  • 如果您使用 MyASAIoTHub 以外的名稱,請更新下列命令中 iotHubNamespace 的值。 執行 echo $iotHubName 以查看 IoT 中樞的名稱。
az stream-analytics input create \
    --properties "{\"type\":\"Stream\",\"datasource\":{\"type\":\"Microsoft.Devices/IotHubs\",\"properties\":{\"consumerGroupName\":\"\$Default\",\"endpoint\":\"messages/events\",\"iotHubNamespace\":\"MyASAIoTHub\",\"sharedAccessPolicyKey\":\"IOT HUB ACCESS KEY\",\"sharedAccessPolicyName\":\"iothubowner\"}},\"serialization\":{\"type\":\"Json\",\"encoding\":\"UTF8\"}}" \
    --input-name "asaiotinput" \
    --job-name "streamanalyticsjob" \
    --resource-group "streamanalyticsrg"

設定作業的輸出

使用 az stream-analytics output create Cmdlet,將輸出新增至您的作業。 此 Cmdlet 會採用作業名稱、作業輸出名稱、資源群組名稱、JSON 格式的資料來源,以及序列化類型作為參數。

重要

STORAGEACCOUNTNAME> 取代為您的 Azure 儲存體帳戶名稱,並將 STORAGEACCESSKEY> 取代為儲存體帳戶的存取金鑰。 如果您未記下這些值,請執行下列命令以取得這些值:echo $storageAccountNameecho $key。 取代值時,請確定您不會刪除 " (雙引號) 的 \ (逸出) 字元。

az stream-analytics output create \
    --job-name streamanalyticsjob \
    --datasource "{\"type\":\"Microsoft.Storage/Blob\",\"properties\":{\"container\":\"state\",\"dateFormat\":\"yyyy/MM/dd\",\"pathPattern\":\"{date}/{time}\",\"storageAccounts\":[{\"accountKey\":\"STORAGEACCESSKEY\",\"accountName\":\"STORAGEACCOUNTNAME\"}],\"timeFormat\":\"HH\"}}" \
    --serialization "{\"type\":\"Json\",\"properties\":{\"format\":\"Array\",\"encoding\":\"UTF8\"}}" \
    --output-name asabloboutput \
    --resource-group streamanalyticsrg

定義轉換查詢

使用 az stream-analytics transformation create Cmdlet 來新增轉換作業。

az stream-analytics transformation create \
    --resource-group streamanalyticsrg \
    --job-name streamanalyticsjob \
    --name Transformation \
    --streaming-units "6" \
    --saql "SELECT * INTO asabloboutput FROM asaiotinput WHERE Temperature > 27"

執行 IoT 模擬器

  1. 開啟 Raspberry Pi Azure IoT 線上模擬器

  2. 將第 15 行中的預留位置取代為您在快速入門開頭儲存的整個 Azure IoT 中樞裝置連接字串 (而非 IoT 中樞連接字串)。

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

    Raspberry Pi Azure IoT Online Simulator

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

使用 az stream-analytics job start Cmdlet 來啟動作業。 此 Cmdlet 會採用作業名稱、資源群組名稱、輸出啟動模式和啟動時間來作為參數。 OutputStartMode 可接受 JobStartTimeCustomTimeLastOutputEventTime

執行下列 Cmdlet 後,如果作業啟動,它會在輸出中傳回 True

az stream-analytics job start \
    --resource-group streamanalyticsrg \
    --name streamanalyticsjob \
    --output-start-mode JobStartTime

請提供幾分鐘的時間,然後確認已在 state Blob 容器中建立輸出檔案。

Screenshot showing the output file in the State blob container.

下載並開啟檔案,以查看數個類似項目,如下所示:

{
    "messageId": 229,
    "deviceId": "Raspberry Pi Web Client",
    "temperature": 31.85214010589595,
    "humidity": 60.278830289656284,
    "EventProcessedUtcTime": "2023-02-28T22:06:33.5567789Z",
    "PartitionId": 3,
    "EventEnqueuedUtcTime": "2023-02-28T22:05:49.6520000Z",
    "IoTHub": {
        "MessageId": null,
        "CorrelationId": null,
        "ConnectionDeviceId": "MyASAIoTDevice",
        "ConnectionDeviceGenerationId": "638132150746523845",
        "EnqueuedTime": "2023-02-28T22:05:49.6520000Z",
        "StreamId": null
    }
}

清除資源

刪除資源群組,這會刪除資源群組中的所有資源,包括串流分析作業、IoT 中樞和 Azure 儲存體帳戶。

az group delete \
    --name streamanalyticsrg \
    --no-wait

下一步

在本快速入門中,您已使用 Azure CLI 部署了簡單的串流分析作業。 您也可以使用 Azure 入口網站Visual Studio 部署串流分析作業。

若要了解如何設定其他輸入來源及執行即時偵測,請前往下列文章: