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