aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorilnaz <ilnaz@ydb.tech>2023-04-11 10:13:29 +0300
committerilnaz <ilnaz@ydb.tech>2023-04-11 10:13:29 +0300
commit975c50fadeade30acd3c68211922d25c45739d46 (patch)
tree02caac06aacf1770fe80a4e043354a3fd5e2a3f0
parentbb50955aaec9a79a01de9bf6a136e5b17d741560 (diff)
downloadydb-975c50fadeade30acd3c68211922d25c45739d46.tar.gz
CDC initial scan
-rw-r--r--ydb/docs/ru/core/concepts/cdc.md19
-rw-r--r--ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/alter_table.md11
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