Перейти к содержимому
Последнее обновление

Журнал изменений (Changelog)

Changelog представляет собой журнал изменений на уровне строк для внутренних таблиц Doris. После его включения каждое изменение строки при записи (вставка, обновление, удаление) сохраняется вместе со значениями до и после изменения и временной меткой фиксации транзакции. Он служит источником данных для Table Stream, инкрементальных запросов и инкрементального обслуживания материализованных представлений (IVM). Читать его также можно из Flink через Flink Doris Connector (Connector версии 26.4.0 или новее).

По умолчанию записи об изменениях хранятся один день. Задайте changelog.ttl_seconds так, чтобы срок хранения покрывал максимальную ожидаемую задержку чтения изменений; истечение срока хранения записей об изменениях не удаляет данные из базовой таблицы.

Changelog не зависит от binlog, используемого для межкластерной репликации (CCR): у него собственные свойства changelog.* и собственный переключатель включения. В одной таблице нельзя включить оба механизма. См. Binlog для CCR.

Экспериментальная функция

Эта функция доступна начиная с версии 5.0.0 и является экспериментальной. Для её работы необходимо задать enable_feature_changelog = true в конфигурации FE.

Переименование row binlog

В ранних сборках для разработки эта функция называлась «row binlog» и включалась с помощью "binlog.enable" = "true" и "binlog.format" = "ROW"; перед первым выпуском её переименовали в changelog. Таблицы, созданные таким способом в этих сборках, больше нельзя использовать: удалите их и создайте заново с "changelog.enable" = "true".

Предварительные требования​

  • Doris 5.0.0 или новее.
  • enable_feature_changelog = true в fe.conf на FE (параметр не является динамическим; требуется перезапуск FE). Он управляет таблицами с changelog, выделением временных меток фиксации транзакций (TSO) и чтением через Table Stream. enable_feature_binlog управляет только binlog для CCR и не требуется для changelog.
  • Для автоматической очистки также задайте enable_feature_changelog = true в be.conf на узлах BE (параметр не является динамическим; требуется перезапуск BE).
  • Таблица Duplicate Key или таблица Unique Key Merge-on-Write (MoW) без ключей кластеризации; см. Область поддержки и ограничения.
  • Changelog можно включить только при создании таблицы, поэтому оцените необходимость его использования заранее.

Основные понятия​

ПонятиеОписание
Запись об измененииПри каждой фиксации транзакции в базовой таблице для каждой изменённой строки создаётся одна запись, содержащая тип операции (вставка / обновление / удаление), значения после изменения и, при соответствующей настройке, значения до изменения (before image)
Временная метка фиксации транзакции (TSO)Глобально монотонная временная метка, получаемая от FE при фиксации транзакции записи. Состоит из физической части (миллисекунды) и логического счётчика. Все изменения одной транзакции имеют одинаковую TSO. Смещения Table Stream и временные окна @incr измеряются в TSO
LSNПорядковый номер записи об изменении внутри транзакции. Вместе с TSO определяет порядок записей об изменениях

Включение changelog​

Changelog можно включить только через свойства таблицы в CREATE TABLE; после этого отключить его нельзя:

CREATE TABLE orders (
order_id BIGINT,
status VARCHAR(16),
amount DECIMAL(10, 2)
)
UNIQUE KEY(order_id)
DISTRIBUTED BY HASH(order_id) BUCKETS 8
PROPERTIES (
"enable_unique_key_merge_on_write" = "true",
"changelog.enable" = "true",
"changelog.need_historical_value" = "true",
"changelog.ttl_seconds" = "86400"
);

Свойства binlog.* (binlog.enable, binlog.ttl_seconds и другие) настраивают binlog для CCR, а не changelog; см. Binlog для CCR.

Свойства​

