Sdílet prostřednictvím


Kurz: Odesílání dat ze serveru OPC UA do Azure Data Lake Storage Gen2

V rychlém startu jste vytvořili tok dat, který odesílá data z operací Azure IoT do event Hubs a pak do Microsoft Fabric přes EventStreams.

Je ale také možné odesílat data přímo do koncového bodu úložiště bez použití služby Event Hubs. Tento přístup vyžaduje vytvoření schématu Delta Lake, které představuje data, nahrání schématu do operací Azure IoT a následné vytvoření toku dat, který čte data ze serveru OPC UA a zapíše ho do koncového bodu úložiště.

Tento kurz vychází z nastavení rychlého startu a ukazuje, jak data převést do Azure Data Lake Storage Gen2. Tento přístup umožňuje ukládat data přímo ve škálovatelném a zabezpečeném datovém jezeře, které je možné použít k další analýze a zpracování.

Požadavky

Dokončete druhý krok rychlého startu, který vám získá data ze serveru OPC UA do zprostředkovatele MQTT Operations Azure IoT. Ujistěte se, že se data zobrazují ve službě Event Hubs.

Vytvoření účtu úložiště s využitím funkce Data Lake Storage

Nejprve podle kroků vytvořte účet úložiště s funkcí Data Lake Storage Gen2.

  • Zvolte zapamatovatelný, ale jedinečný název účtu úložiště, protože ho budete potřebovat v dalších krocích.
  • Nejlepších výsledků dosáhnete tak, že použijete umístění, které je blízko clusteru Kubernetes, ve kterém běží operace Azure IoT.
  • Během procesu vytváření povolte nastavení hierarchického oboru názvů . Toto nastavení se vyžaduje pro operace Azure IoT pro zápis do účtu úložiště.
  • Ostatní nastavení můžete ponechat jako výchozí.

V kroku Kontrola ověřte nastavení a výběrem možnosti Vytvořit vytvořte účet úložiště.

Snímek obrazovky zobrazující stránku kontroly pro vytvoření účtu úložiště s povoleným hierarchickým oborem názvů

Získání názvu rozšíření operací Azure IoT

Na webu Azure Portal vyhledejte instanci operace Azure IoT, kterou jste vytvořili v rychlém startu. V okně Přehled najděte část rozšíření Arc a podívejte se na název rozšíření. Měl by vypadat jako azure-iot-operations-xxxxx.

Snímek obrazovky webu Azure Portal znázorňující, kde najdete název rozšíření

Tento název rozšíření se používá v dalších krocích k přiřazení oprávnění k účtu úložiště.

Přiřazení oprávnění k operacím Azure IoT pro zápis do účtu úložiště

Nejprve v účtu úložiště přejděte do okna Řízení přístupu (IAM) a vyberte + Přidat přiřazení role. V okně Přidat přiřazení role vyhledejte roli Přispěvatel dat objektů blob služby Storage a vyberte ji.

Snímek obrazovky znázorňující výběr role přispěvatele dat objektů blob úložiště

Potom vyberte Další , abyste se dostali do oddílu Členové .

Dále zvolte Vybrat členy a v poli Vybrat vyhledejte spravovanou identitu rozšíření Azure IoT Operations Arc s názvem azure-iot-operations-xxxxx a vyberte ji.

Snímek obrazovky znázorňující, jak vyhledat název rozšíření Arc a vybrat ho v IAM

Zadání dokončete pomocí příkazu Zkontrolovat a přiřadit.

Vytvoření kontejneru v účtu úložiště

V účtu úložiště přejděte do okna Kontejnery a vyberte + Kontejner. Pro účely tohoto kurzu pojmenujte kontejner aiotutorial. Výběrem možnosti Vytvořit vytvořte kontejner.

Snímek obrazovky znázorňující, jak vytvořit kontejner úložiště na webu Azure Portal

Získání názvu registru schématu a oboru názvů

Pokud chcete nahrát schéma do operací Azure IoT, potřebujete znát název registru schématu a obor názvů. Tyto informace můžete získat pomocí Azure CLI.

Spuštěním následujícího příkazu získejte název registru schématu a obor názvů. Nahraďte zástupné symboly vašimi hodnotami.

az iot ops schema registry list -g <RESOURCE_GROUP> --query "[0].{name: name, namespace: properties.namespace}" -o tsv

Výstup by měl vypadat takto:

<REGISTRY_NAME>    <SCHEMA_NAMESPACE>

Uložte hodnoty pro další kroky.

Nahrání schématu do operací Azure IoT

