Руководство по отправке данных с сервера 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 для записи в учетную запись хранения
Во-первых, в учетной записи хранения перейдите в колонку управления доступом (IAM) и выберите + Добавить назначение ролей. В колонке "Добавление назначения ролей" найдите участника данных BLOB-объектов хранилища ролей и выберите его.
Затем нажмите кнопку "Далее ", чтобы перейти к разделу "Участники ".
Затем выберите "Выбрать участников " и в поле "Выбрать ", найдите управляемое удостоверение расширения azure-iot-operations-xxxxx
Azure IoT Operations Arc и выберите его.
Завершите назначение с помощью проверки и назначения.
Создание контейнера в учетной записи хранения
В учетной записи хранения перейдите в колонку "Контейнеры " и выберите " + Контейнер". В этом руководстве укажите имя контейнера aiotutorial
. Щелкните Создать, чтобы создать контейнер.
Получение имени реестра схем и пространства имен
Чтобы отправить схему в Операции Интернета вещей 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, но вы можете скачать файл и открыть его в средстве, например Parquet Viewer.