Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL Database a Microsoft Fabricben
Ez a cikk leírja a CloudEvents üzenetformátumot, amely az Azure Event Hubs-ba vagy a Fabric Eventstream-be áramlik, amikor az SQL Server 2025 (17.x), Azure SQL Database, Azure SQL Managed Instance verziókban a Change Event Streaming (CES) funkciót használjuk, és SQL adatbázis a Microsoft Fabric-ben.
Megjegyzés:
A Change event streaming jelenleg előnézetben van, és a termékek támogatásában eltérések vannak. Az előzetes verzióban ez a funkció változhat.
Áttekintés
A Change event streaming olyan eseményeket bocsát ki, amelyek követik a CloudEvents specifikációt, így könnyen integrálható őket eseményvezérelt rendszerekkel. Minden CES CloudEvents 11 attribútumot (mezőket) tartalmaz. Konfigurálhatod a CES-t, hogy az egész CloudEventet, beleértve az attribútumot data is, serializálja natív JSON vagy Avro bináris formátumban. A natív JSON események nem tartalmaznak Avro bináris szakaszokat. Mindkét serializációs formátumban az data attribútumnak bájt-tömb típusa van. A bájtok JSON vagy Avro bináris kódolást használnak a kiválasztott serializációs formátum szerint, és követik a CES adatattribútumot Avro séma.
Important
2026. augusztus 15-től az AMQP protokoll elavult a változás eseményfolyam (CES) esetén. Platformonként vannak különbségek. A migrációs lépések és idővonalak számára lásd: AMQP protokoll elavultsága.
Kapcsolódó specifikációk és erőforrások
Ha alkalmazható, a leírások ebben a részben a CloudEvent specifikációból származnak, amely további részleteket tartalmaz.
Tulajdonságok
specversion:- Adattípus: Sztring
- Kötelező CloudEvent attribútum
- Az esemény által használt CloudEvents-specifikáció verziója. Ez a változat lehetővé teszi a kontextus értelmezését.
type- Adattípus: Sztring
- Kötelező CloudEvent attribútum
- Olyan értéket tartalmaz, amely a kiinduló eseményhez kapcsolódó esemény típusát írja le. Ennek az értéknek a formátumát a gyártó határozza meg, és tartalmazhat olyan információkat, mint a típus verziója. További információért lásd: A CloudEvents verziózása.
- A change event streaming események esetében a típus jelenleg :
com.microsoft.SQL.CES.DML.V{n}, ahol{n}a Microsoft change event streaming DML eseménysémájának változatát jelöli.- A jelenlegi legújabb séma verzió 1.
source- Adattípus: Sztring
- Kötelező CloudEvent attribútum
- Azonosítja azt a környezetet, amelyben egy esemény történt. A forrás és az ID kombinációjának egyedinek kell lennie minden eseménynél. Jelenleg ez a mező mindig az
\/SQL-ből streamelt események formájában kerül elküldésre.
id- Adattípus: Sztring
- Kötelező CloudEvent attribútum
- Azonosítja az eseményt. A producereknek biztosítaniuk kell, hogy a forrás és az ID kombinációja egyedi legyen minden egyes eseménynél. Ha egy ismétlődő esemény újraküldésre kerül (például hálózati hiba miatt), akkor ugyanaz az azonosító lehet. A fogyasztók feltételezhetik, hogy az azonos forrással és azonosítóval rendelkező események duplikáltak.
logicalid- Adattípus: Sztring
- Bővítményattribútum
- A megosztott logikai azonosítók azonosítják a megosztott üzeneteket (az Event Hubs üzenetméret-korlátozásai miatt).
time- Adattípus: Időbélyeg
- Választható CloudEvent attribútum
- UTC időbélyeg, amely azt mutatja, hogy a commit egy SQL tranzakción belül történt, amely eredetileg streamelt eseményt indít el.
datacontenttype- Adattípus: Sztring
- Választható CloudEvent attribútum
- Adatérték tartalomtípusa. Ez az attribútum lehetővé teszi, hogy az adatok bármilyen típusú tartalmat hordozzák, így a formátum és a kódolás eltérhet a választott eseményformátumtól. A JSON-borítékformátummal renderelt események például xml hasznos adatokat tartalmazhatnak az adatokban, és a fogyasztót ez az attribútum "application/xml" értékre állítja. Az adattartalom megjelenítésének szabályai
datacontenttypekülönböző értékekhez az eseményformátum specifikációiban vannak meghatározva.
operation- Adattípus: Sztring
- Bővítményattribútum
- A végrehajtott SQL művelet típusát képviseli:
- INS betétekhez
- FRISSÍTÉS a frissítésekért
- DEL a törléshez
segmentindex- Adattípus: Egész szám
- Bővítményattribútum
- Szegmens index, amely az üzenet helyzetét jelzi a logikai üzenet blokkjain belül. A szegmensindex információt nyújt arról, hogy az üzenet hol található logikai üzenettöredékek sorozatában. Ez a mező mindig jelen van. Használd
logicalid,segmentindex, ésfinalsegmentmezőket a bejövő események rendezéséhez, amelyek egy nagy SQL hasznos terhelést képviselnek, a konfiguráltmax_message_size_kbérték szerint.
finalsegment- Adattípus: Logikai
- Bővítményattribútum
- Jelzi, hogy ez a szegmens a sorozat utolsó szegmense. Ez a mező mindig jelen van, és segít azonosítani, hogy egy SQL esemény a konfigurált
max_message_size_kbérték szerint aleseményekre lett-e osztva.
data- Adattípus: Byte array
- Választható CloudEvent attribútum
- Tartalmazza a változást leíró domainspecifikus eseményadatokat. Deserializáljuk a bájtokat JSON vagy Avro binárisként a kiválasztott serializációs formátum szerint. A deserializált adatok a CES adatattribútum, az Avro séma követését követik. A mezőiről információért lásd: Data attribútumformátum.
Megjegyzés:
Az üzenetfelosztás különálló az oszlop-érték levágástól. Mielőtt a CES sorozatosítaná az data attribútumot, minden 1 MB-nál nagyobb streamelt oszlopértéket 1 MB-ra rövidít. A CES ezután a létrehozott eseményt üzenet részekre osztja, ahogy szükséges, az alapján.max_message_size_kb
Példák
Példa JSON-üzenetre – beszúrás
{
"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\\\"}\"}}"
}
JSON üzenet példa – frissítés
{
"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élda JSON-üzenetre – törlés
{
"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\":\"{}\"}}"
}
Adatattribútum formátuma
Az data attribútum egy bájttömb. Deserializáljuk a bájtokat JSON vagy Avro binárisként a kiválasztott serializációs formátum szerint. Mindkét formátumban a kapott Data rekord a CES adatattribútum, Avro sémát követi, és két attribútumot tartalmaz:
eventsourceeventrow
{
"data": "{\"eventsource\": {}, \"eventrow\": {\"old\": \"{}\", \"current\": \"{}\"}}"
}
A következő részek részletesebben magyarázzák el a deserializált attribútumokat.
eventsource
Az adatbázis metaadatait és azt a táblát ismerteti, amelyben az esemény történt:
db- Adattípus: Sztring
- Leírás: Annak az adatbázisnak a neve, amelyben a tábla található.
- Példa:
EmployeesDb
schema- Adattípus: Sztring
- Leírás: A táblát tartalmazó adatbázisséma.
- Példa:
dbo
tbl- Adattípus: Sztring
- Leírás: Az a tábla, amelyben az esemény történt.
- Példa:
Employees
cols- Adattípus: Tömb
- Leírás: A táblázat oszlopait részletező tömb.
-
name(string): Az oszlop neve. -
type(string): Az oszlop SQL adattípusa, beleértve annak hosszát, pontosságát vagy méretarányát, ha alkalmazható. Ilyenek például a következők:int,nvarchar(50)ésdatetime2(7). -
index(egész szám): Az oszlop indexe vagy pozíciója a táblázatban.
-
pkkey- Adattípus: Tömb
- Leírás: Az elsődleges kulcsoszlopokat és azok értékeit jelöli az adott sor azonosításához.
-
columnname(string): Az elsődleges kulcsban használt oszlop neve. -
value(string): Az oszlop értéke, amelyet a fő kulcs használ. Ez az érték segít egyedien azonosítani a sort.
-
transaction- Adattípus: Objektum
- Leírás: Az adatműveletet tartalmazó SQL tranzakciót írja le.
-
commitlsn(string): A tranzakció commit log sorozatszáma (LSN). -
beginlsn(string): Az ügylet kezdeti LSN-je. -
sequencenumber(egész szám): Az adatművelet sorozatszáma a tranzakción belül. Ezt az értéket használd az események rendezésére egy tranzakción belül. -
finalevent(boolean): Nem használatban van. Ennek a mezőnek mindig értéke .false -
committime(string): Az a dátum és időpont, amikor a tranzakciót elkötelezték az adatbázisban.
-
Megjegyzés:
Az SQL termékeken, amelyek nem UTC időzónával vannak konfigurálva, a committime mező tévesen tartalmaz egy Z toldalad, pedig ez a mező a publikációs adatbázis helyi idejét mutatja. Amikor az adatbázis UTC-t használ, az érték és a zártagot megegyezik. Ez a probléma ismert, és javítás vár a funkció jövőbeli kiadásában.
eventrow
A sorszintű változásokat ismerteti, és összehasonlítja a rekord mezőinek régi és aktuális értékeit.
-
régi (sztringbe burkolt objektum): Az esemény előtti sor értékeit jelöli.
- Minden kulcs-érték pár a következőkből áll:
-
<column_name>: (karakterlánc): Az oszlop neve. -
<column_value>: (sztring/int/etc.): Az oszlop előző értéke.
-
- Minden kulcs-érték pár a következőkből áll:
-
current (sztringbe burkolt objektum): Az esemény utáni sor frissített értékeit jelöli.
- A régi objektumhoz hasonlóan az egyes kulcs-érték párok a következőképpen épülnek fel:
-
<column_name>(karakterlánc): Az oszlop neve. -
<column_value>(sztring/int/etc.): Az oszlop új vagy aktuális értéke.
-
- A régi objektumhoz hasonlóan az egyes kulcs-érték párok a következőképpen épülnek fel:
CES CloudEvent Avro sé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"
}
]
}
CES adatattribútumok Avro séma
Használd a következő sémát a bájttömbnek deserializálása data során a natív JSON és Avro bináris CloudEvents programban:
{
"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"
}
]
}
}
]
}