СвойствоЗначенияПо умолчаниюМожно изменить после созданияОписание
changelog.enabletrue / falsefalseНетВключён ли changelog. Можно задать только в CREATE TABLE или унаследовать из настроек базы данных по умолчанию, см. Настройки базы данных по умолчанию
changelog.need_historical_valuetrue / falsefalseНетЗаписываются ли значения до изменения (before image). Требует включённого changelog. Значение true можно задать только для таблиц Unique Key MoW. Это свойство необходимо для Table Stream типов min_delta / detail, инкрементальных запросов MIN_DELTA и IVM, которым требуется обрабатывать обновления или удаления
changelog.ttl_secondsПоложительное целое число (секунды)86400 (один день)ДаСрок хранения записей об изменениях. Требует включённого changelog. Записи с истёкшим сроком хранения исключаются из инкрементального чтения и удаляются в ходе фоновых операций compaction; 0 и отрицательные значения не допускаются. См. Хранение и очистка

Изменение неизменяемых свойств​

changelog.enable и changelog.need_historical_value нельзя изменить у существующей таблицы, поэтому для неё нельзя ни включить, ни отключить changelog. Попытка такого изменения сразу завершается ошибкой:

ALTER TABLE orders SET ("changelog.enable" = "false");
-- ERROR: not support change changelog.enable from true to false

ALTER TABLE orders SET ("changelog.need_historical_value" = "false");
-- ERROR: not support change changelog.need_historical_value from true to false

ALTER TABLE t_without_changelog SET ("changelog.enable" = "true");
-- ERROR: not support change changelog.enable from false to true

Если у существующей таблицы нет changelog, создайте новую таблицу с включённым changelog, загрузите данные и атомарно поменяйте таблицы местами с помощью ALTER TABLE ... REPLACE WITH TABLE.

Просмотр свойств​

SHOW CREATE TABLE выводит свойства changelog.* таблицы с включённым changelog:

SHOW CREATE TABLE orders\G
...
"changelog.enable" = "true",
"changelog.ttl_seconds" = "86400",
"changelog.need_historical_value" = "true",
...

Настройки базы данных по умолчанию​

В базе данных можно включить changelog по умолчанию для создаваемых в ней таблиц:

CREATE DATABASE changelog_db PROPERTIES ("changelog.enable" = "true");

У таблиц, созданных после этого в changelog_db, changelog включён, если для них не задано "changelog.enable" = "false". Значения changelog.ttl_seconds и changelog.need_historical_value наследуются из базы данных, если таблица не задаёт собственные. Для таблицы, модель которой не поддерживает changelog, например Aggregate Key, в такой базе данных необходимо задать "changelog.enable" = "false". ALTER DATABASE ... SET PROPERTIES изменяет настройки по умолчанию только для таблиц, создаваемых после этого.

В базе данных, где changelog включён по умолчанию, SHOW CREATE TABLE для таблицы без changelog выводит "changelog.enable" = "false". Благодаря этому CREATE TABLE ... LIKE и команда, скопированная из этого вывода, также создают таблицу без changelog.

Область поддержки и ограничения​

Модели таблиц​

Модель таблицыПоддерживаетсяПримечания
Duplicate KeyДаЗаписываются только вставленные строки; changelog.need_historical_value = true отклоняется с ошибкой Duplicate table model don't support record historical value
Unique Key, Merge-on-WriteДаЗаписываются вставки, обновления и удаления; можно включить запись before image. Таблицы с ключами кластеризации не поддерживаются; попытка их создания завершается ошибкой Unique merge-on-write tables with cluster keys do not support changelog
Unique Key, Merge-on-ReadНетЗавершается ошибкой Only duplicate and mow table model support changelog
Aggregate KeyНетТо же, что и выше

Типы столбцов​

ОграничениеПримечания
Столбцы с автоинкрементомНе поддерживаются; отклоняются как в CREATE TABLE, так и в ADD COLUMN
Столбцы VARIANTНе поддерживаются; отклоняются как в CREATE TABLE, так и в ADD COLUMN

Режимы развёртывания​

Changelog можно включить как в режиме с совмещёнными хранением и вычислениями, так и в режиме с разделёнными хранением и вычислениями.

Способы записи​

