Архитектура набора данных в Открытое озеро данных Qlik
Потоковые источники имеют собственную архитектуру в Открытое озеро данных Qlik, поскольку им не требуется Data Movement gateway для загрузки данных в блок для промежуточного хранения, а они работают на базе кластера lakehouse.
При приеме данных из файлов, содержащих шаблон данных в имени файла, кластер lakehouse может выполнять целевые операции со списками в S3, что значительно ускоряет время чтения списка файлов. Кроме того, Открытое озеро данных Qlik может прогнозировать поступающие файлы на основе шаблона даты. Задаче потокового промежуточного хранения не нужно каждый раз составлять список всего блока, вместо этого она может запрашивать файлы из S3 в определенном диапазоне дат. Меньший список файлов приводит к повышению производительности. Дополнительную настройку Удалить после загрузки можно использовать для поддержания небольшого количества файлов. Полная загрузка не выполняется, первые записи считаются вставленными изменениями.
В Открытое озеро данных Qlik задача потокового преобразования заменяет задачу хранения. Эта задача используется для преобразования и хранения данных промежуточного хранения в виде таблиц Iceberg. Задачу потокового преобразования можно добавить только после задачи потокового промежуточного хранения. Задача потокового преобразования поддерживает два режима обновления записей:
- Только добавление: Добавляет новые записи без изменения существующих данных, и ограничения ключей не применяются при поступлении записей-дубликатов.
-
Применить изменения (Слияние): Обновляет существующие записи и вставляет новые записи на основе ключевых полей. Этот режим дает возможность использовать мягкое удаление или сохранять исторические данные (Тип 2).
Задача потокового преобразования — это задача на основе цели, которая сопоставляет источник и цель и включает возможности эволюции схемы. Она предоставляет расширенные возможности преобразования, включая распаковку вложенных структур и сглаживание массивов. Для получения дополнительной информации о функциях, которые можно использовать в задаче потокового преобразования, см. Функции преобразования.
При приеме из потокового источника у вас есть возможность настроить секционирование Iceberg, управление хранением, столбцы сортировки, срок действия снимков для контроля затрат на хранение и оптимизации производительности запросов.
Архитектура для потокового конвейера данных Открытое озеро данных Qlik в режиме «Только добавление»

Архитектура для потокового конвейера данных Открытое озеро данных Qlik в режиме «Слияние»

