Поделиться через


Руководство по отправке данных с сервера OPC UA в Azure Data Lake Storage 2-го поколения

В кратком руководстве вы создали поток данных, который отправляет данные из операций Интернета вещей Azure в Центры событий, а затем в Microsoft Fabric через EventStreams.

Однако данные также можно отправлять непосредственно в конечную точку хранилища без использования Центров событий. Этот подход требует создания схемы Delta Lake, представляющей данные, отправку схемы в операции Интернета вещей Azure, а затем создание потока данных, считывающего данные с сервера OPC UA и записыв его в конечную точку хранилища.

В этом руководстве описана настройка краткого руководства и показано, как бифюрировать данные в Azure Data Lake Storage 2-го поколения. Этот подход позволяет хранить данные непосредственно в масштабируемом и безопасном озере данных, которое можно использовать для дальнейшего анализа и обработки.

Необходимые компоненты

Завершите второй шаг краткого руководства , который получает данные от сервера OPC UA до брокера MQTT операций Интернета вещей Azure. Убедитесь, что данные отображаются в Центрах событий.

Создание учетной записи хранения с возможностью Data Lake Storage

Сначала выполните действия, чтобы создать учетную запись хранения с возможностью Data Lake Storage 2-го поколения.

  • Выберите запоминающееся, но уникальное имя учетной записи хранения, так как оно необходимо в следующих шагах.
  • Для получения наилучших результатов используйте расположение, близкое к кластеру Kubernetes, где выполняются операции Интернета вещей Azure.
  • Во время процесса создания включите параметр иерархического пространства имен. Этот параметр необходим для операций Интернета вещей Azure для записи в учетную запись хранения.
  • Другие параметры можно оставить по умолчанию.

На шаге проверки проверьте параметры и нажмите кнопку "Создать ", чтобы создать учетную запись хранения.

Снимок экрана: страница проверки для создания учетной записи хранения с включенным иерархическим пространством имен.

Получение имени расширения операций Интернета вещей Azure

В портал Azure найдите экземпляр Операций Интернета вещей Azure, созданный в кратком руководстве. В колонке "Обзор" найдите раздел расширения Arc и просмотрите имя расширения. Оно должно выглядеть так: azure-iot-operations-xxxxx.

Снимок экрана: портал Azure где найти имя расширения.

Это имя расширения используется в следующих шагах для назначения разрешений учетной записи хранения.

Назначение разрешения операциям Интернета вещей Azure для записи в учетную запись хранения

Во-первых, в учетной записи хранения перейдите в колонку управления доступом (IAM) и выберите + Добавить назначение ролей. В колонке "Добавление назначения ролей" найдите участника данных BLOB-объектов хранилища ролей и выберите его.

Снимок экрана: выбор роли участника данных BLOB-объектов хранилища.

Затем нажмите кнопку "Далее ", чтобы перейти к разделу "Участники ".

Затем выберите "Выбрать участников " и в поле "Выбрать ", найдите управляемое удостоверение расширения azure-iot-operations-xxxxx Azure IoT Operations Arc и выберите его.

Снимок экрана: поиск имени расширения Arc и выбор его в IAM.

Завершите назначение с помощью проверки и назначения.

Создание контейнера в учетной записи хранения

В учетной записи хранения перейдите в колонку "Контейнеры " и выберите " + Контейнер". В этом руководстве укажите имя контейнера aiotutorial. Щелкните Создать, чтобы создать контейнер.

Снимок экрана: создание контейнера хранилища в портал Azure.

Получение имени реестра схем и пространства имен

Чтобы отправить схему в Операции Интернета вещей Azure, необходимо знать имя реестра схем и пространство имен. Эти сведения можно получить с помощью Azure CLI.

Выполните следующую команду, чтобы получить имя реестра схем и пространство имен. Замените значения заполнителей на собственные значения.

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

Выходные данные должны выглядеть так:

<REGISTRY_NAME>    <SCHEMA_NAMESPACE>

Сохраните значения для следующих шагов.

Отправка схемы в операции Интернета вещей Azure

В кратком руководстве данные, поступающие из ресурса духовки, выглядят следующим образом:

{
  "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
  }
}

Требуемый формат схемы для Delta Lake — это объект JSON, который следует формату сериализации схемы Delta Lake. Схема должна определять структуру данных, включая типы и свойства каждого поля. Дополнительные сведения о формате схемы см . в документации по сериализации схемы Delta Lake.

Совет

Чтобы создать схему из примера файла данных, используйте вспомогательный элемент schema Gen.

В этом руководстве схема данных выглядит следующим образом:

{
  "$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": {}
      }
    ]
  }
}

Сохраните его как файл с именем opcua-schema.json.

Затем отправьте схему в операции Интернета вещей Azure с помощью Azure CLI. Замените значения заполнителей на собственные значения.

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

При этом создается схема с именем opcua-schema в реестре операций Интернета вещей Azure с версией 1.

Чтобы проверить отправку схемы, выведите список версий схемы с помощью Azure CLI.

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

Создание конечной точки потока данных

Конечная точка потока данных — это место, в котором отправляются данные. В этом случае данные отправляются в Azure Data Lake Storage 2-го поколения. Метод проверки подлинности — это управляемое удостоверение, назначаемое системой, которое настроено для записи в учетную запись хранения.

Создайте конечную точку потока данных с помощью Bicep. Замените значения заполнителей на собственные значения.

// 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: {}
      }
    }
  }
}

Сохраните файл как adls-gen2-endpoint.bicep и разверните его с помощью Azure CLI

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

Создание потока данных

Чтобы отправить данные в Azure Data Lake Storage 2-го поколения, необходимо создать поток данных, который считывает данные с сервера OPC UA и записывает его в учетную запись хранения. В этом случае преобразование не требуется, поэтому данные записываются как есть.

Создайте поток данных с помощью Bicep. Замените значения заполнителей на собственные значения.

// 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
        }
      }
    ]
  }
}

Сохраните файл как adls-gen2-dataflow.bicep и разверните его с помощью Azure CLI

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

Проверка данных в Azure Data Lake Storage 2-го поколения

В учетной записи хранения перейдите в колонку "Контейнеры " и выберите созданный контейнер aiotutorial . Вы увидите папку с именем aiotutorial и внутри нее, вы увидите файлы Parquet с данными с сервера OPC UA. Имена файлов находятся в формате part-00001-44686130-347f-4c2c-81c8-eb891601ef98-c000.snappy.parquet.

Снимок экрана: портал Azure с файлами в контейнере.

Чтобы просмотреть содержимое файлов, выберите каждый файл и нажмите кнопку "Изменить".

Снимок экрана: портал Azure, показывающий сам файл parquet.

Содержимое не отображается должным образом в портал Azure, но вы можете скачать файл и открыть его в средстве, например Parquet Viewer.