Skip to content

Commit 3c55951

Browse files
authored
DEBEZIUM_JSON (#7052)
1 parent 353884a commit 3c55951

File tree

4 files changed

+44
-66
lines changed

4 files changed

+44
-66
lines changed

ydb/docs/en/core/concepts/cdc.md

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ A [JSON](https://en.wikipedia.org/wiki/JSON) record has the following structure:
7878
* `erase`: Erase flag. Present if a record matches the erase operation.
7979
* `newImage`: Row snapshot that results from its being changed. Present in `NEW_IMAGE` and `NEW_AND_OLD_IMAGES` modes. Contains column names and values.
8080
* `oldImage`: Row snapshot before the change. Present in `OLD_IMAGE` and `NEW_AND_OLD_IMAGES` modes. Contains column names and values.
81-
* `ts`: Virtual timestamp. Present if the `VIRTUAL_TIMESTAMPS` setting is enabled. Contains the value of the global coordinator time (`step`) and the unique transaction ID (`txId`).
81+
* `ts`: [Virtual timestamp](#virtual-timestamps). Present if the `VIRTUAL_TIMESTAMPS` setting is enabled. Contains the value of the global coordinator time (`step`) and the unique transaction ID (`txId`).
8282

8383
> Sample record of an update in `UPDATES` mode:
8484
>
@@ -155,63 +155,52 @@ The record structure is the same as for [Amazon DynamoDB Streams](https://docs.a
155155
156156
{% endif %}
157157
158-
{% if audience == "tech" %}
159-
160158
### Debezium-compatible JSON format {#debezium-json-record-structure}
161159
162160
A [Debezium](https://debezium.io)-compatible JSON record structure has the following format:
163161
164-
Message body
165162
```json
166163
{
167164
"payload": {
168165
"op": <op>,
169166
"before": {<columns>},
170167
"after": {<columns>},
171-
"ts": [<step>, <txId>],
172168
"source": {
173-
"version": <version>,
174169
"connector": <connector>,
170+
"version": <version>,
175171
"ts_ms": <ts_ms>,
176-
"txId": <txId>
172+
"step": <step>,
173+
"txId": <txId>,
174+
"snapshot": <bool>
177175
}
178176
}
179177
}
180178
```
181179
182180
* `op`: Operation that was performed on a row:
183-
* "u" means Update.
184-
* "s" means reSet (to not confuse with Read).
185-
* "d" means Delete.
186-
* `before`: Row snapshot before the change. Present in `OLD_IMAGE` and `NEW_AND_OLD_IMAGES` modes. Contains column names and values. Present only if the row existed before the change.
187-
* `after`: Row snapshot after the change. Present in `NEW_IMAGE` and `NEW_AND_OLD_IMAGES` modes. Contains column names and values. Present only if the row exists after the change.
188-
* `ts`: Virtual timestamp. Present if the `VIRTUAL_TIMESTAMPS` setting is enabled. Contains the value of the global coordinator time (`step`) and the unique transaction ID (`txId`). Note that Debezium connectors usually use a single integer `ts_ms` instead.
181+
* `c` — create. Applicable only in `NEW_AND_OLD_IMAGES` mode.
182+
* `u` — update.
183+
* `d` — delete.
184+
* `r` — read from [snapshot](#initial-scan).
185+
* `before`: Row snapshot before the change. Present in `OLD_IMAGE` and `NEW_AND_OLD_IMAGES` modes. Contains column names and values.
186+
* `after`: Row snapshot after the change. Present in `NEW_IMAGE` and `NEW_AND_OLD_IMAGES` modes. Contains column names and values.
189187
* `source`: Source metadata for the event.
190-
* `version`: Connector version that was used to generate the record. Current version is `0.0.1`.
191-
* `connector`: Connector name. Current name is `ydb_debezium_json`.
188+
* `connector`: Connector name. Current name is `ydb`.
189+
* `version`: Connector version that was used to generate the record. Current version is `1.0.0`.
192190
* `ts_ms`: Approximate time when the change was applied, in milliseconds.
193-
* `txId`: Unique transaction ID.
191+
* `step`: Global coordinator time. Part of the [virtual timestamp](#virtual-timestamps).
192+
* `txId`: Unique transaction ID. Part of the [virtual timestamp](#virtual-timestamps).
193+
* `snapshot`: Whether the event is part of a snapshot.
194194

195-
{% note warning %}
196-
197-
Currently debezium json format doesn't have `schema` field. Other Debezium connectors have it.
195+
When reading using Kafka API, the Debezium-compatible primary key of the modified row is specified as the message key:
198196

199-
{% endnote %}
200-
201-
If you use kafka API to read a topic, you will see debezium-compatible kafka key as well, in the following format:
202197
```json
203198
{
204-
"payload": {
205-
<columns>
206-
}
199+
"payload": {<columns>}
207200
}
208201
```
209202

210-
* `payload`: Key of a row that was changed. Always present.
211-
212-
You can read more in kafka integration documentation about details on how it is stored and how to access it directly.
213-
214-
{% endif %}
203+
* `payload`: Key of a row that was changed. Contains names and values of the columns that are components of the primary key.
215204

216205
## Record retention period {#retention-period}
217206

ydb/docs/en/core/yql/reference/yql-core/syntax/_includes/alter_table.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,9 @@ ALTER TABLE `series` RENAME INDEX `title_index` TO `title_index_new`;
140140
* `NEW_AND_OLD_IMAGES`: A combination of `NEW_IMAGE` and `OLD_IMAGE` modes. Any column values _prior to_ and _resulting from_ updates are written.
141141
* `FORMAT`: Data write format.
142142
* `JSON`: Write data in [JSON](../../../../concepts/cdc.md#json-record-structure) format.
143+
* `DEBEZIUM_JSON`: Write data in the [Debezium-like JSON format](../../../../concepts/cdc.md#debezium-json-record-structure).
143144
{% if audience == "tech" %}
144145
* `DYNAMODB_STREAMS_JSON`: Write data in the [JSON format compatible with Amazon DynamoDB Streams](../../../../concepts/cdc.md#dynamodb-streams-json-record-structure).
145-
* `DEBEZIUM_JSON`: Write data in the [Debezium-like JSON format](../../../../concepts/cdc.md#debezium-json-record-structure).
146146
{% endif %}
147147
* `VIRTUAL_TIMESTAMPS`: Enabling/disabling [virtual timestamps](../../../../concepts/cdc.md#virtual-timestamps). Disabled by default.
148148
* `RETENTION_PERIOD`: [Record retention period](../../../../concepts/cdc.md#retention-period). The value type is `Interval` and the default value is 24 hours (`Interval('PT24H')`).

ydb/docs/ru/core/concepts/cdc.md

Lines changed: 23 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ Change Data Capture (CDC) обеспечивает захват изменени
7878
* `erase` — признак удаления. Присутствует, если запись соответствует операции удаления.
7979
* `newImage` — снимок состояния строки, получившегося в результате изменения. Присутствует в режимах `NEW_IMAGE` и `NEW_AND_OLD_IMAGES`. Содержит названия и значения столбцов.
8080
* `oldImage` — снимок состояния строки, предшествовавшего изменению. Присутствует в режимах `OLD_IMAGE` и `NEW_AND_OLD_IMAGES`. Содержит названия и значения столбцов.
81-
* `ts` — виртуальная метка времени. Присутствует, если включена настройка `VIRTUAL_TIMESTAMPS`. Содержит значение глобального времени координатора (`step`) и уникальный идентификатор транзакции (`txId`).
81+
* `ts`[виртуальная метка времени](#virtual-timestamps). Присутствует, если включена настройка `VIRTUAL_TIMESTAMPS`. Содержит значение глобального времени координатора (`step`) и уникальный идентификатор транзакции (`txId`).
8282

8383
>Например, запись об обновлении в режиме `UPDATES`:
8484
>
@@ -155,63 +155,52 @@ Change Data Capture (CDC) обеспечивает захват изменени
155155
156156
{% endif %}
157157
158-
{% if audience == "tech" %}
159-
160158
### JSON-формат, совместимый с Debezium {#debezium-json-record-structure}
161159
162160
Запись в формате [JSON](https://en.wikipedia.org/wiki/JSON), совместимого с [Debezium](https://debezium.io), имеет следующую структуру:
163161
164-
Тело сообщения:
165162
```json
166163
{
167164
"payload": {
168165
"op": <op>,
169166
"before": {<columns>},
170167
"after": {<columns>},
171-
"ts": [<step>, <txId>],
172168
"source": {
173-
"version": <version>,
174169
"connector": <connector>,
170+
"version": <version>,
175171
"ts_ms": <ts_ms>,
176-
"txId": <txId>
172+
"step": <step>,
173+
"txId": <txId>,
174+
"snapshot": <bool>
177175
}
178176
}
179177
}
180178
```
181179
182-
* `op`: операция, которая была произведена над строкой в таблице:
183-
* "u" обозначает обновление.
184-
* "s" обозначает сброс (reSet).
185-
* "d" обозначает удаление.
186-
* `before`: снимок состояния строки до изменения. Присутствует в режимах `OLD_IMAGE` и `NEW_AND_OLD_IMAGES`. Содержит названия и значения столбцов. Присутствует только если строка существовала до изменения.
187-
* `after`: снимок состояния строки после изменения. Присутствует в режимах `NEW_IMAGE` и `NEW_AND_OLD_IMAGES`. Содержит названия и значения столбцов. Присутствует только если строка существует после изменения.
188-
* `ts`: виртуальная метка времени. Присутствует, если включена настройка `VIRTUAL_TIMESTAMPS`. Содержит значение глобального времени координатора (`step`) и уникальный идентификатор транзакции (`txId`). Обратите внимание, что Debezium коннекторы обычно используют число `ts_ms`.
189-
* `source`: метаданные записи.
190-
* `version`: версия коннектора, используемая для генерации записи. Текущая версия: `0.0.1`.
191-
* `connector`: название коннектора. Текущее название: `ydb_debezium_json`.
192-
* `ts_ms`: примерное время применения изменения в YDB, в миллисекундах.
193-
* `txId`: уникальный идентификатор транзакции.
194-
195-
{% note warning %}
196-
197-
Пока Debezium JSON формат не поддерживает `schema` в сообщении. Другие Debezium коннекторы это поддерживают.
180+
* `op` операция, которая была произведена над строкой в таблице:
181+
* `c` — вставка. Допустимо только в режиме `NEW_AND_OLD_IMAGES`.
182+
* `u` — обновление.
183+
* `d` удаление.
184+
* `r` — чтение из [снапшота](#initial-scan).
185+
* `before`снимок состояния строки, предшествовавшего изменению. Присутствует в режимах `OLD_IMAGE` и `NEW_AND_OLD_IMAGES`. Содержит названия и значения столбцов.
186+
* `after` — снимок состояния строки, получившегося в результате изменения. Присутствует в режимах `NEW_IMAGE` и `NEW_AND_OLD_IMAGES`. Содержит названия и значения столбцов.
187+
* `source` метаданные записи.
188+
* `connector` — название коннектора. Текущее название: `ydb`.
189+
* `version` — версия коннектора, используемая для генерации записи. Текущая версия: `1.0.0`.
190+
* `ts_ms`примерное время применения изменения в {{ ydb-short-name }}, в миллисекундах.
191+
* `step` — глобальное время координатора. Компонент [виртуальных меток времени](#virtual-timestamps).
192+
* `txId` — уникальный идентификатор транзакции. Компонент [виртуальных меток времени](#virtual-timestamps).
193+
* `snapshot` — признак чтения из снапшота.
194+
195+
При чтении с использованием [Kafka API](../reference/kafka-api/index.md) в качестве ключа сообщения указывается Debezium-совместимый первичный ключ измененной строки:
198196

199-
{% endnote %}
200-
201-
При использовании kafka API для чтения топика, вы увидите Debezium-совместимый kafka ключ в следующем формате:
202197
```json
203198
{
204-
"payload": {
205-
<columns>
206-
}
199+
"payload": {<columns>}
207200
}
208201
```
209202

210-
* `payload`: Первичный ключ строки, которая была изменена
211-
212-
Информацию о том, как это сохранено в сообщении, и как можно получить информацию о ключе без использования kafka API, читайте в [документации об интеграции с kafka](../reference/kafka-api/index.md)
213-
214-
{% endif %}
203+
* `payload` — первичный ключ строки, которая была изменена. Содержит названия и значения столбцов, являющихся компонентами первичного ключа.
215204

216205
## Время хранения записей {#retention-period}
217206

ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/alter_table.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,9 @@ ALTER TABLE `series` RENAME INDEX `title_index` TO `title_index_new`;
140140
* `NEW_AND_OLD_IMAGES` - комбинация режимов `NEW_IMAGE` и `OLD_IMAGE`. Будут записаны значения всех столбцов _до_ и _в результате_ изменения.
141141
* `FORMAT` — формат данных, в котором будут записаны данные.
142142
* `JSON` — записывать данные в формате {% if oss == "true" %}[JSON](../../../../concepts/cdc.md#json-record-structure){% else %}JSON{% endif %}.
143+
* `DEBEZIUM_JSON` — записывать данные в {% if oss == "true" %}[JSON-формате, аналогичном Debezium формату](../../../../concepts/cdc.md#debezium-json-record-structure){% else %}JSON-формате, аналогичном Debezium формату{% endif %}.
143144
{% if audience == "tech" %}
144145
* `DYNAMODB_STREAMS_JSON` — записывать данные в {% if oss == "true" %}[JSON-формате, совместимом с Amazon DynamoDB Streams](../../../../concepts/cdc#dynamodb-streams-json-record-structure){% else %}JSON-формате, совместимом с Amazon DynamoDB Streams{% endif %}.
145-
* `DEBEZIUM_JSON` — записывать данные в {% if oss == "true" %}[JSON-формате, аналогичном Debezium формату](../../../../concepts/cdc.md#debezium-json-record-structure){% else %}JSON-формате, аналогичном Debezium формату{% endif %}.
146146
{% endif %}
147147
* `VIRTUAL_TIMESTAMPS` — включение-выключение {% if oss == "true" %}[виртуальных меток времени](../../../../concepts/cdc.md#virtual-timestamps){% else %}виртуальных меток времени{% endif %}. По умолчанию выключено.
148148
* `RETENTION_PERIOD` — {% if oss == "true" %}[время хранения записей](../../../../concepts/cdc.md#retention-period){% else %}время хранения записей{% endif %}. Тип значения — `Interval`, значение по умолчанию — 24 часа (`Interval('PT24H')`).

0 commit comments

Comments
 (0)