Qlik Open Lakehouse 中的流式传输源数据集架构
上次更新日期:2026/9/8数据流源在 Qlik Open Lakehouse 中拥有自己的架构,因为它们不需要 Data Movement gateway 将数据加载到登陆存储段中,而是由 lakehouse 集群提供支持。
当您从文件名中包含数据模式的文件中摄取数据时,这使得湖仓集群能够在 S3 中执行有针对性的列表操作,从而显著加快读取文件列表的时间。此外,Qlik Open Lakehouse 可以基于日期模式预测即将到达的文件。数据流登陆任务无需每次都列出整个存储段,而是可以请求 S3 在特定日期范围内的文件。拥有较小的文件列表会带来更好的性能。可选的加载后删除设置可用于保持较少的文件数量。不执行满负载,第一批记录被视为插入的更改。
在 Qlik Open Lakehouse 中,流式转换任务取代了存储任务。此任务用于将登陆的数据转换为 Iceberg 表并进行存储。流式转换任务只能在流式登陆任务之后添加。流式转换任务支持两种记录更新模式:
- 仅追加:添加新记录,不修改现有数据,如果出现复制记录,则不强制执行键约束。
-
应用更改 (合并): 根据关键字段更新现有记录并插入新记录。此模式提供使用软删除或保留历史数据(类型 2)的选项。
数据流转换任务是一个基于目标的任务,它在源和目标之间进行映射,并包含架构演进功能。它提供扩展的转换功能,包括嵌套结构的解嵌套以及数组的展平。有关可在 Steaming Transform 任务中使用的函数的更多信息,请参阅 转换函数。
当您从流式源摄取数据时,您可以配置 Iceberg 分区、保留管理、排序列、快照过期,以控制存储成本,并优化查询性能。
在仅追加模式下的流式 Qlik Open Lakehouse 数据管道架构

合并模式下的流式 Qlik Open Lakehouse 数据管道架构

登陆表
将以下标题列添加到登陆表。这些列始终存在于登陆数据中,但默认情况下不包含在下游流式转换任务中。您可以将它们添加到流式转换任务中,通过使用从源添加列,或者在添加或编辑列时在表达式构建器中引用它们。
| 字段 | 类型 | 描述 |
|---|---|---|
| hdr__kafka_partition | Long | Kafka 分区 |
| hdr__kafka_topic | 字符串 | Kafka 主题 |
| hdr__kafka_offset | Long | 分区中的累计值 |
| hdr__kafka_key | 字符串 | Base64 编码密钥。若不可用,则设为 NULL 字符串。 |
| hdr__kafka_headers | 字符串 |
包含所有消息头的 JSON。若不可用,则设为 NULL 字符串。 |
| 字段 | 类型 | 描述 |
|---|---|---|
| hdr__kinesis_stream | 字符串 | Amazon Kinesis 数据流 |
| hdr__kinesis_shard | 字符串 | Amazon Kinesis 分片 |
| hdr__kinesis_offset | 字符串 | Amazon Kinesis 偏移量 |
| 字段 | 类型 | 描述 |
|---|---|---|
| hdr__file_name | 字符串 | 文件名 |
| hdr__file_size | Long | 文件大小(按字节计) |
模式
工件在内部模式和数据任务模式中生成。
-
内部模式包括一个具有多个分区的物理表。
-
数据任务模式包含可用于使用数据的视图。
当架构与多个数据任务关联时,每个数据任务都必须为表和视图使用唯一的前缀。您可以在数据任务设置中设置前缀。
仅检查内部架构的命名冲突。对于其他模式,必须确保表名称中没有命名冲突。最佳做法是将内部模式命名为与添加了 _internal 的数据任务模式相同的名称。这将有效确保每个模式和前缀组合都是唯一的。
表格
对于每个源表,都会在内部模式中创建一个后缀为 _internal 的表,格式为
<INTERNAL_SCHEMA>.<TABLE_NAME>_internal
该数据表在应用更改(合并)模式下包含五个分区,每个分区在数据处理和存储方面都有不同作用。每个分区根据其在数据表生命周期中的作用,利用表列的一个子集。在仅追加模式下,表没有分区,其行为类似于当前分区 (ODS)。
内部数据集的结构可以有效管理来自数据源系统的传入数据,支持实时摄取和历史跟踪。数据流通过几个专门分区来进行管理,每个分区的情况如下:
-
变化分区 - 实时摄取
源系统的所有更改 - 插入、更新和删除 - 都会首先附加到Changes分区。
-
作为原始的更新日志,该分区可在发生任何转换之前提供完整源活动信息。
-
每项变更都标有类型(I、U 或 D),表明其处理方式。
-
事件发生时从源捕捉。分区几乎实时更新。
-
在湖登陆数据任务中应用以下设置时,可使用Changes分区。
-
在常规选项卡中,更新方法设置为 CDC。
-
已启用满负载。
-
-
-
Asset_state 分区 - 跟踪进度
在摄取更改时,Asset_state分区会记录两个关键的时间戳:
-
上次将更改添加到 Changes 分区时。
-
上次对 Current 分区应用更改的时间。
这提供了同步管道的全面可视性,有利于监控或排除故障延迟。
-
-
当前分区 (ODS) - 源的最新副本
Changes 分区中的更改会定期应用于Current 分区,以维护源数据的最新查询优化副本。
-
后台任务会自动运行,以便应用这些更新。这是基于累积的变更量,而不是一个固定时间表。
-
The initial full load is written directly to the Current partition.
-
该分区反映了数据当前状态,旨在实现高效查询。
-
-
先前分区 (HDS) - 历史数据
在Current分区中更新或删除记录时,先前版本副本会写入Prior分区。
-
记录包含元数据,包括更改历史和数据有效的日期范围。
-
这支持类型 2 缓慢变化的维度 (SCD2)。
-
如果在存储数据任务设置的Prior常规选项卡中启用了保留历史记录和更改记录存档,则可使用分区。
-
当记录的更新版本进入Current分区时,之前的记录会被移至Prior分区,以便进行历史跟踪。
-
-
重载分区
重载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__曾是当前_起始时间戳 | TIMESTAMP | 此行进入Current分区的时间 (UTC)。这通常是存储作业运行并应用更改的时间。 |
| hdr__曾是当前_结束时间戳 | TIMESTAMP | 例如,由于版本更新,该行从Current表中删除的时间(UTC)。 |
在视图中显示表头列
您可以控制是否显示或隐藏标题列。选项根据任务类型而异。
流式登陆任务
若要显示标头列,请启用搜索框右侧的显示标头列。
流媒体转换任务
搜索框右侧提供一个包含以下选项的下拉列表。
-
隐藏标题列: 默认设置。
-
显示标题列
-
标准: 选择以显示标准视图的标题列。
-
历史记录: 选择显示历史记录视图的标题列。请注意,此选项仅在创建历史数据存储(类型 2)在任务或数据集设置中启用时才可用。
-