V rychlém startu vypadají data pocházející z prostředku trouby takto:

{
  "Temperature": {
    "SourceTimestamp": "2024-11-15T21:40:28.5062427Z",
    "Value": 6416
  },
  "FillWeight": {
    "SourceTimestamp": "2024-11-15T21:40:28.5063811Z",
    "Value": 6416
  },
  "EnergyUse": {
    "SourceTimestamp": "2024-11-15T21:40:28.506383Z",
    "Value": 6416
  }
}

Požadovaný formát schématu pro Delta Lake je objekt JSON, který se řídí formátem serializace schématu Delta Lake. Schéma by mělo definovat strukturu dat, včetně typů a vlastností jednotlivých polí. Další podrobnosti o formátu schématu najdete v dokumentaci k formátu serializace schématu Delta Lake.

Tip

K vygenerování schématu z ukázkového datového souboru použijte pomocníka Schema Gen.

Pro účely tohoto kurzu schéma dat vypadá takto:

{
  "$schema": "Delta/1.0",
  "type": "object",
  "properties": {
    "type": "struct",
    "fields": [
      {
        "name": "Temperature",
        "type": {
          "type": "struct",
          "fields": [
            {
              "name": "SourceTimestamp",
              "type": "timestamp",
              "nullable": false,
              "metadata": {}
            },
            {
              "name": "Value",
              "type": "integer",
              "nullable": false,
              "metadata": {}
            }
          ]
        },
        "nullable": false,
        "metadata": {}
      },
      {
        "name": "FillWeight",
        "type": {
          "type": "struct",
          "fields": [
            {
              "name": "SourceTimestamp",
              "type": "timestamp",
              "nullable": false,
              "metadata": {}
            },
            {
              "name": "Value",
              "type": "integer",
              "nullable": false,
              "metadata": {}
            }
          ]
        },
        "nullable": false,
        "metadata": {}
      },
      {
        "name": "EnergyUse",
        "type": {
          "type": "struct",
          "fields": [
            {
              "name": "SourceTimestamp",
              "type": "timestamp",
              "nullable": false,
              "metadata": {}
            },
            {
              "name": "Value",
              "type": "integer",
              "nullable": false,
              "metadata": {}
            }
          ]
        },
        "nullable": false,
        "metadata": {}
      }
    ]
  }
}

Uložte ho jako soubor s názvem opcua-schema.json.

Pak pomocí Azure CLI nahrajte schéma do operací Azure IoT. Nahraďte zástupné symboly vašimi hodnotami.

az iot ops schema create -n opcua-schema -g <RESOURCE_GROUP> --registry <REGISTRY_NAME> --format delta --type message --version-content opcua-schema.json --ver 1

Tím se vytvoří schéma pojmenované opcua-schema v registru operací Azure IoT s verzí 1.

Pokud chcete ověřit nahrání schématu, vypíšete verze schématu pomocí Azure CLI.

az iot ops schema version list -g <RESOURCE_GROUP> --schema opcua-schema --registry <REGISTRY_NAME>

Vytvoření koncového bodu toku dat

Koncový bod toku dat je cíl, kam se data odesílají. V tomto případě se data odesílají do Azure Data Lake Storage Gen2. Metoda ověřování je spravovaná identita přiřazená systémem, kterou jste nastavili tak, aby měla správná oprávnění k zápisu do účtu úložiště.

Vytvořte koncový bod toku dat pomocí Bicep. Nahraďte zástupné symboly vašimi hodnotami.

// Replace with your values
param aioInstanceName string = '<AIO_INSTANCE_NAME>'
param customLocationName string = '<CUSTOM_LOCATION_NAME>'

// Tutorial specific values
param endpointName string = 'adls-gen2-endpoint'
param host string = 'https://<ACCOUNT>.blob.core.windows.net'

resource aioInstance 'Microsoft.IoTOperations/instances@2024-11-01' existing = {
  name: aioInstanceName
}

resource customLocation 'Microsoft.ExtendedLocation/customLocations@2021-08-31-preview' existing = {
  name: customLocationName
}

resource adlsGen2Endpoint 'Microsoft.IoTOperations/instances/dataflowEndpoints@2024-11-01' = {
  parent: aioInstance
  name: endpointName
  extendedLocation: {
    name: customLocation.id
    type: 'CustomLocation'
  }
  properties: {
    endpointType: 'DataLakeStorage'
    dataLakeStorageSettings: {
      host: host
      authentication: {
        method: 'SystemAssignedManagedIdentity'
        systemAssignedManagedIdentitySettings: {}
      }
    }
  }
}

