# 云数据仓库中的数据集架构

Qlik Talend Data Integration 允许您创建、管理和控制分析数据管道，将数据一路交付给消费者。当您使用 Qlik Talend Data Integration 在云数据仓库中生成数据集时，将生成存储表、更改表和视图。

直观且有指导的用户界面可帮助您构建、建模和执行数据管道。自动为操作数据存储 (ODS) 和历史数据存储 (HDS) 生成模式，无需手动编码。

使用 Qlik Data Gateway - Data Movement 和 CDC 的 Qlik Talend Data Integration 数据管道架构

使用 Qlik Data Gateway - Data Movement 和 CDC 的 Qlik Talend Data Integration 数据管道架构

使用 Qlik Data Gateway - Data MovementQlik Data Gateway - Data Movement 和 CDC 的 Qlik Talend Data IntegrationQlik Talend Data Integration 数据管道架构 ![](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/dr_DIArchitecture_v1.svg)

* 登陆

  Qlik Talend Data Integration 中的登陆任务控制数据从数据源到登陆区的连续登陆。图中的示例描述了使用 Qlik Data Gateway - Data Movement 访问数据源，并使用 CDC 保持数据最新。您还可以使用 Qlik Cloud 源连接来执行可计划定期重新加载的满负载。

  有关何时需要使用 数据移动网关 的信息，请参阅 [什么时候需要 数据移动网关？](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm#top)

  信息注释登陆区中的表是为 Qlik Talend Data Integration 存储数据任务的内部使用而生成的。请勿在任何其他下游流程中使用登陆表。

* 存储

  存储任务控制何时将数据应用于存储表，并创建和管理表及外部视图。

* 外部视图

  使用数据时，最佳实践是使用视图。与表相比，视图提供了几个好处，包括改进的数据并发性。

## 使用实时视图

您可以使用实时视图访问当前数据 (ODS) 和历史数据 (HDS)。实时视图包含尚未应用于当前表或先前表的更改表中的数据。这使您能够以较低的延迟查看数据，而无需频繁应用更改的数据。延迟合并的能力可以降低目标平台中的成本和处理要求。

实时视图的另一个好处是计算层不需要一直运行。

* 登陆可以指向一个明确的仓库，该仓库可以很小，因为它只执行 INSERT 操作以实现快速执行。

* 例如，每天运行一次的存储过程可以唤醒一个大型计算层进行处理。

* 延迟可以得到改善，因为我们不再需要全天应用更改。当更改表中插入的新记录可用时，它们会立即在实时视图中可用。

[查看视频短片](https://play.vidyard.com/USr4BCxeuYsVV1hE5JmKWb)

## 模式

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

* 内部模式包含物理数据表。

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

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

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

当您删除任务或项目时，由 Qlik Talend Data Integration 创建的模式不会被删除。

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

## 表

以下表在内部模式中创建。

信息注释内部模式中的表如有更改，恕不另行通知。在可能的情况下，您应主要使用视图来使用数据。

* 当前表 (ODS)

  此表包含在最新应用间隔期间更新了更改的数据源副本。

* 先前表 (HDS)

  此表包含类型 2 历史数据。仅当在数据任务设置中启用了 历史记录 时才会生成。

  当源表记录更新时，每次都会向先前表添加一条新记录。历史记录是前一个当前记录的副本，其中还包括更新的内容以及有效时间。

  使用历史视图或历史实时视图查看历史数据。有关更多信息，请参阅 [历史视图](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Storage/dataset-tables.htm#History) 和 [历史实时视图](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Storage/dataset-tables.htm#History2)。

* 更改表

  此表包含从任务开始以来对相应源表的所有更改，并且永远不会被截断。仅当登陆模式为 满负载和 CDC 时才会生成。

  提示注释如果您的系统处理大量更改，请考虑定期从更改表中截断已应用的更改。这应该会减少资源消耗并提高性能。

信息注释

当您重新插入以前删除的记录，并且这些记录具有相同的主键值时。hdr\_\_operation 的值将为 U - 已更新。

以 hdr\_\_ 开头的列名保留供 Qlik Talend Data Integration 在标题列中使用。有关更多信息，请参阅 [不明确的列名](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Deploying/Troubleshooting-data-assets.htm#Ambiguou)。

### 当前表

命名：&lt;INTERNAL\_SCHEMA&gt;.[&lt;PREFIX&gt;]&lt;TABLE\_NAME&gt;\_current

以下标题列将添加到表结构中。

当前表标题字段

| 字段 | 类型 | 描述 |
| --- | --- | --- |
| hdr\_\_key\_hash | varbinary(20) | 所有记录主键的哈希值。哈希格式为 SHA1。列由退格字符分隔。<br><br>此列不会在 数据集市 数据任务中生成。 |
| hdr\_\_key\_id | int64 | 每条记录递增的序列。<br><br>此列仅在 数据集市 数据任务中生成。 |
| hdr\_\_from\_timestamp | timestamp | UTC 时间戳<br><br><ul> <li> <p>对于从满负载获取的数据，它将是满负载开始时间。</p> </li> <li> <p>对于通过更改表进行的更改，它将是记录的时间戳字段。</p> </li> </ul> |
| hdr\_\_operation | string(1) | 此记录的最新操作。<br><br><ul> <li> <p>D - 从更改表中删除。</p> </li> <li> <p>U - 从更改表中更新。</p> </li> <li> <p>I - 从更改表中插入。</p> </li> <li> <p>L - 由满负载任务插入。</p> </li> <li> <p>d - 从比较和应用中删除。</p> </li> <li> <p>u - 从比较和应用中更新。</p> </li> <li> <p>i - 从比较和应用中插入。</p> </li> </ul> |
| hdr\_\_inserted\_timestamp | timestamp | 首次添加键的 UTC 时间戳。使用满负载时，为满负载的开始时间。 |
| hdr\_\_modified\_timestamp | timestamp | 应用最后一次更新时的 UTC 时间戳。 |

### 先前表

添加了以下标题字段。

命名：&lt;INTERNAL\_SCHEMA&gt;.[&lt;PREFIX&gt;]&lt;TABLE\_NAME&gt;\_prior

先前表标题字段

| 字段 | 类型 | 描述 |
| --- | --- | --- |
| hdr\_\_key\_hash | varbinary(20) | 所有记录主键的哈希值。<br><br>此列不会在 数据集市 数据任务中生成。 |
| hdr\_\_key\_id | int64 | 每条记录递增的序列。<br><br>此列仅在 数据集市 数据任务中生成。 |
| hdr\_\_from\_timestamp | timestamp | UTC 时间戳 |
| hdr\_\_to\_timestamp | timestamp | UTC 时间戳 |
| hdr\_\_operation | string(1) | 此记录的最新操作。<br><br><ul> <li> <p>D - 从更改表中删除。</p> </li> <li> <p>U - 从更改表中更新。</p> </li> <li> <p>I - 从更改表中插入。</p> </li> <li> <p>L - 由初始加载插入。</p> </li> <li> <p>d - 从比较和应用中删除。</p> </li> <li> <p>u - 从比较和应用中更新。</p> </li> <li> <p>i - 从比较和应用中插入。</p> </li> </ul> |
| hdr\_\_was\_current\_from\_timestamp | timestamp | 记录首次成为当前记录的 UTC 时间戳。 |
| hdr\_\_was\_current\_to\_timestamp | timestamp | 记录最后一次成为当前记录的 UTC 时间戳。 |

### 更改表

命名：&lt;INTERNAL\_SCHEMA&gt;.[&lt;PREFIX&gt;]&lt;TABLE\_NAME&gt;\_ct

以下标题字段将添加到表结构中。

更改表标题字段

| 字段 | 类型 | 描述 |
| --- | --- | --- |
| hdr\_\_change\_identifier | varchar(50) | 更改标识符是一个包含两部分的字符串：<br><br><ul> <li> <p>自 1970 年 1 月 1 日以来的批处理运行开始时间戳（以毫秒为单位）（10 位字符串）</p> </li> <li> <p>来自复制网关的更改序列（35 个字符）</p> </li> </ul> |
| hdr\_\_operation | varchar(1) | 此记录的最新操作。<br><br><ul> <li> <p>D - 从更改表中删除。</p> </li> <li> <p>U - 从更改表中更新。</p> </li> <li> <p>I - 从更改表中插入。</p> </li> <li> <p>d - 从比较和应用中删除。</p> </li> <li> <p>u - 从比较和应用中更新。</p> </li> <li> <p>i - 从比较和应用中插入。</p> </li> </ul> |
| hdr\_\_timestamp | timestamp | UTC 时间戳。 |
| hdr\_\_key\_hash | binary(20) | 所有记录主键的哈希值。<br><br>此列不会在 数据集市 数据任务中生成。 |
| hdr\_\_key\_id | int64 | 每条记录递增的序列。<br><br>此列仅在 数据集市 数据任务中生成。 |

## 视图

以下视图在数据任务目标模式中创建。创建哪些视图取决于您是否启用了实时视图和历史记录，以及是否使用更改处理。

* 标准视图

* 实时视图

* 更改视图

* 历史视图

* 历史实时视图

信息注释所有以 hdr\_\_ 开头的标题列名均被保留。如果您在存储任务中使用视图，则必须在存储任务中重命名使用的标题列以避免命名冲突，因为存储任务将生成具有相同标题列的视图。

### 标准视图

命名：&lt;EXTERNAL\_SCHEMA&gt;.[&lt;PREFIX&gt;]&lt;TABLE\_NAME&gt;

没有标题列添加到表结构中。

### 实时视图

实时视图显示每个选定源表的视图，该视图将表与更改表中的更改合并。这为查询提供了数据的实时视图，而无需等待下一个应用周期。从更改表视图合并的更改在表之间不是事务一致的。

仅当您在数据任务的设置中启用 实时视图 时，才会创建实时视图。

命名：&lt;EXTERNAL\_SCHEMA&gt;.[&lt;PREFIX&gt;]&lt;TABLE\_NAME&gt;&lt; 实时视图后缀&gt;

表标题字段

| 字段 | 类型 | 描述 |
| --- | --- | --- |
| hdr\_\_key\_hash | varbinary(20) | 所有记录主键的哈希值。哈希格式为 SHA1。列由退格字符分隔。<br><br>此列不会在 数据集市 数据任务中生成。 |
| hdr\_\_key\_id | int64 | 每条记录递增的序列。<br><br>此列仅在 数据集市 数据任务中生成。 |
| hdr\_\_from\_timestamp | timestamp | UTC 时间戳<br><br><ul> <li> <p>对于从满负载获取的数据，它将是满负载开始时间。</p> </li> <li> <p>对于通过更改表进行的更改，它将是记录的时间戳字段。</p> </li> </ul> |
| hdr\_\_operation | string(1) | 此记录的最新操作。<br><br><ul> <li> <p>D - 从更改表中删除。</p> </li> <li> <p>U - 从更改表中更新。</p> </li> <li> <p>I - 从更改表中插入。</p> </li> <li> <p>L - 由满负载任务插入。</p> </li> <li> <p>d - 从比较和应用中删除。</p> </li> <li> <p>u - 从比较和应用中更新。</p> </li> <li> <p>i - 从比较和应用中插入。</p> </li> </ul> |
| hdr\_\_inserted\_timestamp | timestamp | 首次添加键的 UTC 时间戳。使用满负载时，为满负载的开始时间。 |
| hdr\_\_modified\_timestamp | timestamp | 应用最后一次更新时的 UTC 时间戳。 |
| hdr\_\_store | varchar(10) | 这指示记录所在的位置。<br><br><ul> <li> <p><span>CURRENT</span> - 如果记录驻留在当前物理表中。</p> </li> <li> <p><span>CHANGES</span> - 如果记录驻留在更改表中。</p> </li> </ul> |

### 更改视图

这是每个选定源表的登陆模式中更改表的视图。

命名：&lt;EXTERNAL\_SCHEMA&gt;.[&lt;PREFIX&gt;]&lt;TABLE\_NAME&gt;\_changes

以下标题字段将添加到表结构中。

更改视图标题字段

| 字段 | 类型 | 描述 |
| --- | --- | --- |
| hdr\_\_change\_identifier | string(50) | 更改标识符是一个包含两部分的字符串：<br><br><ul> <li> <p>自 1970 年 1 月 1 日以来的批处理运行开始时间戳（以毫秒为单位）（10 位字符串）</p> </li> <li> <p>来自复制网关的更改序列（35 个字符）</p> </li> </ul> |
| hdr\_\_from\_timestamp | timestamp | UTC 时间戳<br><br><ul> <li> <p>对于从满负载获取的数据，它将是满负载开始时间。</p> </li> <li> <p>对于通过更改表进行的更改，它将是记录的时间戳字段。</p> </li> </ul> |
| hdr\_\_to\_timestamp | timestamp | UTC 时间戳<br><br><ul> <li> <p>对于从满负载获取的数据，它将是满负载开始时间。</p> </li> <li> <p>对于通过更改表进行的更改，它将是记录的时间戳字段。</p> </li> </ul> |
| hdr\_\_operation | string(1) | 此记录的最新操作。<br><br><ul> <li> <p>D - 从更改表中删除。</p> </li> <li> <p>U - 从更改表中更新。</p> </li> <li> <p>I - 从更改表中插入。</p> </li> <li> <p>L - 由满负载任务插入。</p> </li> <li> <p>d - 从比较和应用中删除。</p> </li> <li> <p>u - 从比较和应用中更新。</p> </li> <li> <p>i - 从比较和应用中插入。</p> </li> </ul> |
| hdr\_\_timestamp | timestamp | UTC 时间戳。 |
| hdr\_\_key\_hash | binary(20) | 所有记录主键的哈希值。<br><br>此列不会在 数据集市 数据任务中生成。 |
| hdr\_\_key\_id | int64 | 每条记录递增的序列。<br><br>此列仅在 数据集市 数据任务中生成。 |

### 历史视图

如果在数据任务设置中启用了 历史记录，则会在数据资产模式中为每个选定的源表生成历史视图。添加了以下标题字段。

命名：&lt;EXTERNAL\_SCHEMA&gt;.[&lt;PREFIX&gt;]&lt;TABLE\_NAME&gt;&lt; 历史视图后缀&gt;

历史视图标题字段

| 字段 | 类型 | 描述 |
| --- | --- | --- |
| hdr\_\_key\_hash | binary(20) | 所有记录主键的哈希值。<br><br>此列不会在 数据集市 数据任务中生成。 |
| hdr\_\_key\_id | int64 | 每条记录递增的序列。<br><br>此列仅在 数据集市 数据任务中生成。 |
| hdr\_\_from\_timestamp | timestamp | UTC 时间戳<br><br><ul> <li> <p>对于从满负载获取的数据，它将是满负载开始时间。</p> </li> <li> <p>对于通过更改表进行的更改，它将是记录的时间戳字段。</p> </li> </ul> |
| hdr\_\_to\_timestamp | timestamp | UTC 时间戳<br><br><ul> <li> <p>对于从满负载获取的数据，它将是满负载开始时间。</p> </li> <li> <p>对于通过更改表进行的更改，它将是记录的时间戳字段。</p> </li> </ul> |
| hdr\_\_was\_current\_from\_timestamp | timestamp | 记录首次成为当前记录的 UTC 时间戳。 |
| hdr\_\_was\_current\_to\_timestamp | timestamp | 记录最后一次成为当前记录的 UTC 时间戳。 |
| hdr\_\_store | varchar(7) | 这指示记录所在的位置。<br><br><ul> <li> <p><span>CURRENT</span> - 如果记录驻留在当前物理表中。</p> </li> <li> <p><span>PRIORS</span> - 如果记录驻留在包含历史数据的先前表中。</p> </li> </ul> |
| hdr\_\_operation | string(1) | 此记录的最新操作。<br><br><ul> <li> <p>D - 从更改表中删除。</p> </li> <li> <p>U - 从更改表中更新。</p> </li> <li> <p>I - 从更改表中插入。</p> </li> <li> <p>L - 由满负载任务插入。</p> </li> <li> <p>d - 从比较和应用中删除。</p> </li> <li> <p>u - 从比较和应用中更新。</p> </li> <li> <p>i - 从比较和应用中插入。</p> </li> </ul> |
| hdr\_\_deleted | bit | 指示记录是否被软删除，基于 hdr\_\_operation 是否为 D 或 d。 |

### 历史实时视图

在数据资产模式中为每个选定的源表生成历史实时视图，该视图将每个选定的源表与更改表中的更改合并。添加了以下标题字段。

命名：&lt;EXTERNAL\_SCHEMA&gt;.[&lt;PREFIX&gt;]&lt;TABLE\_NAME&gt;&lt; 实时历史视图后缀&gt;

实时历史视图标题字段

| 字段 | 类型 | 描述 |
| --- | --- | --- |
| hdr\_\_key\_hash | binary(20) | 所有记录主键的哈希值。<br><br>此列不会在 数据集市 数据任务中生成。 |
| hdr\_\_key\_id | int64 | 每条记录递增的序列。<br><br>此列仅在 数据集市 数据任务中生成。 |
| hdr\_\_store | varchar(10) | 这指示记录所在的位置。<br><br><ul> <li> <p><span>CURRENT</span> - 如果记录驻留在当前物理表中。</p> </li> <li> <p><span>PRIORS</span> - 如果记录驻留在包含历史数据的先前表中。</p> </li> <li> <p><span>CHANGES</span> - 如果记录驻留在更改表中。</p> </li> </ul> |
| hdr\_\_operation | string(1) | 此记录的最新操作。<br><br><ul> <li> <p>D - 从更改表中删除。</p> </li> <li> <p>U - 从更改表中更新。</p> </li> <li> <p>I - 从更改表中插入。</p> </li> <li> <p>L - 由满负载任务插入。</p> </li> <li> <p>d - 从比较和应用中删除。</p> </li> <li> <p>u - 从比较和应用中更新。</p> </li> <li> <p>i - 从比较和应用中插入。</p> </li> </ul> |
| hdr\_\_deleted | bit | 指示记录是否被软删除，基于 hdr\_\_operation 是否为 D 或 d。 |