# 存储数据集

在一个 Qlik 开放式湖空间 项目中，存储任务将登陆的数据写入 Iceberg 表，以实现高效存储和查询。存储数据任务消耗登陆数据任务放置到云登陆区域的数据。您可以在例如分析应用程序中使用表格。

以下设置和行为适用于 Qlik 开放式湖空间 项目中写入 Iceberg 表的存储任务。

* 存储数据任务持续运行，无法进行安排。

* Qlik 会自动优化 Iceberg 数据表中存储的数据。有关优化过程的更多信息，请参阅[Qlik 开放式湖空间 架构](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Lakehouse/lakehouse-pipeline-architecture.htm)。

* 当登陆数据任务的状态至少为准备就绪时，可以设计存储数据任务。

* 当登陆数据任务的状态至少为准备运行时，可以准备存储数据任务。

存储数据任务将使用与使用的登陆数据任务相同的操作模式（满负载/满负载并持续更新变动）。两种操作模式之间以及监视和控制选项之间的配置属性不同。如果仅在满负载情况下使用云目标登陆数据任务，则存储数据任务将创建登陆表的视图，而不是生成物理表。

信息注释数据任务在其所属项目的所有者的上下文中运行。有关所需角色和权限的更多信息，请参阅[数据空间角色和权限](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/DataSpaces/permissions-data-space.htm)。

## 创建存储数据任务

您可以通过三种方式创建存储数据任务：

* 单击登陆数据任务上的 ...，然后选择存储数据以基于此登陆数据资产创建存储数据任务。

* 在项目中，单击创建，然后单击存储数据。在这种情况下，您需要指定要使用的登陆数据任务。

* 当您装载数据时，将创建存储数据任务。它连接到引入数据时创建的登陆数据任务。

  有关更多信息，请参阅[引入数据至 Qlik 开放式湖空间](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Lakehouse/Onboarding-data-open-lakehouse.htm)。

创建存储数据任务后：

1. 通过单击 ... 并选择打开，打开存储数据任务。  
   存储数据任务将打开，您可以根据登陆数据资产中的表预览输出数据集。

2. 对包含的数据集进行所有必要的更改，例如转换、筛选数据或添加列。

   有关更多信息，请参阅[管理数据集](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Introduction/Managing-datasets.htm)。

