Qlik Open Lakehouse 中的数据集架构 | Qlik Cloud帮助
跳到主要内容 跳到补充内容

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 数据管道架构

合并模式下的开放式湖仓一体架构

登陆表

以下标头字段将添加到登陆表中。这些字段始终存在于登陆数据中,但默认情况下不存在于下游转换中。您可以使用表达式将这些字段添加到转换中。

为 Kafka 数据源添加的标头字段
字段 类型 描述
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 字符串。  

为 Amazon Kinesis 数据源添加的标头字段
字段 类型 描述
hdr__kinesis_stream String Amazon Kinesis 数据流
hdr__kinesis_shard String Amazon Kinesis 分片
hdr__kinesis_offset String Amazon Kinesis 偏移量
为 Amazon S3 数据源添加的标头字段
字段 类型 描述
hdr__file_name String 文件名
hdr__file_size Long 文件大小(以字节为单位)。

模式

工件在内部模式和数据任务模式中生成。

  • 内部模式包含一个具有多个分区的物理表。

  • 数据任务模式包含可用于使用数据的视图。

    当一个模式与多个数据任务关联时,每个数据任务必须为表和视图使用唯一的前缀。您可以在数据任务设置中设置前缀。

仅检查内部模式是否存在命名冲突。对于其他模式,您必须确保表名中没有命名冲突。最佳实践是将内部模式命名为与数据任务模式相同的名称,并添加 _internal。这可确保每个模式和前缀组合都是唯一的。

信息注释所有表和视图均由 Qlik Talend Data Integration 管理。请勿使用其他工具更改数据。

对于每个源表,将在内部模式中创建一个带有后缀 _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 时间戳:

  • 对于从满负载获取的数据,这是满负载开始时间。

  • 对于来自 Changes 分区的更改,这是记录的时间戳字段。

hdr__operation VARCHAR (1)

此记录的最新操作。

  • D - 从 Changes 分区中删除。

  • U - 从 Changes 分区中更新。

  • I - 从 Changes 分区中插入。

  • L - 由满负载任务插入。

  • d - 从比较和应用中删除。

  • u - 从比较和应用中更新。

  • i - 从比较和应用中插入。

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)

此记录的最新操作。

  • D - 从 Changes 分区中删除。

  • U - 从 Changes 分区中更新。

  • I - 从 Changes 分区中插入。

  • L - 由满负载任务插入。

  • d - 从比较和应用中删除。

  • u - 从比较和应用中更新。

  • i - 从比较和应用中插入。

hdr__was_current_from_timestamp TIMESTAMP 记录首次成为当前记录的 UTC 时间戳。
hdr__was_current_to_timestamp TIMESTAMP 记录最后一次成为当前记录的 UTC 时间戳。

Changes 分区

字段 类型 描述
hdr__change_identifier VARCHAR (50)

更改标识符是包含两部分的字符串:

  • 自 1/1/1970 以来的批处理运行开始时间戳(以毫秒为单位)(10 位字符串)。

  • 来自复制网关的更改序列(35 个字符)。

hdr__operation VARCHAR (1)

此记录的最新操作。

  • D - 从 Changes 分区中删除。

  • U - 从 Changes 分区中更新。

  • I - 从 Changes 分区中插入。

  • L - 由满负载任务插入。

  • d - 从比较和应用中删除。

  • u - 从比较和应用中更新。

  • i - 从比较和应用中插入。

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 分区相同。

视图

创建的所有视图均近乎实时地更新。以下视图可用于简化查询和报告:

当前

当前视图反映了数据的最新状态。此视图表示源表的副本,近乎实时地更新。它合并了来自 CurrentChanges 分区的数据。

名称:<EXTERNAL_SCHEMA>.[<PREFIX>]<TABLE_NAME>

没有向表结构添加标头列。

历史记录

当在数据任务设置中启用历史记录时,将在数据资产模式中为每个选定的源表生成一个历史记录视图。历史记录视图合并了来自 PriorChanges 分区的数据。它提供了更改的完整时间表,非常适合审计或历史分析。

名称:<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)

这指示记录所在的位置:

  • CURRENT - 如果记录位于 Current 分区中。

  • PRIOR - 如果记录位于包含历史数据的 Prior 分区中。

hdr__operation STRING (1)

此记录的最新操作。

  • D - 从 Changes 分区中删除。

  • U - 从 Changes 分区中更新。

  • I - 从 Changes 分区中插入。

  • L - 由满负载任务插入。

  • d - 从比较和应用中删除。

  • u - 从比较和应用中更新。

  • i - 从比较和应用中插入。

hdr__deleted BIT 指示记录是否被软删除,基于 hdr__operation 是否为 D 或 d。
hdr__was_current_from_timestamp TIMESTAMP 此行进入 Current 分区的时间 (UTC)。这通常是运行存储作业并应用更改的时间。
hdr__was_current_to_timestamp TIMESTAMP Current 表中删除该行的时间 (UTC),例如,由于存在较新版本。

信息注释当前和历史记录视图依赖于 Changes 分区,并且始终近乎实时。 但是,如果您遇到查询性能缓慢的情况,可能是由于大量尚未应用到 CurrentPrior 分区的更改。未合并的增量在查询时需要更多处理,从而导致访问速度变慢。

本页面有帮助吗?

如果您发现此页面或其内容有任何问题 – 打字错误、遗漏步骤或技术错误 – 请告诉我们!