Principy schémat zpráv
Registr schématu, funkce poskytovaná službou Azure Device Registry, je synchronizované úložiště v cloudu a na hraničních zařízeních. Registr schématu ukládá definice zpráv pocházejících z hraničních prostředků a pak zveřejňuje rozhraní API pro přístup k těmto schématům na hraničních zařízeních.
Konektor pro OPC UA může vytvářet schémata zpráv a přidávat je do registru schémat nebo zákazníci můžou nahrávat schémata do webového uživatelského rozhraní provozního prostředí nebo pomocí šablon ARM/Bicep.
Služby Edge používají schémata zpráv k filtrování a transformaci zpráv při jejich směrování napříč scénářem průmyslových hraničních zařízení.
Schémata jsou dokumenty, které popisují formát zprávy a jeho obsah, aby bylo možné zpracování a kontextování.
Definice schématu zpráv
Registr schématu očekává následující povinná pole ve schématu zpráv:
Povinné pole | Definice |
---|---|
$schema |
Buďto http://json-schema.org/draft-07/schema# nebo Delta/1.0 . V tocích dat se schémata JSON používají pro zdrojové koncové body a schémata Delta se používají pro cílové koncové body. |
type |
Object |
properties |
Definice zprávy. |
Ukázková schémata
Následující ukázková schémata poskytují příklady pro definování schémat zpráv v jednotlivých formátech.
JSON:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"name": "foobarbaz",
"description": "A representation of an event",
"type": "object",
"required": [ "dtstart", "summary" ],
"properties": {
"summary": {
"type": "string"
},
"location": {
"type": "string"
},
"url": {
"type": "string"
},
"duration": {
"type": "string",
"description": "Event duration"
}
}
}
Delta:
{
"$schema": "Delta/1.0",
"type": "object",
"properties": {
"type": "struct",
"fields": [
{ "name": "asset_id", "type": "string", "nullable": false, "metadata": {} },
{ "name": "asset_name", "type": "string", "nullable": false, "metadata": {} },
{ "name": "location", "type": "string", "nullable": false, "metadata": {} },
{ "name": "manufacturer", "type": "string", "nullable": false, "metadata": {} },
{ "name": "production_date", "type": "string", "nullable": false, "metadata": {} },
{ "name": "serial_number", "type": "string", "nullable": false, "metadata": {} },
{ "name": "temperature", "type": "double", "nullable": false, "metadata": {} }
]
}
}
Generování schématu
K vygenerování schématu z ukázkového datového souboru použijte pomocníka Schema Gen.
Kurz, který používá generátor schématu, najdete v kurzu : Odesílání dat ze serveru OPC UA do Azure Data Lake Storage Gen2.
Jak toky dat používají schémata zpráv
Schémata zpráv se používají ve všech třech fázích toku dat: definování zdrojového vstupu, použití transformací dat a vytvoření cílového výstupu.
Vstupní schéma
Každý zdroj toku dat může volitelně zadat schéma zpráv. Toky dat v současné době neprovádějí ověřování za běhu schématu zdrojových zpráv.
Zdroje prostředků mají předdefinované schéma zpráv vytvořené konektorem pro OPC UA.
Schémata lze nahrát pro zdroje zprostředkovatele zpráv. Operace Azure IoT v současné době podporují JSON pro zdrojová schémata, označovaná také jako vstupní schémata. V provozním prostředí můžete vybrat existující schéma nebo ho nahrát při definování zdroje zprostředkovatele zpráv:
Transformace
Provozní prostředí používá vstupní schéma jako výchozí bod pro vaše data, což usnadňuje výběr transformací na základě známého formátu vstupní zprávy.
Výstupní schéma
Výstupní schémata jsou přidružená k cílům toku dat.
Na portálu provozního prostředí můžete nakonfigurovat výstupní schémata pro následující cílové koncové body, které podporují výstup Parquet:
- místní úložiště
- Fabric OneLake
- Azure Storage (ADLS Gen2)
- Průzkumník dat Azure
Poznámka: Formát schématu Delta se používá pro výstup Parquet i Delta.
Pokud používáte Bicep nebo Kubernetes, můžete nakonfigurovat výstupní schémata pomocí výstupu JSON pro cílové koncové body MQTT a Kafka. Cíle založené na MQTT a Kafka nepodporují formát Delta.
U těchto toků dat provozní prostředí použije všechny transformace na vstupní schéma a pak vytvoří nové schéma ve formátu Delta. Při vytvoření vlastního prostředku toku dat (CR) obsahuje schemaRef
hodnotu, která odkazuje na vygenerované schéma uložené v registru schématu.
Pokud chcete nahrát výstupní schéma, přečtěte si téma Nahrání schématu.
Nahrání schématu
Vstupní schéma lze nahrát na portálu provozního prostředí, jak je popsáno v části Vstupní schéma tohoto článku. Schéma můžete nahrát také pomocí Azure CLI nebo šablony Bicep.
Nahrání schématu pomocí rozhraní příkazového řádku
Skupina příkazů az iot ops schema obsahuje příkazy pro vytvoření, zobrazení a správu schémat v registru schématu.
Schéma můžete nahrát odkazováním na soubor JSON nebo zahrnutím schématu jako vloženého obsahu.
Následující příklad používá minimální vstupy k vytvoření schématu volaný myschema
ze souboru. Pokud není zadáno číslo verze, verze schématu je 1.
az iot ops schema create -n myschema -g myresourcegroup --registry myregistry --format json --type message --version-content myschema.json
Následující příklad vytvoří schéma volané myschema
z vloženého obsahu a přiřadí číslo verze.
az iot ops schema create -n myschema -g myresourcegroup --registry myregistry --format delta --type message --version-content '{\"hello\": \"world\"}' --ver 14
Tip
Pokud název registru neznáte, použijte k schema registry list
dotazování příkaz. Příklad:
az iot ops schema registry list -g myresourcegroup --query "[].{Name:name}" -o tsv
create
Po dokončení příkazu by se měl v kontejneru účtu úložiště zobrazit objekt blob s obsahem schématu. Název objektu blob je ve formátu schema-namespace/schema/version
.
Další možnosti můžete zobrazit pomocí pomocného příkazu az iot ops schema -h
.
Nahrání schématu pomocí šablony Bicep
Vytvořte soubor Bicep .bicep
a přidejte do něj obsah schématu v horní části jako proměnnou. Tento příklad je schéma Delta, které odpovídá datům OPC UA z rychlého startu.
// Delta schema content matching OPC UA data from quickstart
// For ADLS Gen2, ADX, and Fabric destinations
var opcuaSchemaContent = '''
{
"$schema": "Delta/1.0",
"type": "object",
"properties": {
"type": "struct",
"fields": [
{
"name": "temperature",
"type": {
"type": "struct",
"fields": [
{
"name": "SourceTimestamp",
"type": "string",
"nullable": true,
"metadata": {}
},
{
"name": "Value",
"type": "integer",
"nullable": true,
"metadata": {}
},
{
"name": "StatusCode",
"type": {
"type": "struct",
"fields": [
{
"name": "Code",
"type": "integer",
"nullable": true,
"metadata": {}
},
{
"name": "Symbol",
"type": "string",
"nullable": true,
"metadata": {}
}
]
},
"nullable": true,
"metadata": {}
}
]
},
"nullable": true,
"metadata": {}
},
{
"name": "Tag 10",
"type": {
"type": "struct",
"fields": [
{
"name": "SourceTimestamp",
"type": "string",
"nullable": true,
"metadata": {}
},
{
"name": "Value",
"type": "integer",
"nullable": true,
"metadata": {}
},
{
"name": "StatusCode",
"type": {
"type": "struct",
"fields": [
{
"name": "Code",
"type": "integer",
"nullable": true,
"metadata": {}
},
{
"name": "Symbol",
"type": "string",
"nullable": true,
"metadata": {}
}
]
},
"nullable": true,
"metadata": {}
}
]
},
"nullable": true,
"metadata": {}
}
]
}
}
'''
Ve stejném souboru přímo pod schématem pak definujte prostředek schématu spolu s ukazateli na existující prostředek registru schématu, který máte z nasazení operací Azure IoT.
// Replace placeholder values with your actual resource names
param schemaRegistryName string = '<SCHEMA_REGISTRY_NAME>'
// Pointers to existing resources from AIO deployment
resource schemaRegistry 'Microsoft.DeviceRegistry/schemaRegistries@2024-09-01-preview' existing = {
name: schemaRegistryName
}
// Name and version of the schema
param opcuaSchemaName string = 'opcua-output-delta'
param opcuaSchemaVer string = '1'
// Define the schema resource to be created and instantiate a version
resource opcSchema 'Microsoft.DeviceRegistry/schemaRegistries/schemas@2024-09-01-preview' = {
parent: schemaRegistry
name: opcuaSchemaName
properties: {
displayName: 'OPC UA Delta Schema'
description: 'This is a OPC UA delta Schema'
format: 'Delta/1.0'
schemaType: 'MessageSchema'
}
}
resource opcuaSchemaVersion 'Microsoft.DeviceRegistry/schemaRegistries/schemas/schemaVersions@2024-09-01-preview' = {
parent: opcSchema
name: opcuaSchemaVer
properties: {
description: 'Schema version'
schemaContent: opcuaSchemaContent
}
}
Po definování obsahu a prostředků schématu můžete šablonu Bicep nasadit a vytvořit schéma v registru schématu.
az deployment group create --resource-group <RESOURCE_GROUP> --template-file <FILE>.bicep