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

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

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

Для каждой целевой таблицы в задаче репликации ведется таблица изменений с соответствующим именем в базе данных с целевыми таблицами. Для получения дополнительной информации см. раздел Работа с таблицами изменений. Таблица изменений содержит столбцы из исходной таблицы и столбцы заголовков. Имена столбцов заголовков содержат префикс, благодаря чему не возникает конфликта с именами столбцов исходной таблицы. По умолчанию используется префикс header__. Для получения инструкций по изменению этого префикса см. пункт Таблицы изменений в разделе «Метаданные в параметрах задачи». В следующей таблице перечислены столбцы заголовков таблицы изменений по умолчанию.

Имя столбца Тип Описание

[header__]change_seq

varchar (35)

Генератор изменений с монотонным увеличением, используемый совместно всеми таблицами изменений в задаче. Последовательность изменений имеет следующий формат:

YYYYMMDDHHmmSShhxxxxxxxxxxxxxxxxxxx

Где:

  • YYYY — четырехзначное представление года (например, 2012)
  • MM — двухзначное представление месяца (диапазон 01-12)
  • DD — двузначное представление дня (диапазон 01-31)

  • HH — час дня (диапазон 00-23)
  • mm — минута часа (диапазон 00-59)
  • SS — секунда минуты (диапазон 00-59)
  • hh — сотая доля секунды (диапазон 00-99)
  • xxxxxxxxxxxxxxxxxxx — 19-значный номер изменения с префиксом 0 (глобальный для задачи)

Время обычно указывает момент фиксации транзакции, которая включает запись изменения. Qlik Talend Data Integration содержит логику, которая соблюдает монотонность порядковых номеров, поэтому изменение или коррекция времени конечной точки может привести к тому, что множественные изменения будут относиться к одной метке времени, но с увеличивающимся номером изменения.

Фрагмент xxx...xxx обычно представляет внутренний номер изменения из записи данных, с тем исключением, что для записей BEFORE-IMAGE он совпадает с номером изменения в соответствующей записи UPDATE (например, если номер изменения записи BEFORE-IMAGE 1000, а номер записи UPDATE — 1001, то обеим записям присваивается номер 1001). Это упрощает левое внешнее соединение между таблицей и собой, где слева сканирование возможно до определенной точки времени, но отфильтровывается operation=before-image, а справа выполняется соединение того же change_seq с change_oper как 'B'.

[header__]change_oper

varchar (1)

Тип операции. Может быть один из следующих вариантов:

  • I: INSERT
  • D: DELETE
  • U: UPDATE
  • B: Предыдущий образ

[header__] change_mask

varbinary (128)

Маска изменений показывает, какие столбцы данных в таблице изменений связаны со столбцами, измененными в исходной таблице.

Позиция бита в маске изменений основана на порядковом номере столбца в таблице изменений. Это означает, что если имеется 5 столбцов заголовков, они занимают биты 0—4, а первый столбец данных занимает бит 5 в маске изменений.

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

Байт 0 бит7 бит6 бит5бит4 бит3 бит2 бит1 бит0

Байт 1 бит15 бит14 бит13 бит12 бит11 бит10 бит9 бит8

В этом примере bit#N показывает, что столбец таблицы изменений с порядковым номером N связан со столбцом, измененным в исходной таблице. Если маска обновления — 11000 и порядковый номер столбца — 3, столбец не изменился.

Ниже приводится описание семантики битов:

  • Для записей INSERT (ВСТАВИТЬ) всем вставленным столбцам задаются связанные биты.
  • Для записей DELETE (УДАЛИТЬ) связанные биты задаются только столбцам первичного ключа (или уникального индекса). Это позволяет применяющему пользователю создавать оператор DELETE, не выполняя поиск полей первичного ключа из другого источника.
  • Для записей BEFORE-IMAGE (ПРЕДЫДУЩИЙ ОБРАЗ) все биты пустые (маска изменений может быть пустой).
  • Для записей UPDATE (ОБНОВИТЬ) каждому столбцу, значение которого изменилось в между записями BEFORE-IMAGE и UPDATE, будет задан связанный бит.

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

[header__] stream_position

varchar (128)

Исходная позиция потока CDC.

[header__] operation

varchar (12)

Операция, связанная с записью изменения. Это может быть одна из следующих операций:

  • INSERT;
  • UPDATE;
  • DELETE;
  • BEFOREIMAGE

[header__] transaction_id

varchar (32)

Идентификатор транзакции, к которой относится запись изменения.

Значение представляет собой шестнадцатеричную строку 128-битного идентификатора транзакции.

[header__] timestamp

метка времени

Первоначальная метка времени изменения в формате UTC (значение может быть приблизительным).

Примечание к информации При использовании источника PostgreSQL метка времени становится известной только после фиксации в базе данных. Поэтому до фиксации изменений в исходных таблицах отображается дата по умолчанию (например, 1970-01-01).

[header__] partition_name

строка

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

Пример:

20170313T123000_20170313T170000

Помогла ли вам эта страница?

Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!