# Архитектура набора данных для источников CDC в Открытое озеро данных Qlik

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

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

Архитектура для конвейера данных Открытое озеро данных Qlik с использованием Шлюз данных Qlik — движение данных. Данные выгружаются в S3 и хранятся в открытом озере-хранилище данных Iceberg. При необходимости таблицы можно зеркалировать в хранилище данных, как описано ниже.

Архитектура для конвейера данных Открытое озеро данных Qlik с использованием Шлюз данных Qlik — движение данных. Данные выгружаются в S3 и хранятся в открытом озере-хранилище данных Iceberg. При необходимости таблицы можно зеркалировать в хранилище данных, как описано ниже.

Архитектура для конвейера данных Открытое озеро данных QlikОткрытое озеро данных Qlik с использованием Шлюз данных Qlik — движение данныхШлюз данных Qlik — движение данных. Данные выгружаются в S3 и хранятся в открытом озере-хранилище данных Iceberg. При необходимости таблицы можно зеркалировать в хранилище данных, как описано ниже. ![](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Resources/Images/Upsolver/open_lakehouse_architecture.png)

## Схемы

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

* Внутренняя схема содержит физическую таблицу с несколькими разделами.

* Схема задач данных содержит виды, которые можно использовать для работы с данными.

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

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

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

## Таблицы

Для каждой таблицы-источника во внутренней схеме создается таблица с суффиксом \_internal в следующем формате:

&lt;INTERNAL\_SCHEMA&gt;.&lt;TABLE\_NAME&gt;\_internal

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

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

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

* Раздел Changes — ввод данных в реальном времени

  Все изменения из исходной системы — вставки, обновления и удаления — сначала добавляются в Changes раздел.

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

  * Каждое изменение помечено типом (I, U или D), указывающим на способ обработки.

  * События регистрируются по мере их возникновения в источнике. Раздел обновляется почти что в реальном времени.

  * Раздел Changes доступен, если в задаче промежуточного хранения в озере применены следующие настройки.

    * На вкладке Общие в поле Метод обновления должно быть выбрано CDC.

    * Включена полная загрузка

* Раздел Asset\_state — отслеживание прогресса

  По мере поступления изменений в Asset\_state разделе сохраняются две ключевые метки времени:

  * Когда изменения были в последний раз добавлены в Changes раздел.

  * Когда изменения были в последний раз применены к Current разделу.

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

* Раздел Current (ODS)— последняя копия источника

  Изменения из Changes раздела периодически применяются к Current разделу, чтобы обеспечить актуальность копии исходных данных и оптимизировать ее для запросов.

  * Эти обновления применяются автоматически в фоновом режиме. Это основано на объеме накопленных изменений, а не на фиксированном расписании.

  * Первая полная загрузка записывается прямо в Current раздел.

  * Этот раздел отражает текущее состояние данных и предназначен для эффективного выполнения запросов.

* Раздел Prior (HDS) — исторические данные

  Если запись обновляется или удаляется в Current разделе, копия предыдущей версии записывается в Prior раздел.

  * Записи содержат метаданные, включая историю изменений и диапазон дат, когда данные были действительными.

  * Поддерживаются медленно изменяющиеся измерения типа 2 (SCD2).

  * Prior раздел доступен, если на вкладке General в настройках задачи хранения данных активирован параметр Keep historical records and archive of change records.

  * Когда обновленная версия записи передается в Current раздел, предыдущая запись перемещается в Prior раздел для отслеживания истории.

* Раздел Reload

  Раздел Reload является зоной временного хранения во время полной перезагрузки, выполняемой вручную или по расписанию:

  * Новые данные сначала записываются в раздел Reload.

  * Задачи по регулярному обслуживанию очищают все изменения, находящиеся в состояния ожидания, перед тем, как они будут приостановлены.

  * Данные сравниваются с разделом Current, и в раздел Current переносятся только данные, у которых есть отличия.

  * Раздел Reload очищается после завершения операции.

  Такой механизм позволяет минимизировать воздействие на основной набор данных во время операций полной перезагрузки.

### Current раздел