Фиксируются изменения, создаваемые любым способом записи (INSERT, UPDATE, DELETE, Stream Load, Broker Load, Routine Load, коннекторы Flink / Spark и другие), включая частичные обновления столбцов и гибкие частичные обновления столбцов.

Временные таблицы​

У временных таблиц changelog отсутствует всегда. Параметр "changelog.enable" = "true" для временной таблицы вызывает ошибку Cannot create temporary table with changelog enable; временные таблицы также игнорируют настройку changelog по умолчанию своей базы данных.

Binlog для CCR​

Changelog и binlog, используемый для межкластерной репликации (CCR), нельзя совмещать:

  • Для таблицы нельзя одновременно задать "binlog.enable" = "true" и "changelog.enable" = "true". Свойства binlog.* таблицы с changelog изменять нельзя.
  • Таблицу с changelog нельзя создать или восстановить в базе данных, где включён binlog для CCR; в базе данных, содержащей таблицу с changelog, нельзя включить binlog для CCR.
  • В базе данных нельзя включить оба механизма одновременно.

Таблицы с changelog также не поддерживают резервное копирование и восстановление.

Модель записей об изменениях​

Типы операций и скрытые столбцы​

Каждая запись об изменении содержит все видимые столбцы базовой таблицы (значения после изменения) и следующие скрытые столбцы:

Скрытый столбецТипОписание
__DORIS_CHANGELOG_OP__BIGINTТип операции. В исходных записях, возвращаемых табличной функцией changelog(): 0 означает вставку, 1 обновление, 2 удаление. В инкрементальных запросах @incr обновление разбивается на две строки: 0 означает вставку, 1 удаление, 2 состояние до обновления, 3 состояние после обновления
__DORIS_CHANGELOG_TSO__BIGINTВременная метка фиксации транзакции
__DORIS_CHANGELOG_LSN__BIGINTПорядковый номер внутри транзакции
__DORIS_CHANGELOG_BEFORE_<column>__Как у исходного столбцаЗначение до изменения; по одному такому столбцу на каждый неключевой столбец. Присутствует только при changelog.need_historical_value = true

В самой базовой таблице появляется дополнительный скрытый столбец __DORIS_COMMIT_TSO_COL__, содержащий временную метку фиксации последней записи для каждой строки. Его можно запрашивать напрямую после выполнения SET show_hidden_columns = true:

SET show_hidden_columns = true;
SELECT order_id, status, __DORIS_COMMIT_TSO_COL__ FROM orders;

Таблицы Duplicate Key​

В таблицах Duplicate Key фиксируются только вставки. Каждая строка при каждой записи фиксируется как запись о вставке; строки с одинаковым ключом никогда не объединяются.

DELETE FROM ... WHERE ... в таблице Duplicate Key помечает строки предикатом удаления и не создаёт записей об изменениях; потребители данных, использующие Table Stream или @incr, не видят таких удалений. Если удаления должны передаваться потребителям, используйте таблицу Unique Key MoW.

Таблицы Unique Key MoW​

Операция записиЧто фиксируется
Запись с несуществующим ключомОдна запись о вставке
Запись с уже существующим ключом (INSERT с тем же ключом, UPDATE, частичное обновление столбцов)Одна запись об обновлении, содержащая полную строку после обновления; если включена запись before image, также сохраняются значения до обновления
Удаление существующего ключа (DELETE, загрузка с признаком удаления)Одна запись об удалении. Если включена запись before image, она содержит значения до удаления; в противном случае значения присутствуют только в ключевых столбцах
Повторная запись с тем же ключом после его удаленияОдна запись о вставке (предыдущая версия представляет собой маркер удаления, а не действующую строку)
Запись значения столбца последовательности, меньшего, чем у видимой строкиЗапись отбрасывается, запись об изменении не создаётся

По умолчанию DELETE в таблице MoW реализуется путём записи маркеров удаления, поэтому создаёт записи об удалении. Если свойство таблицы enable_mow_light_delete имеет значение true, DELETE вместо этого использует предикат удаления и, как и в таблицах Duplicate Key, не создаёт записей об изменениях. Для таблиц с changelog оставляйте у этого свойства значение по умолчанию false.

