# Таблицы изменений

Можно использовать инструменты, чтобы целевая конечная точка получала информацию с использованием метаданных в таблицах изменений. Эти данные определяются столбцами заголовка, добавленным в схему таблицы изменений. Эти заголовки описаны в приведенной ниже таблице.

Для каждой целевой таблицы в задаче репликации ведется таблица изменений с соответствующим именем в базе данных с целевыми таблицами. Для получения дополнительной информации см. раздел [Работа с таблицами изменений](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/use_change_table_model.htm). Таблица изменений содержит столбцы из исходной таблицы и столбцы заголовков. Имена столбцов заголовков содержат префикс, благодаря чему не возникает конфликта с именами столбцов исходной таблицы. По умолчанию используется префикс `header__`. Для получения инструкций по изменению этого префикса см. пункт Таблицы изменений в разделе «Метаданные в параметрах задачи». В следующей таблице перечислены столбцы заголовков таблицы изменений по умолчанию.

| Имя столбца | Тип | Описание |
| --- | --- | --- |
| `[header__]change_seq` | VARCHAR (35) | Генератор изменений с монотонным увеличением, используемый совместно всеми таблицами изменений в задаче. Последовательность изменений имеет следующий формат:<br><br>YYYYMMDDHHmmSShhxxxxxxxxxxxxxxxxxxx<br><br>Где:<br><br><ul> <li>YYYY — четырехзначное представление года (например, 2012)</li> <li>MM — двухзначное представление месяца (диапазон 01-12)</li> <li> <p>DD — двузначное представление дня (диапазон 01-31)</p> </li> <li>HH — час дня (диапазон 00-23)</li> <li>mm — минута часа (диапазон 00-59)</li> <li>SS — секунда минуты (диапазон 00-59)</li> <li>hh — сотая доля секунды (диапазон 00-99)</li> <li>xxxxxxxxxxxxxxxxxxx — 19-значный номер изменения с префиксом 0 (глобальный для задачи)</li> </ul><br><br>Время обычно указывает момент фиксации транзакции, которая включает запись изменения. Qlik Talend Data Integration содержит логику, которая соблюдает монотонность порядковых номеров, поэтому изменение или коррекция времени конечной точки может привести к тому, что множественные изменения будут относиться к одной метке времени, но с увеличивающимся номером изменения.<br><br>Фрагмент xxx...xxx обычно представляет внутренний номер изменения из записи данных, с тем исключением, что для записей BEFORE-IMAGE он совпадает с номером изменения в соответствующей записи UPDATE (например, если номер изменения записи BEFORE-IMAGE 1000, а номер записи UPDATE — 1001, то обеим записям присваивается номер 1001). Это упрощает левое внешнее соединение между таблицей и собой, где слева сканирование возможно до определенной точки времени, но отфильтровывается `operation=before-image`, а справа выполняется соединение того же `change_seq` с `change_oper` как 'B'. |
| `[header__]change_oper` | VARCHAR (1) | Тип операции. Может быть один из следующих вариантов:<br><br><ul> <li><code>I</code>: INSERT;</li> <li><code>D</code>: УДАЛИТЬ</li> <li><code>U</code>: ОБНОВИТЬ</li> <li><code>B</code>: Предыдущий образ</li> </ul> |
| `[header__] change_mask` | VARBINARY (128) | Маска изменений показывает, какие столбцы данных в таблице изменений связаны со столбцами, измененными в исходной таблице.<br><br>Позиция бита в маске изменений основана на порядковом номере столбца в таблице изменений. Это означает, что если имеется 5 столбцов заголовков, они занимают биты 0—4, а первый столбец данных занимает бит 5 в маске изменений.<br><br>Маска изменений представляет собой двоичный столбец (массив байтов), отображающий маску изменений как прямой порядок байтов:<br><br>Байт 0 бит7 бит6 бит5бит4 бит3 бит2 бит1 бит0<br><br>Байт 1 бит15 бит14 бит13 бит12 бит11 бит10 бит9 бит8<br><br>В этом примере `bit#N` показывает, что столбец таблицы изменений с порядковым номером N связан со столбцом, измененным в исходной таблице. Если маска обновления — 11000 и порядковый номер столбца — 3, столбец не изменился.<br><br>Ниже приводится описание семантики битов:<br><br><ul> <li>Для записей INSERT (ВСТАВИТЬ) всем вставленным столбцам задаются связанные биты.</li> <li>Для записей DELETE (УДАЛИТЬ) связанные биты задаются только столбцам первичного ключа (или уникального индекса). Это позволяет применяющему пользователю создавать оператор DELETE, не выполняя поиск полей первичного ключа из другого источника.</li> <li>Для записей BEFORE-IMAGE (ПРЕДЫДУЩИЙ ОБРАЗ) все биты пустые (маска изменений может быть пустой).</li> <li>Для записей UPDATE (ОБНОВИТЬ) каждому столбцу, значение которого изменилось в между записями BEFORE-IMAGE и UPDATE, будет задан связанный бит.</li> </ul><br><br>В целях производительности пространства и обработки из фактического количества байтов, которые хранятся в маске изменений, можно отбросить нули. Это значит, что конечные нули не требуется сохранять. Это должно учитываться в логике обработки. |
| `[header__] stream_position` | VARCHAR (128) | Исходная позиция потока CDC. |
| `[header__] operation` | VARCHAR (12) | Операция, связанная с записью изменения. Это может быть одна из следующих операций:<br><br><ul> <li>INSERT;</li> <li>UPDATE;</li> <li>DELETE;</li> <li>BEFOREIMAGE</li> </ul> |
| `[header__] transaction_id` | VARCHAR (32) | Идентификатор транзакции, к которой относится запись изменения.<br><br>Значение представляет собой шестнадцатеричную строку 128-битного идентификатора транзакции. |
| `[header__] timestamp` | метка времени | Первоначальная метка времени изменения в формате UTC (значение может быть приблизительным).<br><br>Примечание к информации При использовании источника PostgreSQL метка времени становится известной только после фиксации в базе данных. Поэтому до фиксации изменений в исходных таблицах отображается дата по умолчанию (например, 1970-01-01). |
| [заголовок\_\_] `partition_name` | строка | Имя раздела, созданного в цели, когда включена функция создания разделов данных изменений. Имя раздела содержит время начала и окончания раздела.<br><br>Пример:<br><br>20170313T123000\_20170313T170000 |