| Поле | Тип | Описание |
| --- | --- | --- |
| hdr\_\_хеш\_ключа | VARBINARY (20) | Хэш всех первичных ключей записей. Формат хэша — SHA1. Столбцы разделяются символом backspace. |
| hdr\_\_from\_timestamp | TIMESTAMP | Метка времени в формате UTC:<br><br><ul> <li> <p>Для данных, полученных из полной загрузки, это время начала полной загрузки.</p> </li> <li> <p>Для изменения, поступающего из <span>Changes</span> раздела, это поле Метки времени записи.</p> </li> </ul> |
| hdr\_\_операция | VARCHAR (1) | Последняя операция по этой записи.<br><br><ul> <li> <p>D — удалено из <span>Changes</span> раздела.</p> </li> <li> <p>U — обновлено из <span>Changes</span> раздела.</p> </li> <li> <p>I — вставлено из <span>Changes</span> раздела.</p> </li> <li> <p>L — вставлено задачей полной загрузки.</p> </li> <li> <p>d — удалено из сравнения и применения.</p> </li> <li> <p>u — обновлено из сравнения и применения</p> </li> <li> <p>i — вставлено из сравнения и применения</p> </li> </ul> |
| hdr\_\_вставленная\_Метка времени | TIMESTAMP | Временная метка (UTC) первого добавления ключа. Если используется полная загрузка, начальное время полной нагрузки. |
| hdr\_\_modified\_timestamp | TIMESTAMP | Временная метка в формате UTC последнего обновления. |

### Prior раздел

| Поле | Тип | Описание |
| --- | --- | --- |
| hdr\_\_хеш\_ключа | VARBINARY (20) | Хэш всех первичных ключей записей. |
| hdr\_\_from\_timestamp | TIMESTAMP | Метка времени в формате UTC. |
| hdr\_\_to\_timestamp | TIMESTAMP | Метка времени в формате UTC. |
| hdr\_\_операция | STRING (1) | Последняя операция по этой записи.<br><br><ul> <li> <p>D — удалено из <span>Changes</span> раздела.</p> </li> <li> <p>U — обновлено из <span>Changes</span> раздела.</p> </li> <li> <p>I — вставлено из <span>Changes</span> раздела.</p> </li> <li> <p>L — вставлено задачей полной загрузки.</p> </li> <li> <p>d — удалено из сравнения и применения.</p> </li> <li> <p>u — обновлено из сравнения и применения</p> </li> <li> <p>i — вставлено из сравнения и применения</p> </li> </ul> |
| hdr\_\_was\_current\_from\_timestamp | TIMESTAMP | Временная метка в формате UTC, указывающая, когда впервые запись была текущей. |
| hdr\_\_была\_текущей\_до\_Метка времени | TIMESTAMP | Временная метка в формате UTC, указывающая, когда в последний раз запись была текущей. |

### Changes раздел

| Поле | Тип | Описание |
| --- | --- | --- |
| hdr\_\_change\_identifier | VARCHAR (50) | Идентификатор изменения представляет собой строку, которая состоит из двух частей:<br><br><ul> <li> <p>Временная метка начала выполнения пакета (в миллисекундах) после 1/1/1970 (строка из 10 цифр).</p> </li> <li> <p>Последовательность изменения из шлюза репликации (35 знаков).</p> </li> </ul> |
| hdr\_\_операция | VARCHAR (1) | Последняя операция по этой записи.<br><br><ul> <li> <p>D — удалено из <span>Changes</span> раздела.</p> </li> <li> <p>U — обновлено из <span>Changes</span> раздела.</p> </li> <li> <p>I — вставлено из <span>Changes</span> раздела.</p> </li> <li> <p>L — вставлено задачей полной загрузки.</p> </li> <li> <p>d — удалено из сравнения и применения.</p> </li> <li> <p>u — обновлено из сравнения и применения</p> </li> <li> <p>i — вставлено из сравнения и применения</p> </li> </ul> |
| hdr\_\_timestamp | TIMESTAMP | Метка времени в формате UTC. |
| hdr\_\_хеш\_ключа | BINARY (20) | Хэш всех первичных ключей записей. |
| hdr\_\_вставленная\_Метка времени | TIMESTAMP | Метка времени UTC, соответствующая времени, когда изменение было обработано в Qlik. |