При частичном обновлении столбцов в журнал записывается полная строка после объединения, а не только обновлённые столбцы. При гибком частичном обновлении столбцов (unique_key_update_mode = UPDATE_FLEXIBLE_COLUMNS) удаление и последующая запись с тем же ключом в одном пакете фиксируются как одна запись об обновлении: before image содержит старую строку до удаления, а after image содержит новую строку, в которой неуказанные столбцы получают значения по умолчанию или NULL вместо старых значений.

Следующий пример показывает исходные записи об изменениях таблицы MoW с включённой записью before image:

INSERT INTO orders VALUES (1, 'created', 100.00);
INSERT INTO orders VALUES (1, 'paid', 100.00);
DELETE FROM orders WHERE order_id = 1;
INSERT INTO orders VALUES (1, 'created', 150.00);

SELECT __DORIS_CHANGELOG_OP__ AS op, order_id, status, amount,
__DORIS_CHANGELOG_BEFORE_status__ AS before_status,
__DORIS_CHANGELOG_BEFORE_amount__ AS before_amount
FROM changelog("table" = "orders")
ORDER BY __DORIS_CHANGELOG_TSO__, __DORIS_CHANGELOG_LSN__;
+------+----------+---------+--------+---------------+---------------+
| op | order_id | status | amount | before_status | before_amount |
+------+----------+---------+--------+---------------+---------------+
| 0 | 1 | created | 100.00 | NULL | NULL |
| 1 | 1 | paid | 100.00 | created | 100.00 |
| 2 | 1 | paid | 100.00 | paid | 100.00 |
| 0 | 1 | created | 150.00 | NULL | NULL |
+------+----------+---------+--------+---------------+---------------+

Ограничения DDL​

Для таблицы с включённым changelog разрешены только следующие операции ALTER TABLE:

Разрешённая операцияПримечания
ADD COLUMN / DROP COLUMNТолько в режиме облегчённого изменения схемы (light schema change): у таблицы должно быть включено свойство light_schema_change, что является настройкой по умолчанию; новые столбцы автоматически добавляются в записи об изменениях
CREATE INDEX / DROP INDEXТолько облегчённые изменения индексов
ADD ROLLUP / DROP ROLLUP / RENAME ROLLUP
Операции с разделами: ADD PARTITION, DROP PARTITION, MODIFY PARTITION, RENAME PARTITION, REPLACE PARTITION
RENAME для таблицы, REPLACE WITH TABLE
Изменение комментария к таблице или комментариев к столбцам
Изменение распределения по бакетам
Изменение свойств таблицыЗа исключением bloom_filter_columns / bloom_filter_fpp
ENABLE FEATURE (например, SEQUENCE_LOAD)Внутри системы преобразуется в ADD COLUMN

Другие операции отклоняются с ошибкой Not allowed to perform current operation on Table With changelog. В частности, это касается следующих операций:

  • MODIFY COLUMN (изменение типа, позиции столбца и т. п.)
  • RENAME COLUMN
  • ORDER BY (изменение порядка столбцов)
  • BUILD INDEX
  • Изменение свойств фильтра Блума

TRUNCATE TABLE работает с таблицами с changelog как обычно, но резервное копирование и восстановление таких таблиц не поддерживаются. Влияние изменений схемы и разделов базовой таблицы на существующие Table Stream описано в разделе Расширенные возможности Table Stream.

Хранение и очистка​

Начиная с Doris 5.0.0, changelog.ttl_seconds управляет сроком хранения changelog как в режиме с совмещёнными хранением и вычислениями, так и в режиме с разделёнными хранением и вычислениями. Срок хранения отсчитывается по физическому времени в TSO фиксации транзакции; опорным значением служит текущая TSO Master FE. Записи, время фиксации которых не позднее опорного времени за вычетом TTL, считаются просроченными. Окно хранения сдвигается, даже если в таблицу не поступают новые записи.

Настройка срока хранения​