Uložte soubor jako adls-gen2-endpoint.bicep a nasaďte ho pomocí Azure CLI.

az deployment group create -g <RESOURCE_GROUP> --template-file adls-gen2-endpoint.bicep

Vytvoření toku dat

Pokud chcete odesílat data do Azure Data Lake Storage Gen2, musíte vytvořit tok dat, který čte data ze serveru OPC UA a zapisuje je do účtu úložiště. V tomto případě není potřeba žádná transformace, takže se data zapisuje tak, jak jsou.

Vytvoření toku dat pomocí Bicep Nahraďte zástupné symboly vašimi hodnotami.

// Replace with your values
param aioInstanceName string = '<AIO_INSTANCE_NAME>'
param customLocationName string = '<CUSTOM_LOCATION_NAME>'
param schemaNamespace string = '<SCHEMA_NAMESPACE>'

// Tutorial specific values
param schema string = 'opcua-schema'
param schemaVersion string = '1'
param dataflowName string = 'tutorial-adls-gen2'
param assetName string = 'oven'
param endpointName string = 'adls-gen2-endpoint'
param containerName string = 'aiotutorial'
param serialFormat string = 'Delta'

resource aioInstance 'Microsoft.IoTOperations/instances@2024-11-01' existing = {
  name: aioInstanceName
}

resource customLocation 'Microsoft.ExtendedLocation/customLocations@2021-08-31-preview' existing = {
  name: customLocationName
}

// Pointer to the default dataflow profile
resource defaultDataflowProfile 'Microsoft.IoTOperations/instances/dataflowProfiles@2024-11-01' existing = {
  parent: aioInstance
  name: 'default'
}

resource adlsEndpoint 'Microsoft.IoTOperations/instances/dataflowEndpoints@2024-11-01' existing = {
  parent: aioInstance
  name: endpointName
}

resource defaultDataflowEndpoint 'Microsoft.IoTOperations/instances/dataflowEndpoints@2024-11-01' existing = {
  parent: aioInstance
  name: 'default'
}

resource asset 'Microsoft.DeviceRegistry/assets@2024-11-01' existing = {
  name: assetName
}

resource dataflow 'Microsoft.IoTOperations/instances/dataflowProfiles/dataflows@2024-11-01' = {
  // Reference to the parent dataflow profile, the default profile in this case
  // Same usage as profileRef in Kubernetes YAML
  parent: defaultDataflowProfile
  name: dataflowName
  extendedLocation: {
    name: customLocation.id
    type: 'CustomLocation'
  }
  properties: {
    mode: 'Enabled'
    operations: [
      {
        operationType: 'Source'
        sourceSettings: {
          endpointRef: defaultDataflowEndpoint.name
          assetRef: asset.name
          dataSources: ['azure-iot-operations/data/${assetName}']
        }
      }
      // Transformation optional
      {
        operationType: 'BuiltInTransformation'
        builtInTransformationSettings: {
          serializationFormat: serialFormat
          schemaRef: 'aio-sr://${schemaNamespace}/${schema}:${schemaVersion}'
          map: [
            {
              type: 'PassThrough'
              inputs: [
                '*'
              ]
              output: '*'
            }
         ]
        }
      }
      {
        operationType: 'Destination'
        destinationSettings: {
          endpointRef: adlsEndpoint.name
          dataDestination: containerName
        }
      }
    ]
  }
}

Uložte soubor jako adls-gen2-dataflow.bicep a nasaďte ho pomocí Azure CLI.

az deployment group create -g <RESOURCE_GROUP> --template-file adls-gen2-dataflow.bicep

Ověření dat v Azure Data Lake Storage Gen2

V účtu úložiště přejděte do okna Kontejnery a vyberte kontejner aiotutorial , který jste vytvořili. Měla by se zobrazit složka s názvem aiotutorial a uvnitř, měli byste vidět soubory Parquet s daty ze serveru OPC UA. Názvy souborů jsou ve formátu part-00001-44686130-347f-4c2c-81c8-eb891601ef98-c000.snappy.parquet.

Snímek obrazovky webu Azure Portal zobrazující soubory v kontejneru

Pokud chcete zobrazit obsah souborů, vyberte každý soubor a vyberte Upravit.

Snímek obrazovky webu Azure Portal zobrazující samotný soubor parquet

Obsah se na webu Azure Portal nevykresluje správně, ale můžete si ho stáhnout a otevřít v nástroji, jako je Parquet Viewer.