Таблицы промежуточного хранения
В таблицы промежуточного хранения добавляются следующие поля заголовка. Эти поля всегда существуют в данных промежуточного хранения, но по умолчанию отсутствуют в последующем преобразовании. Вы можете добавить поля в преобразование с помощью выражения.
| Поле | Тип | Описание |
|---|---|---|
| hdr__kafka_partition | Long | Секция Kafka |
| hdr__kafka_topic | String | Топик Kafka |
| hdr__kafka_offset | Long | Текущее значение в секции |
| hdr__kafka_key | String | Ключ в кодировке Base64. Устанавливается в строку NULL, если недоступен. |
| hdr__kafka_headers | String |
JSON со всеми заголовками сообщений. Устанавливается в строку NULL, если недоступен. |
| Поле | Тип | Описание |
|---|---|---|
| hdr__kinesis_stream | String | Поток Amazon Kinesis |
| hdr__kinesis_shard | String | Шард Amazon Kinesis |
| hdr__kinesis_offset | String | Смещение Amazon Kinesis |
| Поле | Тип | Описание |
|---|---|---|
| hdr__file_name | String | Имя файла |
| hdr__file_size | Long | Размер файла в байтах. |
Схемы
Артефакты генерируются во внутренней схеме и схеме задачи данных.
-
Внутренняя схема содержит физическую таблицу с несколькими секциями.
-
Схема задачи данных содержит представления, которые можно использовать для потребления данных.
Если схема связана более чем с одной задачей данных, каждая задача данных должна использовать уникальный префикс для таблиц и представлений. Префикс можно задать в настройках задачи данных.
На конфликты имен проверяются только внутренние схемы. Для других схем необходимо убедиться в отсутствии конфликтов имен в названиях таблиц. Рекомендуется называть внутреннюю схему тем же именем, что и схему задачи данных, с добавлением _internal. Это гарантирует уникальность каждой комбинации схемы и префикса.
Таблицы
Для каждой исходной таблицы во внутренней схеме создается таблица с суффиксом _internal в следующем формате:
<INTERNAL_SCHEMA>.<TABLE_NAME>_internal
Эта таблица содержит пять секций в режиме Применить изменения (Слияние), каждая из которых служит определенной цели в обработке и хранении данных. Каждая секция использует подмножество столбцов таблицы в зависимости от ее роли в жизненном цикле данных. В режиме Только добавление таблица не имеет секций и ведет себя как Current partition (ODS).
Внутренний набор данных структурирован для эффективного управления входящими данными из исходной системы, поддерживая прием в реальном времени и историческое отслеживание. Поток данных управляется через несколько специализированных секций, каждая из которых описана ниже:
-
Changes partition – Прием в реальном времени
Все изменения из исходной системы — вставки, обновления и удаления — сначала добавляются в Changes partition.
-
Действуя как необработанный журнал изменений, секция предоставляет полную ленту активности источника до выполнения каких-либо преобразований.
-
Каждое изменение помечается типом (I, U или D), указывающим, как оно обрабатывается.
-
События фиксируются из источника по мере их возникновения. Секция обновляется почти в реальном времени.
-
Changes partition доступна, когда в задаче данных промежуточного хранения Lake применяются следующие настройки.
-
На вкладке Общие для параметра Метод обновления установлено значение CDC.
-
Включена полная загрузка.
-
-
-
Asset_state partition - Отслеживание прогресса
По мере приема изменений Asset_state partition регистрирует две ключевые метки времени:
-
Когда изменения были в последний раз добавлены в Changes partition.
-
Когда изменения были в последний раз применены к Current partition.
Это обеспечивает полную видимость конвейера синхронизации и помогает в мониторинге или устранении задержек.
-
-
Current partition (ODS) – Последняя реплика источника
Изменения из Changes partition периодически применяются к Current partition для поддержания актуальной, оптимизированной для запросов копии исходных данных.
-
Фоновая задача запускается автоматически для применения этих обновлений. Это зависит от объема накопленных изменений, а не от фиксированного расписания.
-
Начальная полная загрузка записывается непосредственно в Current partition.
-
Эта секция отражает текущее состояние данных и предназначена для эффективного выполнения запросов.
-
-
Prior partition (HDS) – Исторические данные
При обновлении или удалении записи в Current partition копия предыдущей версии записывается в Prior partition.
-
Записи содержат метаданные, включая историю изменений и диапазон дат, когда данные действительны.
-
Это поддерживает медленно меняющееся измерение типа 2 (SCD2).
-
Prior partition доступна, когда параметр Хранить исторические записи и архив записей об изменениях включен на вкладке Общие в настройках задачи данных хранения.
-
Когда обновленная версия записи попадает в Current partition, предыдущая запись перемещается в Prior partition для исторического отслеживания.
-
-
Reload partition
Reload partition действует как временная промежуточная область во время ручных или запланированных полных перезагрузок:
-
Новые данные сначала записываются в Reload partition.
-
Регулярные задачи обслуживания очищают любые ожидающие изменения перед их приостановкой.
-
Данные сравниваются с Current partition, и только различия перемещаются в Current partition.
-
Reload partition очищается по завершении операции.
Этот процесс обеспечивает минимальное нарушение работы основного набора данных во время операций полной перезагрузки.
-
Current partition
| Поле | Тип | Описание |
|---|---|---|
| hdr__key_hash | VARBINARY (20) | Хэш всех первичных ключей записи. Формат хэша — SHA1. Столбцы разделены символом возврата на одну позицию (backspace). |
| hdr__from_timestamp | TIMESTAMP |
Метка времени в UTC:
|
| hdr__operation | VARCHAR (1) |
Последняя операция этой записи.
|
| hdr__inserted_timestamp | TIMESTAMP | Метка времени UTC первого добавления ключа. При использовании полной загрузки — время начала полной загрузки. |
| hdr__modified_timestamp | TIMESTAMP | Метка времени UTC последнего обновления. |
Prior partition
| Поле | Тип | Описание |
|---|---|---|
| hdr__key_hash | VARBINARY (20) | Хэш всех первичных ключей записи. |
| hdr__from_timestamp | TIMESTAMP | Метка времени в UTC. |
| hdr__to_timestamp | TIMESTAMP | Метка времени в UTC. |
| hdr__operation | STRING (1) |
Последняя операция этой записи.
|
| hdr__was_current_from_timestamp | TIMESTAMP | Метка времени в UTC для первого раза, когда запись была текущей. |
| hdr__was_current_to_timestamp | TIMESTAMP | Метка времени в UTC для последнего раза, когда запись была текущей. |
Changes partition
| Поле | Тип | Описание |
|---|---|---|
| hdr__change_identifier | VARCHAR (50) |
Идентификатор изменения — это строка, состоящая из двух частей:
|
| hdr__operation | VARCHAR (1) |
Последняя операция этой записи.
|
| hdr__timestamp | TIMESTAMP | Метка времени в UTC. |
| hdr__key_hash | BINARY (20) | Хэш всех первичных ключей записи. |
| hdr__inserted_timestamp | TIMESTAMP | Метка времени UTC времени обработки изменения Qlik. |
Asset_state partition
| Поле | Тип | Описание |
|---|---|---|
| hdr__apply_change_identifier | VARCHAR (50) | Идентификатор изменения последнего изменения, примененного к Current partition. |
| hdr__copy_change_identifier | VARCHAR (50) | Идентификатор изменения последнего изменения, добавленного в Changes partition. |
Reload partition
Столбцы, используемые Reload partition, идентичны Current partition.
Представления
Все созданные представления обновляются почти в реальном времени. Для упрощения запросов и отчетности доступны следующие представления:
Текущие
Представление Current отражает самое последнее состояние данных. Это представление представляет собой реплику исходной таблицы, обновляемую почти в реальном времени. Оно объединяет данные из Current и Changes partitions.
Имя: <EXTERNAL_SCHEMA>.[<PREFIX>]<TABLE_NAME>
В структуру таблицы не добавляются столбцы заголовка.
История
Представление History генерируется в схеме ресурсов данных для каждой выбранной исходной таблицы, когда в настройках задачи данных включена История. Представление History объединяет данные из Prior и Changes partitions. Оно предоставляет полную временную шкалу изменений, идеально подходящую для аудита или исторического анализа.
Имя: <EXTERNAL_SCHEMA>.[<PREFIX>]<TABLE_NAME>_<Suffix for history views>
В представление History добавляются следующие поля заголовка:
| Поле | Тип | Описание |
|---|---|---|
| hdr__key_hash | BINARY (20) | Хэш всех первичных ключей записи. |
| hdr__from_timestamp | TIMESTAMP | Метка времени, когда произошло изменение в исходной системе. Это отражает время, когда пользователь первоначально внес изменение. |
| hdr__to_timestamp | TIMESTAMP | Метка времени, когда изменение было отменено или обновлено в исходной системе. |
| hdr__store | VARCHAR (10) |
Это указывает, где находится запись:
|
| hdr__operation | STRING (1) |
Последняя операция этой записи.
|
| hdr__deleted | BIT | Указывает, является ли запись мягко удаленной, на основе того, равно ли hdr__operation D или d. |
| hdr__was_current_from_timestamp | TIMESTAMP | Время (UTC), когда эта строка попала в Current partition. Обычно это происходит при выполнении задания хранения и применении изменения. |
| hdr__was_current_to_timestamp | TIMESTAMP | Время (UTC), когда строка была удалена из таблицы Current, например, из-за появления более новой версии. |