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

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

登陆表
以下标头字段将添加到登陆表中。这些字段始终存在于登陆数据中,但默认情况下不存在于下游转换中。您可以使用表达式将这些字段添加到转换中。
| 字段 | 类型 | 描述 |
|---|---|---|
| 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 分区 (ODS)。
内部数据集的结构旨在有效管理来自源系统的传入数据,支持实时摄取和历史跟踪。 数据流通过几个专门的分区进行管理,每个分区的描述如下:
-
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 分区可用。
-
当记录的更新版本进入 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 和 Changes 分区的数据。
名称:<EXTERNAL_SCHEMA>.[<PREFIX>]<TABLE_NAME>
没有向表结构添加标头列。
历史记录
当在数据任务设置中启用历史记录时,将在数据资产模式中为每个选定的源表生成一个历史记录视图。历史记录视图合并了来自 Prior 和 Changes 分区的数据。它提供了更改的完整时间表,非常适合审计或历史分析。
名称:<EXTERNAL_SCHEMA>.[<PREFIX>]<TABLE_NAME>_<Suffix for history views>
以下标头字段将添加到历史记录视图中:
| 字段 | 类型 | 描述 |
|---|---|---|
| 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),例如,由于存在较新版本。 |