TTL по умолчанию равен 86400 секунд (один день). Если в базе данных задано changelog.ttl_seconds, новые таблицы с changelog наследуют это значение, если оно не переопределено в свойствах таблицы. Изменение настройки базы данных не влияет на существующие таблицы. CREATE TABLE ... LIKE копирует TTL исходной таблицы.

Чтобы хранить изменения в созданной выше таблице orders в течение семи дней, выполните:

ALTER TABLE orders SET ("changelog.ttl_seconds" = "604800");

После успешного выполнения команды вывод SHOW CREATE TABLE orders содержит:

"changelog.ttl_seconds" = "604800"

TTL должен быть больше 0; ни 0, ни -1 не отключают истечение срока хранения. Уменьшение TTL может сразу сделать существующие записи просроченными. Увеличение TTL может снова сделать доступными для чтения записи, которые ещё физически присутствуют, но не позволяет восстановить уже удалённые при очистке записи. Если ALTER TABLE завершается ошибкой при передаче настройки разделам, уменьшенный TTL уже мог вступить в силу; проверьте SHOW CREATE TABLE и повторите ту же команду, чтобы завершить обновление.

Влияние на чтение​

При инкрементальном чтении окно хранения применяется на этапе планирования команды, ещё до завершения физической очистки. В рамках одной команды используется одна опорная TSO; для каждой новой команды окно вычисляется заново.

Способ чтенияПоведение, если запрошенное начало находится за пределами срока хранения
@incr без startTimestampЧитает только изменения в пределах срока хранения, в том числе в режиме MIN_DELTA
@incr с incrementType = MIN_DELTA и явно заданным startTimestampЗавершается ошибкой Changelog offset has expired according to changelog.ttl_seconds, чтобы не возвращать неполные итоговые изменения
@incr с incrementType = DETAIL или APPEND_ONLYСдвигает фактическое начало к первой TSO в пределах срока хранения и возвращает только сохранившуюся часть запрошенного окна
Table Stream с type = min_deltaЗавершается той же ошибкой, если смещение чтения какого-либо раздела вышло за пределы срока хранения
Table Stream с type = detail или append_onlyПропускает просроченные изменения и читает начиная с первой TSO в пределах срока хранения
Чтение снимков MoW (FOR TIME AS OF, FOR VERSION AS OF или @snapshot() для Stream)Если для восстановления снимка требуется changelog, чтение целевого снимка за пределами срока хранения завершается той же ошибкой, поскольку необходимые before image больше не входят в окно хранения
Табличная функция changelog()Не применяет фильтр TTL; она может показывать просроченные исходные записи, пока их не удалит физическая очистка

Истечение срока хранения не зависит от того, успели ли потребители прочитать изменения. Читайте изменения в пределах окна хранения, даже если IS_STALE / STALE_REASON всё ещё показывают, что Stream пригоден к использованию: в текущей реализации эти поля не сообщают об истечении TTL. Если срок хранения необходимых изменений уже истёк, заново постройте данные у потребителя на основе полного снимка. Для Table Stream используйте процедуру сброса, чтобы перезагрузить данные у потребителя и продвинуть смещения. Управляйте внутренними Stream механизма IVM через задачи обновления материализованных представлений.

Пример: срок хранения изменений истёк, а базовые данные сохранились​

Выполните этот пример в существующей базе данных с правами CREATE и LOAD, а для запросов также потребуется право SELECT:

CREATE TABLE changelog_ttl_demo (id INT, value INT)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES (
"replication_num" = "1",
"changelog.enable" = "true",
"changelog.ttl_seconds" = "30"
);

INSERT INTO changelog_ttl_demo VALUES (1, 10);

SELECT COUNT(*) AS change_count
FROM changelog_ttl_demo@incr("incrementType" = "DETAIL");

Сразу после вставки запрос возвращает:

+--------------+
| change_count |
+--------------+
| 1 |
+--------------+

Подождите больше 30 секунд, затем повторите инкрементальный запрос:

SELECT COUNT(*) AS change_count
FROM changelog_ttl_demo@incr("incrementType" = "DETAIL");
+--------------+
| change_count |
+--------------+
| 0 |
+--------------+

