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

模式
工件在内部模式和数据任务模式中生成。
-
内部模式包括一个具有多个分区的物理表。
-
数据任务模式包含可用于使用数据的视图。
当架构与多个数据任务关联时,每个数据任务都必须为表和视图使用唯一的前缀。您可以在数据任务设置中设置前缀。
仅检查内部架构的命名冲突。对于其他模式,必须确保表名称中没有命名冲突。最佳做法是将内部模式命名为与添加了 _internal 的数据任务模式相同的名称。这将有效确保每个模式和前缀组合都是唯一的。
表格
对于每个源表,都会在内部模式中创建一个后缀为 _internal 的表,格式为
<INTERNAL_SCHEMA>.<TABLE_NAME>_internal
该数据表包含五个分区,每个分区在数据处理和存储方面都有不同作用。每个分区根据其在数据表生命周期中的作用,利用表列的一个子集。
内部数据集的结构可以有效管理来自数据源系统的传入数据,支持实时摄取和历史跟踪。数据流通过几个专门分区来进行管理,每个分区的情况如下:
-
Changes分区 - 实时摄取
源系统的所有更改 - 插入、更新和删除 - 都会首先附加到Changes分区。
-
作为原始的更新日志,该分区可在发生任何转换之前提供完整源活动信息。
-
每项变更都标有类型(I、U 或 D),表明其处理方式。
-
事件发生时从源捕捉。分区几乎实时更新。
-
在湖登陆数据任务中应用以下设置时,可使用Changes分区。
-
在常规选项卡中,更新方法设置为 CDC。
-
已启用满负载。
-
-
-
Asset_state分区 - 跟踪进度
在摄取更改时,Asset_state分区会记录两个关键的时间戳:
-
When changes were last appended to the Changes partition.
-
When changes were last applied to the Current partition.
这提供了同步管道的全面可视性,有利于监控或排除故障延迟。
-
-
Current partition (ODS) – Latest replica of the source
Changes from the Changes partition are periodically applied to the Current partition to maintain an up-to-date, query-optimized copy of the source data.
-
后台任务会自动运行,以便应用这些更新。这是基于累积的变更量,而不是一个固定时间表。
-
The initial full load is written directly to the Current partition.
-
该分区反映了数据当前状态,旨在实现高效查询。
-
-
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__曾是当前_起始时间戳 | TIMESTAMP | 第一次记录的 UTC 时间戳是当前的。 |
| hdr__曾是当前_结束时间戳 | TIMESTAMP | 最后一次记录的 UTC 时间戳是当前的。 |
Changes分区
| 字段 | 类型 | 描述 |
|---|---|---|
| hdr__change_identifier | VARCHAR (50) |
更改标识符是由两部分组成的字符串:
|
| hdr__operation | VARCHAR (1) |
此记录的最新操作。
|
| hdr__timestamp | TIMESTAMP | 依据 UTC 的时间戳。 |
| hdr__key_hash | 二进制 (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 和 Changes 分区的数据。
名称:<EXTERNAL_SCHEMA>.[<PREFIX>]<TABLE_NAME>
没有标题列添加到表结构中。
历史记录
如果在数据任务设置中启用了历史记录,则会在数据资产模式中为每个选定源表生成历史记录视图。历史记录视图合并了 Prior 和 Changes 分区中的数据。它提供了一个完整的变更时间表,非常适合审计或历史分析。
名称:<EXTERNAL_SCHEMA>.[<PREFIX>]<TABLE_NAME>_<Suffix for history views>
以下标题字段将添加到“历史记录”视图中:
| 字段 | 类型 | 描述 |
|---|---|---|
| hdr__key_hash | 二进制 (20) | 所有记录主键的散列。 |
| hdr__from_timestamp | TIMESTAMP | 源系统中发生更改时的时间戳。这反映了用户最初进行更改的时间。 |
| hdr__to_timestamp | TIMESTAMP | 源系统中更改被撤销或更新时的时间戳。 |
| hdr__store | VARCHAR (10) |
这指示记录所在的位置:
|
| hdr__operation | STRING (1) |
此记录的最新操作。
|
| hdr__deleted | 位 | 根据 hdr_operation 是 D 还是 d,指示记录是否被软删除。 |
| hdr__was _current_from_timestamp | TIMESTAMP | 此行进入Current分区的时间 (UTC)。这通常是存储作业运行并应用更改的时间。 |
| hdr__was _current_to_timestamp | TIMESTAMP | 例如,由于版本更新,该行从Current表中删除的时间(UTC)。 |