diff options
author | ilnaz <ilnaz@ydb.tech> | 2023-04-11 10:13:29 +0300 |
---|---|---|
committer | ilnaz <ilnaz@ydb.tech> | 2023-04-11 10:13:29 +0300 |
commit | 975c50fadeade30acd3c68211922d25c45739d46 (patch) | |
tree | 02caac06aacf1770fe80a4e043354a3fd5e2a3f0 | |
parent | bb50955aaec9a79a01de9bf6a136e5b17d741560 (diff) | |
download | ydb-975c50fadeade30acd3c68211922d25c45739d46.tar.gz |
CDC initial scan
-rw-r--r-- | ydb/docs/ru/core/concepts/cdc.md | 19 | ||||
-rw-r--r-- | ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/alter_table.md | 11 |
2 files changed, 30 insertions, 0 deletions
diff --git a/ydb/docs/ru/core/concepts/cdc.md b/ydb/docs/ru/core/concepts/cdc.md index d1bcf5bcbc..f6b004ee12 100644 --- a/ydb/docs/ru/core/concepts/cdc.md +++ b/ydb/docs/ru/core/concepts/cdc.md @@ -34,6 +34,25 @@ Change Data Capture (CDC) обеспечивает захват изменени {% endnote %} +## Первоначальное сканирование таблицы {#initial-scan} + +По умолчанию в поток изменений выгружаются записи только о тех строках таблицы, которые изменились после создания потока. Первоначальное сканирование таблицы позволяет выгрузить в поток изменений значения всех строк, существовавших на момент его создания. + +Сканирование производится в фоновом режиме поверх снапшота таблицы. При этом возможны следующие ситуации: +* В таблице меняется значение непросканированной строки. В поток изменений последовательно будут выгружены: запись с исходным значением и запись об изменении. При повторном изменении этой же строки будет выгружена только запись об изменении. +* Во время сканирования обнаруживается измененная строка. В поток изменений ничего не выгружается, так как исходное значение уже было выгружено в момент изменения (см. предыдущий пункт). +* В таблице меняется значение просканированной строки. В поток изменений выгружается только запись об изменении. + +Таким образом, гарантируется, что для одной и той же строки (первичного ключа) сначала будет выгружено исходное значение, а затем — запись об изменении. + +{% note info %} + +Запись с исходным значением строки будет помечена как запись об [обновлении](#restrictions). При использовании [виртуальных меток времени](#virtual-timestamps) записи маркируются меткой времени снапшота. + +{% endnote %} + +В процессе сканирования, в зависимости от частоты обновления данных таблицы, возможен повышенный фон ошибок `OVERLOADED` из-за того, что, помимо записей об изменениях, необходимо доставить также записи с исходными значениями строк. По окончании сканирования поток изменений переходит в нормальный режим работы. + ## Структура записи {#record-structure} В зависимости от [параметров потока](../yql/reference/syntax/alter_table.md#changefeed-options) структура записи может отличаться. diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/alter_table.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/alter_table.md index 4f22107913..ff2796b19b 100644 --- a/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/alter_table.md +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/alter_table.md @@ -84,6 +84,7 @@ ALTER TABLE `series` RENAME INDEX `title_index` TO `title_index_new`; * `JSON` — структура записи приведена на странице [описания changefeed](../../../../concepts/cdc#record-structure). * `VIRTUAL_TIMESTAMPS` — включение-выключение [виртуальных меток времени](../../../../concepts/cdc#virtual-timestamps). По умолчанию выключено. * `RETENTION_PERIOD` — [время хранения записей](../../../../concepts/cdc#retention-period). Тип значения — `Interval`, значение по умолчанию — 24 часа (`Interval('PT24H')`). +* `INITIAL_SCAN` — включение-выключение [первоначального сканирования](../../../../concepts/cdc#initial-scan) таблицы. По умолчанию выключено. Приведенный ниже код добавит поток изменений с именем `updates_feed`, в который будут выгружаться значения изменившихся столбцов таблицы в формате JSON: @@ -114,6 +115,16 @@ ALTER TABLE `series` ADD CHANGEFEED `updates_feed` WITH ( ); ``` +Пример создания потока изменений с первоначальным сканированием: + +```sql +ALTER TABLE `series` ADD CHANGEFEED `updates_feed` WITH ( + FORMAT = 'JSON', + MODE = 'UPDATES', + INITIAL_SCAN = TRUE +); +``` + `DROP CHANGEFEED` — удаляет поток изменений с указанным именем. Приведенный ниже код удалит changefeed с именем `updates_feed`: ```sql |