Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2025 (17.x)
Azure SQL Database
Spravovaná instance Azure SQL
SQL databáze v Microsoft Fabric
Tento článek popisuje formát zpráv CloudEvents, který se streamuje do Azure Event Hubs nebo Fabric Eventstream, když používáte funkci change event streaming (CES) v SQL Server 2025 (17.x), Azure SQL Database, Azure SQL Managed Instance, a SQL databázi v Microsoft Fabric.
Poznámka:
Streamování událostí změny je momentálně ve verzi preview a liší se v podpoře mezi produkty. Ve verzi Preview se tato funkce může změnit.
Přehled
Stream změn událostí vysílá události, které odpovídají specifikaci CloudEvents , takže je můžete snadno integrovat se systémy řízenými událostmi. Všechny ces CloudEvents obsahují 11 atributů (pole). Můžete nakonfigurovat CES tak, aby serializoval celý CloudEvent, včetně atributu data , jako nativní JSON nebo Avro binární soubor. Nativní JSON události neobsahují binární sekce v Avro. V obou formátech serializace má atribut data typ bajtového pole. Bajty používají binární kódování JSON nebo Avro podle zvoleného serializačního formátu a následují schéma datového atributu Avro s datovým atributem CES.
Important
Od 15. srpna 2026 je protokol AMQP pro change event streaming (CES) již zastaralý. Existují rozdíly mezi platformami. Pro kroky a časové harmonogramy migrace viz AMQP protokol deprecation.
Související specifikace a zdroje
Pokud je to relevantní, popisy v této sekci pocházejí ze specifikace CloudEvent, která obsahuje více podrobností.
Atributy
specversion:- Datový typ: Řetězec
- Požadovaný atribut CloudEvent
- Verze specifikace CloudEvents, kterou událost používá. Tato verze umožňuje interpretaci kontextu.
type- Datový typ: Řetězec
- Požadovaný atribut CloudEvent
- Obsahuje hodnotu, která popisuje typ události související s původní výskyt. Formát této hodnoty je definován producentem a může zahrnovat informace jako verze typu. Pro více informací viz Verze CloudEvents.
- Pro události streamování změn je aktuálně
com.microsoft.SQL.CES.DML.V{n}typ: , kde{n}označuje verzi schématu událostí Microsoft Change Event Streaming DML.- Aktuální nejnovější verze schématu je 1.
source- Datový typ: Řetězec
- Požadovaný atribut CloudEvent
- Identifikuje kontext, ve kterém došlo k události. Kombinace zdroje a ID musí být pro každou událost jedinečná. V současnosti je toto pole vždy posíláno jako
\/události streamované ze SQL.
id- Datový typ: Řetězec
- Požadovaný atribut CloudEvent
- Identifikuje událost. Producenti musí zajistit, aby kombinace zdroje a ID byla jedinečná pro každou konkrétní událost. Pokud se duplicitní událost znovu odešle (například kvůli chybě sítě), může mít stejné ID. Uživatelé můžou předpokládat, že události se stejným zdrojem a ID jsou duplicitní.
logicalid- Datový typ: Řetězec
- Atribut rozšíření
- Sdílené logické ID identifikují rozdělené zprávy (kvůli omezením velikosti zpráv v Event Hubu).
time- Datový typ: Časové razítko
- Volitelný atribut CloudEvent
- UTC časové razítko, kdy commit proběhl v rámci SQL transakce, která původně spustí streamovanou událost.
datacontenttype- Datový typ: Řetězec
- Volitelný atribut CloudEvent
- Typ obsahu datové hodnoty Tento atribut umožňuje datům přenášet libovolný typ obsahu, přičemž formát a kódování se můžou lišit od formátu zvolené události. Například událost vykreslená pomocí formátu obálky JSON může obsahovat datovou část XML a příjemce je informován tímto atributem nastaveným na "application/xml". Pravidla pro vykreslování datového obsahu pro různé
datacontenttypehodnoty jsou definována ve specifikacích formátu události.
operation- Datový typ: Řetězec
- Atribut rozšíření
- Představuje typ SQL operace, která proběhla:
- INS pro inserty
- UPD pro aktualizace
- DEL pro mazání
segmentindex- Datový typ: Celé číslo
- Atribut rozšíření
- Indexu segmentu, který označuje pozici zprávy v logických blokech zpráv. Index segmentu poskytuje informace o tom, kde zpráva stojí v posloupnosti logických fragmentů zpráv. Toto pole je vždy přítomné. Použijte
logicalid, , asegmentindexpole k třídění příchozích událostí, které představují velký SQL payload rozdělený podle nastavené hodnotyfinalsegmentmax_message_size_kb.
finalsegment- Datový typ: Logická hodnota
- Atribut rozšíření
- Označuje, zda je tento segment posledním segmentem sekvence. Toto pole je vždy přítomné a pomáhá určit, zda byla SQL událost rozdělena na podudálosti podle nakonfigurované
max_message_size_kbhodnoty.
data- Typ dat: Pole bajtů
- Volitelný atribut CloudEvent
- Obsahuje data o událostech specifická pro danou doménu, která popisují změnu. Deserializujte bajty jako binární soubory JSON nebo Avro podle zvoleného formátu serializace. Deserializovaná data následují schéma atributu Avro s atributem CES. Pro informace o jejích polích viz formát atributu Data.
Poznámka:
Dělení zpráv je oddělené od okrácení sloupcových hodnot. Než CES serializuje data atribut, zkracuje každou hodnotu streamovaného sloupce větší než 1 MB na 1 MB. CES pak rozdělí vytvořenou událost na části zpráv podle potřeby podle .max_message_size_kb
Příklady
Příklad zprávy JSON – vložení
{
"specversion": "1.0",
"type": "com.microsoft.SQL.CES.DML.V1",
"source": "\/",
"id": "56cb8ff3-5c55-4f3b-a7f7-b044d1933ef6",
"logicalid": "1bf2756a-c15f-4d2e-a2d5-7d3f9dbf85b0:000000B1000008A80007:00000000000000000001",
"time": "2026-08-07T16:25:00.890Z",
"datacontenttype": "application\/json",
"operation": "INS",
"segmentindex": 0,
"finalsegment": true,
"data": "{\"eventsource\":{\"db\":\"EmployeesDb\",\"schema\":\"dbo\",\"tbl\":\"Employees\",\"cols\":[{\"name\":\"Id\",\"type\":\"int\",\"index\":0},{\"name\":\"FirstName\",\"type\":\"nvarchar(50)\",\"index\":1},{\"name\":\"LastName\",\"type\":\"nvarchar(50)\",\"index\":2},{\"name\":\"SignupDate\",\"type\":\"datetime2(7)\",\"index\":3}],\"pkkey\":[{\"columnname\":\"Id\",\"value\":\"8\"}],\"transaction\":{\"commitlsn\":\"000000B1:000008A8:0007\",\"beginlsn\":\"000000B1:000008A8:0003\",\"sequencenumber\":1,\"finalevent\":false,\"committime\":\"2026-08-07T16:25:00.890Z\"}},\"eventrow\":{\"old\":\"{}\",\"current\":\"{\\\"Id\\\":\\\"8\\\",\\\"FirstName\\\":\\\"Nikola\\\",\\\"LastName\\\":\\\"Nikolic\\\",\\\"SignupDate\\\":\\\"2026-08-07 16:25:00.8833333\\\"}\"}}"
}
Příklad zprávy JSON - aktualizace
{
"specversion": "1.0",
"type": "com.microsoft.SQL.CES.DML.V1",
"source": "\/",
"id": "19221db1-a1b5-4ec7-8937-3fdf9d762abb",
"logicalid": "1bf2756a-c15f-4d2e-a2d5-7d3f9dbf85b0:000000B1000009300009:00000000000000000001",
"time": "2026-08-07T16:30:10.123Z",
"datacontenttype": "application\/json",
"operation": "UPD",
"segmentindex": 0,
"finalsegment": true,
"data": "{\"eventsource\":{\"db\":\"EmployeesDb\",\"schema\":\"dbo\",\"tbl\":\"Employees\",\"cols\":[{\"name\":\"Id\",\"type\":\"int\",\"index\":0},{\"name\":\"FirstName\",\"type\":\"nvarchar(50)\",\"index\":1},{\"name\":\"LastName\",\"type\":\"nvarchar(50)\",\"index\":2},{\"name\":\"SignupDate\",\"type\":\"datetime2(7)\",\"index\":3}],\"pkkey\":[{\"columnname\":\"Id\",\"value\":\"8\"}],\"transaction\":{\"commitlsn\":\"000000B1:00000930:0009\",\"beginlsn\":\"000000B1:00000930:0002\",\"sequencenumber\":1,\"finalevent\":false,\"committime\":\"2026-08-07T16:30:10.123Z\"}},\"eventrow\":{\"old\":\"{\\\"Id\\\":\\\"8\\\",\\\"FirstName\\\":\\\"Nikola\\\",\\\"LastName\\\":\\\"Nikolic\\\",\\\"SignupDate\\\":\\\"2026-08-07 16:25:00.8833333\\\"}\",\"current\":\"{\\\"Id\\\":\\\"8\\\",\\\"FirstName\\\":\\\"Nikola\\\",\\\"LastName\\\":\\\"Nikolic-Smith\\\",\\\"SignupDate\\\":\\\"2026-08-07 16:25:00.8833333\\\"}\"}}"
}
Příklad zprávy JSON – odstranění
{
"specversion": "1.0",
"type": "com.microsoft.SQL.CES.DML.V1",
"source": "\/",
"id": "520f9a65-43d7-47f2-94f5-7ea14df635ed",
"logicalid": "1bf2756a-c15f-4d2e-a2d5-7d3f9dbf85b0:000000B1000009700008:00000000000000000001",
"time": "2026-08-07T16:35:42.450Z",
"datacontenttype": "application\/json",
"operation": "DEL",
"segmentindex": 0,
"finalsegment": true,
"data": "{\"eventsource\":{\"db\":\"EmployeesDb\",\"schema\":\"dbo\",\"tbl\":\"Employees\",\"cols\":[{\"name\":\"Id\",\"type\":\"int\",\"index\":0},{\"name\":\"FirstName\",\"type\":\"nvarchar(50)\",\"index\":1},{\"name\":\"LastName\",\"type\":\"nvarchar(50)\",\"index\":2},{\"name\":\"SignupDate\",\"type\":\"datetime2(7)\",\"index\":3}],\"pkkey\":[{\"columnname\":\"Id\",\"value\":\"8\"}],\"transaction\":{\"commitlsn\":\"000000B1:00000970:0008\",\"beginlsn\":\"000000B1:00000970:0003\",\"sequencenumber\":1,\"finalevent\":false,\"committime\":\"2026-08-07T16:35:42.450Z\"}},\"eventrow\":{\"old\":\"{\\\"Id\\\":\\\"8\\\",\\\"FirstName\\\":\\\"Nikola\\\",\\\"LastName\\\":\\\"Nikolic-Smith\\\",\\\"SignupDate\\\":\\\"2026-08-07 16:25:00.8833333\\\"}\",\"current\":\"{}\"}}"
}
Formát atributu dat
Atributem data je bajtové pole. Deserializujte bajty jako binární soubory JSON nebo Avro podle zvoleného formátu serializace. V obou formátech výsledný Data záznam následuje schéma atributu Avro s datovým atributem CES a obsahuje dva atributy:
eventsourceeventrow
{
"data": "{\"eventsource\": {}, \"eventrow\": {\"old\": \"{}\", \"current\": \"{}\"}}"
}
Následující sekce podrobněji vysvětlují deserializované atributy.
zdroj událostí
Popisuje metadata o databázi a tabulce, ve které došlo k události:
db- Datový typ: Řetězec
- Popis: Název databáze, ve které se nachází tabulka.
- Příklad:
EmployeesDb
schema- Datový typ: Řetězec
- Popis: Schéma databáze, které obsahuje tabulku.
- Příklad:
dbo
tbl- Datový typ: Řetězec
- Popis: Tabulka, ve které došlo k události.
- Příklad:
Employees
cols- Datový typ: Pole
- Popis: Pole s podrobnostmi o sloupcích v tabulce.
-
name(string): Název sloupku. -
type(string): SQL datový typ sloupce, včetně jeho délky, přesnosti nebo měřítka, pokud je to relevantní. Mezi příklady patříint,nvarchar(50)adatetime2(7). -
index(celé číslo): Index nebo pozice sloupce v tabulce.
-
pkkey- Datový typ: Pole
- Popis: Představuje sloupce primárního klíče a jejich hodnoty pro identifikaci konkrétního řádku.
-
columnname(string): Název sloupce použitý v primárním klíči. -
value(string): Hodnota sloupce použitého v primárním klíči. Tato hodnota pomáhá jednoznačně identifikovat řádek.
-
transaction- Typ dat: Objekt
- Popis: Popisuje SQL transakci, která obsahuje datovou operaci.
-
commitlsn(string): Sekvenční číslo záznamu commitu (LSN) transakce. -
beginlsn(string): Počáteční LSN transakce. -
sequencenumber(celé číslo): Sekvenční číslo datové operace v rámci transakce. Použijte tuto hodnotu k třídění událostí v rámci transakce. -
finalevent(boolean): Není v provozu. Toto pole má vždy hodnotufalse. -
committime(string): Datum a čas, kdy byla transakce provedena v databázi.
-
Poznámka:
Na SQL produktech nakonfigurovaných s časovým pásmem mimo UTC pole committime nesprávně obsahuje příponu Z , i když toto pole ukazuje místní čas publikující databáze. Když databáze používá UTC, hodnota a přípona se shodují. Tento problém je známý a oprava je připravena v budoucím vydání této funkce.
eventrow
Popisuje změny na úrovni řádků a porovnává staré a aktuální hodnoty polí v záznamu.
-
starý (objekt zabalený v řetězci): Představuje hodnoty v řádku před událostí.
- Každý pár klíč-hodnota se skládá z:
-
<column_name>: (řetězec): Název sloupce. -
<column_value>: (string/int/etc.): Předchozí hodnota pro daný sloupec.
-
- Každý pár klíč-hodnota se skládá z:
-
current (objekt zabalený v řetězci): Představuje aktualizované hodnoty v řádku za událostí.
- Podobně jako u starého objektu se každou dvojicí klíč-hodnota strukturovaná takto:
-
<column_name>(řetězec): Název sloupce. -
<column_value>(string/int/etc.): Nová nebo aktuální hodnota pro daný sloupec.
-
- Podobně jako u starého objektu se každou dvojicí klíč-hodnota strukturovaná takto:
CES CloudEvent Avro schéma
{
"type": "record",
"name": "ChangeEvent",
"fields": [
{
"name": "specversion",
"type": "string"
},
{
"name": "type",
"type": "string"
},
{
"name": "source",
"type": "string"
},
{
"name": "id",
"type": "string"
},
{
"name": "logicalid",
"type": "string"
},
{
"name": "time",
"type": "string"
},
{
"name": "datacontenttype",
"type": "string"
},
{
"name": "operation",
"type": "string"
},
{
"name": "segmentindex",
"type": "int"
},
{
"name": "finalsegment",
"type": "boolean"
},
{
"name": "data",
"type": "bytes"
}
]
}
Schéma atributu Avro v CES datovém atributu
Při deserializaci data bajtového pole v nativním JSON a Avro binárním CloudEvents použijte následující schéma:
{
"name": "Data",
"type": "record",
"fields": [
{
"name": "eventsource",
"type": {
"name": "EventSource",
"type": "record",
"fields": [
{
"name": "db",
"type": "string"
},
{
"name": "schema",
"type": "string"
},
{
"name": "tbl",
"type": "string"
},
{
"name": "cols",
"type": {
"type": "array",
"items": {
"name": "Column",
"type": "record",
"fields": [
{
"name": "name",
"type": "string"
},
{
"name": "type",
"type": "string"
},
{
"name": "index",
"type": "int"
}
]
}
}
},
{
"name": "pkkey",
"type": {
"type": "array",
"items": {
"name": "PkKey",
"type": "record",
"fields": [
{
"name": "columnname",
"type": "string"
},
{
"name": "value",
"type": "string"
}
]
}
}
},
{
"name": "transaction",
"type": {
"name": "Transaction",
"type": "record",
"fields": [
{
"name": "commitlsn",
"type": "string"
},
{
"name": "beginlsn",
"type": "string"
},
{
"name": "sequencenumber",
"type": "int"
},
{
"name": "finalevent",
"type": "boolean"
},
{
"name": "committime",
"type": "string"
}
]
}
}
]
}
},
{
"name": "eventrow",
"type": {
"name": "EventRow",
"type": "record",
"fields": [
{
"name": "old",
"type": "string"
},
{
"name": "current",
"type": "string"
}
]
}
}
]
}