# 存储数据集

您可以使用存储数据任务存储数据集。存储数据任务消耗登陆数据任务放置到云登陆区域的数据。您可以在例如分析应用程序中使用表格。

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

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

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

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

除了在数据仓库中存储表外，您还可以将表存储为由数据平台管理的 Iceberg 表。此选项目前仅适用于 Snowflake 项目。在任务设置中的表类型下选择 Snowflake 托管的 Iceberg 表，就可以实现这一点。

## 创建存储数据任务

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

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

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

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

  有关更多信息，请参阅[将数据引入数据仓库](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Onboarding/Onboarding-data.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. 创建数据模型

   单击模型以设置包含的数据集之间的关系。

   有关更多信息，请参阅[创建数据模型](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Create-data-model.htm)。

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

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

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

   单击运行。

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

信息注释Iceberg 表将继承在架构、数据库或帐户级别设置的存储序列化策略。这可能会影响直接通过 Snowflake 读取表的其他产品的互操作性。

## 保存历史数据

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

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

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

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

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

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

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

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

信息注释Qlik Cloud 用作数据平台时，历史数据不可用。

HDS 数据存储在内部数据模式的先前表格中。您可以使用外部数据模式中的历史视图和实时历史视图来查看历史数据。

* 历史视图合并当前表和先前表中的数据。此视图包括合并的所有更改。

* 实时历史视图合并当前表、先前表和更改表中的数据。此视图还包括尚未合并的所有更改。

有关更多信息，请参阅[云数据仓库中的数据集架构](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Storage/dataset-tables.htm)。

存储

## 计划存储任务

您可以将存储任务计划为定期更新。

* 如果输入登陆数据任务使用满负载和 CDC，则只能设置基于时间的计划。

* 如果输入登陆数据任务使用满负载，则可以设置基于时间的计划，或将任务设置为在输入登陆数据作业完成运行后运行。

  信息注释当您使用满负载通过输入登陆数据任务运行基于时间的计划时，请确保登陆任务仍在运行时，登陆中的每个已完成表都可用。这允许您同时运行登陆和存储，这可以缩短总加载时间。

* 如果项目将数据存储在 Iceberg 表中，则可以设置基于时间的计划，或将任务设置为在关闭任何更改数据分区时运行。

单击数据任务上的 ...，然后选择计划以创建计划。默认计划设置继承自管道项目中的设置。有关默认设置的详细信息，请参阅[存储默认值](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Introduction/Data-project-settings.htm#Storage)。始终要将计划设置为打开才能启用计划。

### 基于时间的计划

无论登陆类型如何，都可以使用基于时间的计划来运行存储数据任务。

* 在运行数据任务中选择在特定时间。

您可以设置每小时、每天、每周或每月计划。

### 基于事件的计划

* 在运行数据任务中选择成功完成任何输入数据任务时。

每次成功完成输入登陆数据任务时，存储任务都将运行。

信息注释登陆连续运行时，如果输入登陆数据任务使用满负载和 CDC，该选项不可用。

## 监视存储任务

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

有关更多信息，请参阅[监视单个数据任务](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Introduction/Monitoring-data-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. 您可以在存储数据任务中重新加载数据。

   如果启用了历史数据，则存储器中的重新加载可能会导致历史数据丢失。如果这是一个问题，请考虑从源重新加载平台。

   [重新加载数据](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Storage/generating-datasets.htm#Reloadin)

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

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

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

### 重新加载数据

您可以手动重新加载表。当一个或多个表出现问题时，这很有用。

1. 打开数据任务，然后选择监视器选项卡。

2. 选择要重新加载的表。

3. 单击重新加载表。

下次运行任务时将进行重新加载，由以下人员执行：

1. 截断表。

2. 将平台数据加载到表格中。

3. 加载从重新加载时间累积的更改。

信息注释

通常，最好在登陆时重新加载数据集。在以下情况下尤其如此：

* 如果启用了历史数据，则存储器中的重新加载可能会导致历史数据丢失。在登陆时重新加载数据集将触发存储中的比较过程，并更正数据保留类型 2 历史。

* 如果满负载是很久以前执行的，并且有大量的变化。

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

将重新加载下游任务以应用更改并避免回溯。如果通过截断和重新加载来执行重新加载，则所有下游对象也将通过截断和再加载来重新加载。

重新加载登陆或存储数据任务后的下游影响

重新加载登陆或存储数据任务后的下游影响

重新加载登陆或存储数据任务后的下游影响 ![存储重新加载下游影响](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/qcdi_reload_downstream_storage.png)

下游的影响取决于执行的重新加载操作的类型和直接下游数据集的类型。标准处理意味着数据集将使用特定数据集的配置方法对数据进行反应和处理。

* 在下游转换任务中：

  数据集转换是通过截断和加载来重新加载的。

  SQL 转换和转换流是通过与满负载进行比较并应用更改来重新加载的。

* 紧随存储任务之后的数据集市任务通过截断和加载来重新加载。

通过单击取消重新加载，可以取消正在等待重新加载的表的重新加载。这不会影响已经重新加载的表，并且当前正在运行的重新加载将完成。

信息注释在 Qlik Cloud 作为目标数据平台的数据项目中不支持重新加载表。

## 模式演变

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

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

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

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

* 应用于目标

  自动应用更改。

* 忽略

  忽略更改。

* 挂起表

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

* 停止任务

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

支持以下更改：

* 添加列

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

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

有关任务设置的更多信息，请参阅[模式演变](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Storage/generating-datasets.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 以查看任务信息，例如：

* 所有者

* 空间

* 数据平台

* 项目 ID

* 数据任务运行时 ID

## 存储设置

当数据平台是云数据仓库时，可以为存储数据任务设置属性。如果用 Qlik Cloud 作数据平台，请参阅[使用 Qlik Cloud 作为数据平台的数据项目的存储设置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Storage/generating-datasets.htm#Storage2)。

* 单击设置。

警告注释如果任务已经运行，则更改运行时设置以外的设置需要重新创建数据集。

### 一般设置

* 数据库

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

* 任务模式

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

* 内部架构

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

* 模式名称的默认大写

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

* 所有表格和视图的前缀

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

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

* 历史记录

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

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

  * 标记为已删除

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

  * 保留

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

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

* 发布至目录

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

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

### 视图设置

* 实时视图

  使用实时视图以最小的延迟读取表。

  有关实时视图的更多信息，请参阅[使用实时视图](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Storage/dataset-tables.htm#Using)。

  信息注释实时视图的效率低于标准视图，并且需要更多的资源，因为应用的数据需要重新计算。

### 查看类型设置

“视图”类型设置仅适用于 Snowflake。

* 标准视图

  在大多数情况下使用标准视图。

* Snowflake 安全视图

  将 Snowflake 安全视图用于为数据隐私或敏感信息保护指定的视图，例如为限制对不应向基础表的所有用户公开的敏感数据的访问而创建的视图。

  信息注释 Snowflake 安全视图的执行速度可能比标准视图慢。

### 运行时设置

* 平行执行

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

* 仓库

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

### 表格类型设置

这些设置仅在以 Snowflake 为数据平台的项目中可用。

* 表类型

  您可以选择使用哪种表格类型：

  * Snowflake 表格

  * Snowflake-托管 Iceberg 表格

    您必须在 Snowflake 外部卷中设置外部卷的默认名称。

* 要使用的云存储文件夹

  选择将数据放置到暂存区时要使用的文件夹。

  * 默认文件夹

    这将创建具有该默认名称的文件夹：&lt;project name&gt;/&lt;data task name&gt;。

  * 根文件夹

    将数据存储在存储的根文件夹中。

  * 文件夹

    指定要使用的文件夹名称。

* 与 Snowflake 开放目录同步

  启用此选项可让 Snowflake 开放目录管理云文件存储中的文件。

### 模式演变

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

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

## 使用 Qlik Cloud 作为数据平台的数据项目的存储设置

当数据平台是作为数据平台的 Qlik Cloud 时，可以设置要在存储中使用的文件夹。

1. 单击设置。

2. 选择要在存储中使用的文件夹。

3. 准备好后单击确定。

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

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

* 打开

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

* 编辑

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

* 删除

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

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

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

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

* 准备

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

  * 验证设计是否有效。

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

  * 为数据任务生成 SQL 代码

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

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

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

* 验证数据集

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

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

* 重新创建表

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

* 停止

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

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

* 恢复

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

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

* 转变数据

  基于规则和自定义 SQL 创建可重用的行级转换。这将创建“变换”数据任务。

  [转换数据](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Transformations.htm)

* 创建数据集市

  创建数据集市以利用您的数据任务。这将创建数据集市数据任务。

  [Creating and managing data marts](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/DataMarts/DataMarts.htm)

## 限制

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

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

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

* 在以 Qlik Cloud (QVD) 为目标的项目中，无法更改存储任务中的主键。更新登陆任务中的主键，重新创建登陆任务，然后重新创建存储任务。

* 在使用 Iceberg 存储时，JSON 数据列将存储为 STRING。