Qlik Open Lakehouse 中的数据集架构
当您在 Qlik Open Lakehouse 中生成数据集时,存储表、更改表和视图将由 Qlik Talend Data Integration 自动生成。您可以查询这些视图以访问以 Iceberg 开放表格式存储的当前和历史数据。
直观且有引导的用户界面可帮助您构建、建模和执行数据管道。您可以自动为操作数据存储 (ODS) 和历史数据存储 (HDS) 生成模式,而无需手动编码。
使用 Qlik 数据网关 - 数据移动 的 Qlik Open Lakehouse 数据管道架构。数据登陆到 S3,并存储在 Iceberg 开放湖仓中。或者,如下所示,可以将表镜像到数据仓库。

模式
工件在内部模式和数据任务模式中生成。
-
内部模式包含一个具有多个分区的物理表。
-
数据任务模式包含可用于使用数据的视图。
当一个模式与多个数据任务关联时,每个数据任务必须为表和视图使用唯一的前缀。您可以在数据任务设置中设置前缀。
仅检查内部模式是否存在命名冲突。对于其他模式,您必须确保表名中没有命名冲突。最佳实践是将内部模式命名为与数据任务模式相同的名称,并添加 _internal。这可确保每个模式和前缀组合都是唯一的。
表
对于每个源表,将在内部模式中创建一个带有后缀 _internal 的表,格式如下:
<INTERNAL_SCHEMA>.<TABLE_NAME>_internal
该表包含五个分区,每个分区在处理和存储数据的方式上都有不同的用途。每个分区根据其在数据生命周期中的角色利用表列的子集。
内部数据集的结构旨在有效管理来自源系统的传入数据,支持实时摄取和历史跟踪。 数据流通过几个专用分区进行管理,每个分区的说明如下:
-
Changes 分区 – 实时摄取
来自源系统的所有更改(插入、更新和删除)首先附加到 Changes 分区。
-
作为原始更改日志,该分区在发生任何转换之前提供源活动的完整提要。
-
每个更改都标记有一个类型(I、U 或 D),指示其处理方式。
-
事件在发生时从源捕获。该分区近乎实时地更新。
-
当在 Lake 登陆数据任务中应用以下设置时,Changes 分区可用。
-
在常规选项卡中,更新方法设置为 CDC。
-
启用了满负载。
-
-
-
Asset_state 分区 - 跟踪进度
随着更改的摄取,Asset_state 分区会记录两个关键时间戳:
-
最后一次将更改附加到 Changes 分区的时间。
-
最后一次将更改应用到 Current 分区的时间。
这提供了对同步管道的完全可见性,并有助于监控或排除延迟故障。
-
-
Current 分区 (ODS) – 源的最新副本
来自 Changes 分区的更改会定期应用到 Current 分区,以维护源数据的最新、查询优化的副本。
-
后台任务会自动运行以应用这些更新。这是基于累积更改的数量,而不是固定的时间表。
-
初始满负载直接写入 Current 分区。
-
此分区反映了数据的当前状态,专为高效查询而设计。
-
-
Prior 分区 (HDS) – 历史数据
当在 Current 分区中更新或删除记录时,先前版本的副本将写入 Prior 分区。
-
记录包含元数据,包括更改历史记录和数据有效的日期范围。
-
这支持类型 2 缓慢变化维度 (SCD2)。
-
当在存储数据任务设置的常规选项卡中启用保留历史记录和更改记录存档时,Prior 分区可用。
-
当记录的更新版本进入 Current 分区时,先前的记录将移至 Prior 分区以进行历史跟踪。
-
-
Reload 分区
Reload 分区在手动或计划的完全重新加载期间充当临时暂存区:
-
新数据首先写入 Reload 分区。
-
定期维护任务在暂停之前清除任何待定的更改。
-
将数据与 Current 分区进行比较,仅将差异移至 Current 分区。
-
操作完成时,将清除 Reload 分区。
此过程可确保在完全重新加载操作期间对主数据集的干扰降至最低。
-
Current 分区
| 字段 | 类型 | 描述 |
|---|---|---|
| hdr__key_hash | VARBINARY (20) | 所有记录主键的哈希值。哈希格式为 SHA1。列由退格字符分隔。 |
| hdr__from_timestamp | TIMESTAMP |
UTC 时间戳:
|
| hdr__operation | VARCHAR (1) |
此记录的最新操作。
|
| hdr__inserted_timestamp | TIMESTAMP | 首次添加键的 UTC 时间戳。使用满负载时,为满负载的开始时间。 |
| hdr__modified_timestamp | TIMESTAMP | 进行最后一次更新时的 UTC 时间戳。 |
Prior 分区
| 字段 | 类型 | 描述 |
|---|---|---|
| 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 分区
| 字段 | 类型 | 描述 |
|---|---|---|
| hdr__change_identifier | VARCHAR (50) |
更改标识符是一个包含两部分的字符串:
|
| hdr__operation | VARCHAR (1) |
此记录的最新操作。
|
| hdr__timestamp | TIMESTAMP | UTC 时间戳。 |
| hdr__key_hash | BINARY (20) | 所有记录主键的哈希值。 |
| hdr__inserted_timestamp | TIMESTAMP | Qlik 处理更改时的 UTC 时间戳。 |
Asset_state 分区
| 字段 | 类型 | 描述 |
|---|---|---|
| hdr__apply_change_identifier | VARCHAR (50) | 应用到 Current 分区的最新更改的更改标识符。 |
| hdr__copy_change_identifier | VARCHAR (50) | 附加到 Changes 分区的最新更改的更改标识符。 |
Reload 分区
Reload 分区使用的列与 Current 分区相同。
视图
创建的所有视图均近乎实时地更新。以下视图可用于简化查询和报告:
Current
Current 视图反映了数据的最新状态。此视图表示源表的副本,近乎实时地更新。它合并了来自 Current 和 Changes 分区的数据。
名称:<EXTERNAL_SCHEMA>.[<PREFIX>]<TABLE_NAME>
没有向表结构添加标题列。
历史记录
当在数据任务设置中启用历史记录时,将在数据资产模式中为每个选定的源表生成一个 History 视图。History 视图合并了来自 Prior 和 Changes 分区的数据。它提供了完整的更改时间线,非常适合审计或历史分析。
名称:<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 | 此行进入 Current 分区的时间 (UTC)。这通常是存储作业运行并应用更改的时间。 |
| hdr__was_current_to_timestamp | TIMESTAMP | 从 Current 表中删除该行的时间 (UTC),例如,由于存在较新版本。 |