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

CHANGELOG

Описание​

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

Функция читает сохранённые исходные записи без свёртки и фильтрации.

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

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

Эта возможность доступна начиная с версии 5.0.0 и является экспериментальной. В более ранних сборках для разработки эта функция называлась binlog().

Синтаксис​

CHANGELOG(
"table" = "<table_name>"
[, "db" = "<db_name>"]
[, "partition" = "<partition_name>[, ...]"]
[, "tablet" = "<tablet_id>[, ...]"]
)

Обязательные параметры​

ПолеОписание
<table_name>Имя таблицы. Таблица должна быть внутренней, с включённым changelog ("changelog.enable" = "true")

Необязательные параметры​

ПолеОписание
<db_name>Имя базы данных; по умолчанию используется текущая база данных
<partition_name>Читать только указанные разделы, перечисленные через запятую; по умолчанию читаются все разделы
<tablet_id>Читать только указанные tablet, перечисленные через запятую; по умолчанию читаются все tablet

Возвращаемое значение​

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

SELECT * возвращает видимые столбцы базовой таблицы и, если включён changelog.need_historical_value, столбцы __DORIS_CHANGELOG_BEFORE_<column>__; остальные скрытые столбцы нужно перечислить явно. Имена всех скрытых столбцов и столбцов со значениями до изменения начинаются с зарезервированного префикса __DORIS_. Представления, таблицы, создаваемые с помощью CTAS, и материализованные представления не могут использовать такие имена столбцов. Чтобы создать один из этих объектов на основе changelog(), перечислите столбцы и задайте псевдонимы для столбцов с этим префиксом.

Примеры​

Вывести полную историю изменений заказа с идентификатором 1 в demo.orders:

SELECT __DORIS_CHANGELOG_OP__ AS op, __DORIS_CHANGELOG_TSO__ AS tso,
order_id, status, amount,
__DORIS_CHANGELOG_BEFORE_status__ AS before_status,
__DORIS_CHANGELOG_BEFORE_amount__ AS before_amount
FROM CHANGELOG("db" = "demo", "table" = "orders")
WHERE order_id = 1
ORDER BY __DORIS_CHANGELOG_TSO__, __DORIS_CHANGELOG_LSN__;
+------+--------------------+----------+---------+--------+---------------+---------------+
| op | tso | order_id | status | amount | before_status | before_amount |
+------+--------------------+----------+---------+--------+---------------+---------------+
| 0 | 469067680972800000 | 1 | created | 100.00 | NULL | NULL |
| 1 | 469067681287372800 | 1 | paid | 100.00 | created | 100.00 |
| 2 | 469067681628160003 | 1 | paid | 100.00 | paid | 100.00 |
+------+--------------------+----------+---------+--------+---------------+---------------+

Подсчитать количество изменений только в одном разделе:

SELECT __DORIS_CHANGELOG_OP__, COUNT(*)
FROM CHANGELOG("table" = "orders", "partition" = "p20260914")
GROUP BY __DORIS_CHANGELOG_OP__;

При обращении к таблице без включённого changelog возникает ошибка:

ERROR 1105 (HY000): errCode = 2, detailMessage = changelog is not enabled for table=orders