### Asset\_state раздел

| Поле | Тип | Описание |
| --- | --- | --- |
| hdr\_\_apply\_change\_identifier | VARCHAR (50) | Идентификатор последнего изменения, примененного к разделу Current текущих данных. |
| hdr\_\_copy\_change\_identifier | VARCHAR (50) | Идентификатор последнего изменения, добавленного в раздел Changes текущих данных. |

### Reload раздел

Столбцы в Reload разделе аналогичны столбцам в Current разделе.

## Виды

Все созданные виды обновляются практически в режиме реального времени. Следующие виды позволяют упростить работу с запросами и отчетами:

### Текущие данные

В виде «Текущие данные» показано самое последнее состояние данных. Это представление представляет собой копию исходной таблицы, обновляемую практически в режиме реального времени. В нем объединены данные из разделов Current и Changes.

Имя: &lt;EXTERNAL\_SCHEMA&gt;.[&lt;PREFIX&gt;]&lt;TABLE\_NAME&gt;

В структуру таблицы не добавляются поля заголовков.

### История

Вид «История» генерируется в схеме ресурсов данных по каждой выбранной исходной таблице, если в настройках задачи данных активен параметр «История». Представление истории объединяет данные из раздела Prior и раздела Changes. В нем представлена полная история изменений, поэтому этот вид идеально подходит для аудита или исторического анализа.

Имя: &lt;EXTERNAL\_SCHEMA&gt;.[&lt;PREFIX&gt;]&lt;TABLE\_NAME&gt;\_&lt;Suffix for history views&gt;

В вид «История» добавляются следующие поля заголовков.

| Поле | Тип | Описание |
| --- | --- | --- |
| hdr\_\_хеш\_ключа | BINARY (20) | Хэш всех первичных ключей записей. |
| hdr\_\_from\_timestamp | TIMESTAMP | Метка времени, когда изменение произошло в системе-источнике. Соответствует времени, когда пользователь в первый раз сделал изменение. |
| hdr\_\_to\_timestamp | TIMESTAMP | Метка времени, когда изменение было отменено или обновлено в системе-источнике. |
| hdr\_\_store | VARCHAR (10) | Указывает, где находится запись:<br><br><ul> <li> <p>CURRENT — если запись находится в <span>Current</span> разделе.</p> </li> <li> <p>PRIOR — если запись находится в <span>Prior</span> разделе с историческими данными.</p> </li> </ul> |
| hdr\_\_операция | STRING (1) | Последняя операция по этой записи.<br><br><ul> <li> <p>D — удалено из <span>Changes</span> раздела.</p> </li> <li> <p>U — обновлено из <span>Changes</span> раздела.</p> </li> <li> <p>I — вставлено из <span>Changes</span> раздела.</p> </li> <li> <p>L — вставлено задачей полной загрузки.</p> </li> <li> <p>d — удалено из сравнения и применения.</p> </li> <li> <p>u — обновлено из сравнения и применения</p> </li> <li> <p>i — вставлено из сравнения и применения</p> </li> </ul> |
| hdr\_\_deleted | BIT | Указывает, является ли запись обратимо удаленной (в зависимости от того, имеет ли hdr\_\_operation значение D или d). |
| hdr\_\_was\_current\_from\_timestamp | TIMESTAMP | Время (UTC), когда эта строка попала в Current раздел. Обычно это происходит, когда выполнялась задача хранения и было применено изменение. |
| hdr\_\_была\_текущей\_до\_Метка времени | TIMESTAMP | Время (UTC), когда строка была удалена из Current таблицы, например, в связи с появлением новой версии. |

Примечание к информацииВиды «Текущие данные» и «История» формируются по данным из Changes раздела и всегда меняются в режиме, близком к реальному времени. Однако низкая производительность запросов может быть вызвана накоплением большого количества изменений, не примененных к Current или Prior разделам. Необъединенные дельты обрабатываются дольше во время запроса, что замедляет доступ.