3. 添加所需的转换后，可以通过单击验证数据集来验证数据集。如果验证发现错误，请在继续之前修复错误。

   有关更多信息，请参阅[验证和调整数据集](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Introduction/Managing-datasets.htm#Validati)。

4. 单击准备以准备数据任务和所有必需的工件。这可能需要一点时间。

   您可以按照屏幕下部准备进度下的进度进行操作。

5. 当状态显示准备运行时，您可以运行数据任务。

   单击运行。

   数据任务现在将开始创建数据集来存储数据。

## 保存历史数据

您可以保留类型 2 的历史更改数据，以便在特定时间点重新创建数据。这将创建一个完整的历史数据存储 (HDS)。

* 支持类型 2 缓慢变化的维度。

* 合并更改的记录时，它将创建一个新记录来存储更改的数据，并保留旧记录。

* 新的 HDS 记录自动带有时间戳，让您可创建趋势分析和其他面向时间的分析数据集市。

您可以通过单击以下按钮启用历史数据：

* 引入数据时，在设置中复制当前数据和以前数据的历史记录。

* 在存储任务的设置对话框中保留历史更改记录和更改记录存档。

## 计划存储任务

Qlik 开放式湖空间 项目中的存储任务以一分钟的迷你批次连续运行，不能进行安排。

## 监视存储任务

您可以通过单击监视来监视存储任务的状态和进度。

有关更多信息，请参阅[监控一个 Qlik 开放式湖空间 存储任务](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Introduction/Monitoring-qol-storage-tasks.htm)。

## 对存储数据任务进行故障排除

当存储数据任务中的一个或多个表出现问题时，可能需要重载或重新创建数据。有几个选项可用于执行此操作。考虑按以下顺序使用哪个选项：

1. 您可以在登陆时重载数据集。在登陆时重载数据集将触发存储中的比较过程，并更正数据保留类型 2 历史。在以下情况下也应考虑此选项：

   * 满负载是很久以前执行的，并且有大量的更改。

   * 如果已处理的满负载和变更表记录已作为登陆区维护的一部分被删除。

   [从数据源登陆数据](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Landing/Landing-data-data-sources.htm)

2. 您可以重新创建表。这将从源重新创建数据集。

   * 单击 ...，然后单击重新创建表。重新创建表时，下游任务的反应就像源数据集上发生了截断和重新加载操作一样。

     信息注释如果个别表存在问题，建议首先尝试重新加载表，而不是重新创建它们。重新创建表可能会导致历史数据丢失。如果存在中断更改，还必须准备使用重新创建的数据任务的下游数据任务，以重新加载数据。

## 模式演变

模式演化允许您轻松检测多个数据源的结构更改，然后控制这些更改将如何应用于您的任务。模式演化可用于检测对源数据模式所做的 DDL 更改。您还可以自动应用一些更改。

信息注释模式演化不适用于 Qlik Talend Cloud Starter 订阅。当使用 SaaS 应用程序连接器时，仅支持数据类型更改。

对于每种更改类型，您可以在任务设置的模式演变部分选择如何处理更改。您可以应用更改、忽略更改、挂起表或停止任务处理。

您可以设置用于处理每种更改类型的 DDL 更改的操作。某些操作并不适用于所有更改类型。

* 应用于目标

  自动应用更改。

* 忽略

  忽略更改。

* 挂起表

  挂起表。监视器将显示表格错误。

* 停止任务

  停止任务处理。如果您想手动处理所有架构更改，这很有用。这也将停止调度，即不会执行计划运行。

支持以下更改：

* 添加列

* 创建符合选择模式的表格

  如果使用选择规则添加与模式匹配的数据集，则将检测并添加符合模式的新表。

有关任务设置的更多信息，请参阅[模式演变](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Lakehouse/storing-data.htm#Schema)。

信息注释如果存在尚未自动应用于存储的模式演化更改，则必须验证并准备存储任务。

### 模式演变的限制

模式演变有以下限制适用：

* 只有使用 CDC 作为更新方法时，才支持模式演变。

* 更改模式演变设置后，必须重新准备任务。

* 如果重新命名表，则不支持模式演变。在这种情况下，您必须在准备任务前刷新元数据。

* 如果您正在设计任务，则必须刷新浏览器才能接收模式演变更改。您可以设置通知，以便在更改时收到警报。

* 在登陆任务中，不支持删除列。删除列和添加列会导致表格错误。

* 在登陆任务中，删除表操作不会将表丢弃。如果删除一个表后再添加一个表，只会截断旧表，而不会添加新表。

* 并非所有目标都能更改列的长度，这取决于目标数据库的支持情况。

* 如果更改了列名，使用该列定义的显式转换将不会生效，因为这些转换是基于列名的。

* 刷新元数据的限制也适用于模式演变。

* 如果任务包含尚未准备好的设计更改，并且在任务运行时检测到源架构演变更改，则任务将停止以避免冲突。准备待定设计更改并再次运行任务。

捕获 DDL 更改时，会受到以下限制：

* 当源数据库中发生一系列快速操作时（例如，DDL &gt; DML &gt; DDL），Qlik Talend Data Integration 可能会以错误的顺序解析日志，导致数据丢失或行为不可预测。为了尽量减少这种情况发生的可能性，最佳做法是等待更改应用于目标，然后再执行下一个操作。

  例如，在变更捕获过程中，如果源表被快速连续重命名多次（第二次操作将其重命名回原始名称），则可能会遇到该表已存在于目标数据库中的错误。

* 如果更改任务中使用的表的名称，然后停止任务，则在任务恢复后 Qlik Talend Data Integration 将不会捕获对该表所做的任何更改。

* 不支持在任务停止时重命名源表。

* 不支持重新分配表的主键列（因此不会写入 DDL 历史控制表）。

* 当一列的数据类型发生变化，并且*在*任务停止时重命名了（相同的）列时，DDL 更改将在任务恢复时在 DDL 历史控制表中显示为“删除列”，然后显示为“添加列”。请注意，延迟延长也可能导致相同的行为。

* 在任务停止时对源执行的 CREATE TABLE 操作将在任务恢复时应用于目标，但不会在 DDL 历史控制表中记录为 DDL。

* 与元数据更改相关的操作（如 ALTER TABLE、reorg、重建聚集索引等）如果在以下情况下执行，可能会导致不可预测的行为：

  * 满负载期间

    -或者-

  * 在开始处理更改自时间戳和当前时间之间（即用户在高级运行选项对话框中单击确定的时刻）。

    示例：

    IF：

    指定的开始处理更改自时间为上午 10:00。

    AND：

    上午 10:10 时，雇员表中添加了名为年龄的列。

    AND：

    上午 10:15，用户在高级运行选项对话框中单击确定。

    THEN：

    10:00 至 10:10 之间发生的更改可能会导致 CDC 错误。

  信息注释

  在上述任何情况下，必须重新加载受影响的表，以便数据正确已移动到目标。

* DDL 语句 `ALTER TABLE ADD/MODIFY <column> <data_type> DEFAULT <>` 不会将默认值复制到目标，并且新的/修改的列设置为 NULL。请注意，即使过去执行了添加/修改列的 DDL，也可能发生这种情况。如果新的/修改的列可以为空，则源端点会在记录 DDL 本身之前更新所有表行。因此，Qlik Talend Data Integration 会捕获更改，但不会更新目标。由于新列/修改列被设置为 NULL，如果目标表没有主键/唯一索引，后续更新将生成 "零行受影响 "消息。

* 不会捕获对 TIMESTAMP 和 DATE 精确度列的修改。

## 删除任务

如果数据任务未运行，并且同一项目中没有下游任务依赖项，则可以删除该数据任务。

* 在项目的管道项目视图中，单击任务上的the 删除 icon，然后选择。

此任务创建的工件（表和视图）也将被删除，除非您选择保留它们。

信息注释请记住，您保留的工件将不再由该任务更新。

## 查看任务信息

点击菜单栏上的 the 信息 icon 以查看任务信息，例如：

* 所有者

* 空间

* 数据平台

* 项目 ID

* 数据任务运行时 ID

## 存储设置

当数据平台为 Qlik 开放式湖空间 时，您可以设置存储数据任务的属性。

* 单击设置。

## 一般设置

* 数据库

  要在数据源中使用的数据库。

* 任务模式

  可以更改存储数据任务模式的名称。默认名称是存储任务的名称。

* 内部架构

  可以更改内部存储数据资产模式的名称。默认名称是附加了 \_internal 的存储任务的名称。

* 模式名称的默认大写

  您可以为所有架构名称设置默认大小写。如果您的数据库配置为强制大写，则此选项将无效。

* 所有表格和视图的前缀

  可以为使用此任务创建的所有表和视图设置前缀。

  信息注释如果要在多个数据任务中使用数据库架构，则必须使用唯一的前缀。

* 历史记录

  您可以保留历史更改数据，以便于在特定时间点重新创建数据。您可以使用历史视图和实时历史视图查看历史数据。选择保留历史记录和更改记录存档以启用历史更改数据。

* 将存储与登陆进行比较时，您可以选择如何管理登陆中不存在的记录。

  * 标记为已删除

    这将执行登陆中不存在的记录的软删除。

  * 保留

    这将保留登陆中不存在的所有记录。

  信息注释存储数据任务中的数据集必须具有主键集。如果没有，每次重新加载登陆数据时，都会对存储数据任务执行初始加载。

* 发布至目录

  选择此选项可将此版本的数据作为数据集发布到目录。目录内容将在下次准备此任务时更新。

  有关目录的更多信息，请参阅[通过目录工具理解您的数据](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Catalog/catalog-overview.htm)。

### 运行时设置

* 平行执行

  您可以将满负载的最大连接数设置为 1 到 5 之间的数字。

* 仓库

  云数据仓库的名称。此设置仅适用于 Snowflake。

### 模式演变

选择如何处理架构中以下类型的 DDL 更改。更改模式演变设置后，必须重新准备任务。选择如何处理架构中以下类型的 DDL 更改。

| DDL 更改 | 应用于目标 | 忽略 | 停止任务 |
| --- | --- | --- | --- |
| 添加列 | 支持 | 支持 | 支持 |
| 创建表格<br><br>如果使用选择规则添加与模式匹配的数据集，则将检测并添加符合模式的新表。 | 支持 | 支持 | 支持 |

## 存储数据任务上的操作

您可以从任务菜单中的任务菜单对存储数据任务执行以下操作。

* 打开

  这将打开存储数据任务。您可以查看表结构和有关数据任务的详细信息，并监视满负载和批量更改的状态。

* 编辑

  您可以编辑任务的名称和描述，并添加标记。

* 删除

  您可以删除数据任务。

* 准备

  此操作将为任务的执行做好准备。相关准备包括：

  * 验证设计是否有效。

  * 创建或更改物理表和视图以匹配设计。

  * 为数据任务生成 SQL 代码

  * 为任务输出数据集创建或更改目录条目。

  您可以按照屏幕下部准备进度下的进度进行操作。

  信息注释在准备任务之前，停止所有直接下游的任务。

* 验证数据集

  这将验证数据任务中包含的所有数据集。

  展开验证并调整以查看所有验证错误和设计更改。

* 重新创建表

  这将从源重新创建数据集。重新创建表时，下游任务的反应就像源数据集上发生了截断和重新加载操作一样。有关更多信息，请参阅[对存储数据任务进行故障排除](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Lakehouse/storing-data.htm#Troubles)。

* 停止

  您可以停止数据任务的操作。数据任务将不会继续更新表。

  信息注释此选项在数据任务运行时可用。

* 恢复

  您可以从数据任务停止的时间点恢复其操作。

  信息注释此选项在数据任务停止时可用。

* 镜像数据

  将 Qlik 开放式湖空间 表镜像到其他数据平台。这将创建一个镜像数据任务。

  [将数据镜像到云数据仓库](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Lakehouse/mirroring-data.htm)

## 限制

* 如果数据任务包含数据集，并且您更改了连接中的任何参数，例如用户名、数据库或模式，则假定数据存在于新位置。如果不是这样，您可以：

  * 将源中的数据移动到新位置。

  * 使用相同的设置创建新的数据任务。