Строка в базовой таблице по-прежнему присутствует:

SELECT id, value FROM changelog_ttl_demo;
+------+-------+
| id | value |
+------+-------+
| 1 | 10 |
+------+-------+

Физическая очистка и планирование ёмкости хранилища​

Фоновые операции compaction освобождают место, занятое наборами Rowset changelog, в которых все записи просрочены, в том числе у таблиц без новых записей. Если Rowset также содержит записи, срок хранения которых ещё не истёк, он сохраняется до истечения срока хранения всех его записей. При очистке сохраняются данные базовой таблицы и непрерывность версий. Место в хранилище освобождается асинхронно, поэтому TTL не задаёт предельный срок удаления файлов или жёсткий лимит объёма хранения.

Для автоматической очистки необходимо задать enable_feature_changelog = true на узлах BE и включить автоматический compaction. Установка disable_auto_compaction = true в конфигурации BE или свойствах таблицы приостанавливает автоматическую очистку, но инкрементальное чтение по-прежнему отфильтровывает просроченные записи. После перезапуска BE очистка ожидает получения корректной опорной TSO из heartbeat Master FE.

Хранение changelog ограничивается только временем; ограничений по объёму или количеству записей нет. Резервируйте место в хранилище с учётом объёма записи, TTL и задержки очистки. В таблицах MoW с включённой записью before image каждое обновление сохраняет дополнительную копию старых значений. Задавайте TTL больше максимальной задержки чтения изменений, интервала обновления и ожидаемой продолжительности простоя, оставляя запас времени на восстановление.

Накладные расходы при записи​

При включённом changelog каждая запись дополнительно создаёт и сохраняет записи об изменениях; в таблицах MoW обновления и удаления также считывают старые значения для формирования before image. Пропускная способность загрузки заметно снижается; степень снижения зависит от схемы таблицы и доли обновлений. Рекомендации:

  • Включайте changelog только для таблиц, которым действительно требуется инкрементальное чтение.
  • Перед вводом в эксплуатацию оцените изменение пропускной способности на реалистичной нагрузке записи.
  • Не включайте changelog.need_historical_value, если значения до изменения не нужны (например, при чтении в режиме append_only или если важны только последние значения).

Диагностика с помощью табличной функции changelog()​

Табличная функция changelog() возвращает исходные записи об изменениях таблицы. Например, с её помощью можно проверить, создала ли операция записи ожидаемые изменения, или просмотреть историю изменений по определённому ключу.

предупреждение

changelog() предназначена главным образом для внутренней отладки и не рекомендуется для конвейеров обработки данных в рабочей среде. Формат вывода и параметры могут меняться от версии к версии; для инкрементального чтения в рабочих процессах используйте Table Stream или @incr.

SELECT __DORIS_CHANGELOG_OP__, __DORIS_CHANGELOG_TSO__, __DORIS_CHANGELOG_LSN__,
order_id, status, amount
FROM changelog(
"db" = "demo",
"table" = "orders",
"partition" = "p20260914"
)
WHERE order_id = 1
ORDER BY __DORIS_CHANGELOG_TSO__, __DORIS_CHANGELOG_LSN__;
ПараметрОбязательныйОписание
tableДаИмя таблицы
dbНетИмя базы данных; по умолчанию используется текущая база данных
partitionНетИмена разделов через запятую; по умолчанию используются все разделы
tabletНетИдентификаторы tablet через запятую; по умолчанию используются все tablet

changelog() читает сохранённые исходные записи без свёртки изменений и фильтрации по TTL, а столбец __DORIS_CHANGELOG_OP__ использует исходную кодировку (0 означает вставку, 1 обновление, 2 удаление). Просроченные записи могут оставаться видимыми здесь до завершения физической очистки. Для таблицы с changelog.need_historical_value = true запрос SELECT * к changelog() также возвращает столбцы before image, имена которых начинаются с зарезервированного префикса __DORIS_. Чтобы определить представление, таблицу CTAS или материализованное представление на основе changelog(), явно перечислите столбцы и задайте псевдонимы скрытым столбцам и столбцам before image. Полный синтаксис приведён в разделе Табличная функция CHANGELOG.

