Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Brug disse tre Avro-definitioner til at prøve skemaoprettelse, bulk import og versionssammenligning. Eksemplet beskriver en enhed, der rapporterer miljøaflæsninger, firmware, placering og diagnostisk information.
Hver version beholder postnavnet DeviceTelemetryEventData og navnerummet Fabrikam.IoT. Filnavnet identificerer prøveversionen; det erstatter ikke versionsnummeret, som registryet har tildelt.
| Version | Ændringer | Filnavn |
|---|---|---|
| 1 | Definerer enheds- og lejeridentitegn, optagetid, temperatur, fugtighed og batteriaflæsninger. | Fabrikam.DeviceTelemetryEventData.v1.avsc |
| 2 | Tilføjer firmwareinformation og en valgfri indlejret lokationspost. | Fabrikam.DeviceTelemetryEventData.v2.avsc |
| 3 | Tilføjer et status-enum, et array af diagnostiske koder og et kort over tags. | Fabrikam.DeviceTelemetryEventData.v3.avsc |
Gem prøvefilerne
Kopier hver komplet JSON-definition til en separat UTF-8 tekstfil med filnavnet vist. Disse filer er skema-definitioner, ikke hændelsespayloads.
Version 1
Den første version definerer de oprindelige enhedsaflæsninger.
{
"type": "record",
"name": "DeviceTelemetryEventData",
"namespace": "Fabrikam.IoT",
"doc": "Device environmental readings.",
"fields": [
{ "name": "deviceid", "type": "string", "doc": "Unique device identifier." },
{ "name": "tenantid", "type": "string", "doc": "Tenant identifier." },
{ "name": "capturedAt", "type": { "type": "long", "logicalType": "timestamp-millis" }, "doc": "Capture time in UTC." },
{ "name": "temperatureC", "type": "double", "doc": "Temperature in degrees Celsius." },
{ "name": "humidityPct", "type": "double", "doc": "Relative humidity percentage." },
{ "name": "batteryPct", "type": "int", "doc": "Battery level percentage." }
]
}
Version 2
Den anden version tilføjer firmwareinformation og en nul-position post. Den indlejrede post arver det ydre postnavnerum.
{
"type": "record",
"name": "DeviceTelemetryEventData",
"namespace": "Fabrikam.IoT",
"doc": "Device environmental readings with firmware and location.",
"fields": [
{ "name": "deviceid", "type": "string", "doc": "Unique device identifier." },
{ "name": "tenantid", "type": "string", "doc": "Tenant identifier." },
{ "name": "capturedAt", "type": { "type": "long", "logicalType": "timestamp-millis" }, "doc": "Capture time in UTC." },
{ "name": "temperatureC", "type": "double", "doc": "Temperature in degrees Celsius." },
{ "name": "humidityPct", "type": "double", "doc": "Relative humidity percentage." },
{ "name": "batteryPct", "type": "int", "doc": "Battery level percentage." },
{ "name": "firmwareVersion", "type": "string", "default": "1.0.0", "doc": "Firmware version reported by the device." },
{
"name": "location",
"type": [
"null",
{
"type": "record",
"name": "DeviceLocation",
"fields": [
{ "name": "latitude", "type": "double", "doc": "Latitude in decimal degrees." },
{ "name": "longitude", "type": "double", "doc": "Longitude in decimal degrees." }
]
}
],
"default": null,
"doc": "Optional location data."
}
]
}
Version 3
Den tredje version tilføjer enhedens sundhed og diagnostik. Arrayet og kortet har tomme standardindstillinger.
{
"type": "record",
"name": "DeviceTelemetryEventData",
"namespace": "Fabrikam.IoT",
"doc": "Device environmental readings with health and diagnostics.",
"fields": [
{ "name": "deviceid", "type": "string", "doc": "Unique device identifier." },
{ "name": "tenantid", "type": "string", "doc": "Tenant identifier." },
{ "name": "capturedAt", "type": { "type": "long", "logicalType": "timestamp-millis" }, "doc": "Capture time in UTC." },
{ "name": "temperatureC", "type": "double", "doc": "Temperature in degrees Celsius." },
{ "name": "humidityPct", "type": "double", "doc": "Relative humidity percentage." },
{ "name": "batteryPct", "type": "int", "doc": "Battery level percentage." },
{ "name": "firmwareVersion", "type": "string", "default": "1.0.0", "doc": "Firmware version reported by the device." },
{
"name": "location",
"type": [
"null",
{
"type": "record",
"name": "DeviceLocation",
"fields": [
{ "name": "latitude", "type": "double", "doc": "Latitude in decimal degrees." },
{ "name": "longitude", "type": "double", "doc": "Longitude in decimal degrees." }
]
}
],
"default": null,
"doc": "Optional location data."
},
{
"name": "status",
"type": { "type": "enum", "name": "DeviceStatus", "symbols": ["ONLINE", "DEGRADED", "OFFLINE"] },
"default": "ONLINE",
"doc": "Current health status of the device."
},
{ "name": "diagnosticCodes", "type": { "type": "array", "items": "string" }, "default": [], "doc": "Active diagnostic codes." },
{ "name": "tags", "type": { "type": "map", "values": "string" }, "default": {}, "doc": "Additional key-value metadata." }
]
}
Prøv versionsstyringsworkflowet
-
Opret et skema-sæt kaldet
Fabrikam device telemetry. - Importer de tre filer sammen. Gennemgå den opdagede rækkefølge, før du bekræfter importen.
- Åbn det importerede skema og bekræft, at version 3 er den nyeste definition.
- Skift til version 1 og bekræft, at firmware-, lokations- og diagnosefelterne ikke er til stede.
- Sammenlign version 1 med version 3, og sammenlign derefter version 2 med version 3.
Alternativt kan du oprette et skema fra version 1 og opdatere det med version 2 og 3 i rækkefølge. Brug et separat skema-sæt til denne øvelse, så du ikke blander manuelle opdateringer med bulk-import-resultatet.
Bemærkning
Eksemplerne bruger additive ændringer og standardindstillinger for at gøre forskellene nemme at inspicere. Standardindstillinger i en Avro-definition garanterer ikke, at hver producent, payload-kodning eller destination accepterer ændringen. Test din end-to-end pipeline, før du adopterer en ny version.