Распространённые ошибки​

Сообщение об ошибкеПричинаДействие
Property binlog.format is no longer supported, use "changelog.enable" = "true" to enable changelog, or remove it for CCR binlogВ команде используется binlog.format, с помощью которого changelog включали в ранних сборках для разработкиВключите changelog с помощью "changelog.enable" = "true"; для binlog CCR удалите это свойство
Property binlog.need_historical_value is no longer supported, use changelog.need_historical_value insteadВ команде используется имя свойства из ранних сборок для разработкиИспользуйте changelog.need_historical_value
Table <db>.<table> was created with "binlog.format" = "ROW", which is no longer supported; drop the table and create it again with "changelog.enable" = "true"Таблица создана в ранней сборке для разработкиУдалите таблицу, затем создайте её заново с "changelog.enable" = "true"
Cannot create table <table> with changelog when enable_feature_changelog=falseChangelog не включён на FEЗадайте enable_feature_changelog = true в fe.conf и перезапустите FE
changelog.ttl_seconds must be greater than 0TTL равен 0 или отрицателенЗадайте положительное целое число секунд; значение по умолчанию равно 86400
Changelog offset has expired according to changelog.ttl_secondsНачальная точка MIN_DELTA или снимок MoW находится за пределами окна храненияЗаново постройте данные у потребителя на основе полного снимка и согласуйте позицию чтения; см. Влияние на чтение
not support change changelog.enable from false to trueДля включения changelog у существующей таблицы использована команда ALTER TABLEChangelog можно включить только при создании таблицы. Создайте новую таблицу с включённым changelog, загрузите данные и поменяйте таблицы местами с помощью ALTER TABLE ... REPLACE WITH TABLE
not support change changelog.enable from true to falseУ таблицы с включённым changelog задано changelog.enable = falseПосле включения changelog отключить его нельзя
not support change changelog.need_historical_value from true to falseИзменено changelog.need_historical_valueЭто свойство нельзя изменить после создания таблицы
Property <property> requires "changelog.enable" = "true"Свойство changelog.ttl_seconds или changelog.need_historical_value задано в CREATE TABLE для таблицы, у которой не включён changelogВключите changelog для таблицы или удалите это свойство
changelog.ttl_seconds can not be set because changelog is not enabled for table: <table>Через ALTER TABLE задано changelog.ttl_seconds для таблицы без changelogСрок хранения changelog можно задать только для таблицы с changelog
Duplicate table model don't support record historical valueДля таблицы Duplicate Key задано changelog.need_historical_value = trueУ таблиц Duplicate Key нет before image; удалите это свойство или используйте таблицу Unique Key MoW, если нужны значения до изменения
Unique merge-on-write tables with cluster keys do not support changelogУ таблицы MoW есть ключи кластеризацииСоздайте таблицу без ключей кластеризации
Only duplicate and mow table model support changelogМодель таблицы: Aggregate Key или Unique Key Merge-on-ReadИспользуйте таблицу Duplicate Key или Unique Key MoW. В базе данных, где changelog включён по умолчанию, задайте для такой таблицы "changelog.enable" = "false"
Table <table> can not enable both binlog and changelogВ CREATE TABLE для обоих свойств, binlog.enable и changelog.enable, задано значение trueВыберите один механизм; см. Binlog для CCR
Can not create table <table> with changelog in database <db> because the database enables binlogВ базе данных включён binlog для CCRСоздайте таблицу в базе данных без binlog для CCR
Cannot create temporary table with changelog enableДля временной таблицы задано "changelog.enable" = "true"Временные таблицы не могут иметь changelog
Not allowed to perform current operation on Table With changelogВыполнена запрещённая операция DDL, например MODIFY COLUMN, RENAME COLUMN, ORDER BY, BUILD INDEX или изменение свойств фильтра БлумаСм. список разрешённых операций в разделе Ограничения DDL