# 从数据源登陆数据

引入时传输数据的第一步是登陆数据。这涉及将数据从数据源传输到登陆区域。

您可以通过源连接从多个数据源获取数据。

登陆区域是在创建项目时定义的。

* Qlik Cloud （通过 Amazon S3）

  将数据登陆到 Qlik Cloud（经由 Amazon S3）中，可以用其生成可供在 QVD 中分析的 Qlik Cloud 表。

* 云数据仓库

  如果将数据放入云数据仓库，例如 Snowflake 或 Azure Synapse Analytics，则可以在同一个云数据仓库中存储表。

* Qlik Open Lakehouse

  当您将数据登陆到 Qlik Open Lakehouse 时，您的数据将以 Iceberg 开放表格式存储，并可镜像到您的云数据仓库。

您还可以将数据登陆到 Lakehouse，在那里数据被登陆到 Snowflake 管理的云文件存储。有关更多信息，请参阅[将数据登陆到 Lakehouse](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Landing/Lake-landing.htm)。

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

## 创建和配置登陆数据任务

这里介绍如何创建登陆数据任务。创建数据管道的最快方法是录入数据，由此创建登陆数据任务和存储数据任务，这些资产会准备就绪并可直接运行。有关更多信息，请参阅[将数据引入数据仓库](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Onboarding/Onboarding-data.htm)。

1. 在您的项目中，单击创建，然后选择登陆数据。

2. 在登陆数据对话框中，输入数据任务的名称和描述。

   选择打开可在创建登陆数据任务时打开它。

   单击创建。

3. 单击选择源数据。

4. 选择与源数据的连接，然后单击下一步。

   您可以使用左侧面板中的筛选器来筛选源类型、空间和所有者的连接列表。

   如果尚未建立到源数据的连接，则需要通过单击添加连接先创建一个：

   有关设置与支持的源的连接的详细信息，请参阅[设置与数据源的连接](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Landing/connecting-data-2.htm)。

   信息注释在下一步中选择表后，无法将源连接从本地数据源更改为云数据源，反之亦然。您只能更改与同一类型的其他数据源的连接。

5. [](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Landing/Landing-data-data-sources.htm)选择要包含在数据任务中的数据集。根据所连接的源的类型，选择对话框会有所不同。

   选择了表格后，单击保存。

   即会显示数据集。

6. 您可以更改登陆的设置。这并非必需。

   * 单击设置。

   有关更多信息，请参阅[登陆设置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Landing/Landing-settings.htm#Landing)。

7. 您现在可以预览所选数据资产表的结构和元数据。这包括所有显式列出的表以及与选择规则匹配的表。

   如果要从数据源中添加更多表，请单击选择源数据。

8. 您可以对数据集执行基本转换，例如筛选数据或添加列。这并非必需。

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

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

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

10. 准备好后，单击准备对数据任务进行编目并准备好执行。

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

11. 当数据任务准备就绪，并且您已准备好开始导入数据时，单击运行。

数据载入现在应该开始了，您可以在监视器中看到进度。有关更多信息，请参阅[监视单个数据任务](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Introduction/Monitoring-data-tasks.htm#Monitori)。

### 从数据库选择数据

可以选择特定的表格或视图，或使用选择规则包括或排除表格组。

信息注释如果选择包含视图，则不支持 CDC。

使用 % 作为通配符来定义架构和表的选择条件。

* %.% 定义所有架构中的所有表。

* Public.% 定义所有架构 Public 中的所有表。

选择条件根据您的选择提供预览。

您现在可以：

* 根据选择条件创建规则以包含或排除一组表。

  单击从选择标准添加规则以创建规则，然后选择包含或排除。

  您可以在选择规则下查看规则。

* 选择一个或多个数据集，然后单击添加选定的数据集。

  您可以在显式选择的数据集下查看添加的数据集。

选择规则仅适用于当前的表和视图集，而不适用于将来添加的表和视图。

## 使用更改数据捕获 (CDC) 运行登陆任务

准备好后，您可以运行登陆任务。这将启动复制，该任务将本地数据源中的数据传输到登陆区域。

* 单击运行以启动登陆数据。

复制现在应该开始，数据任务的状态将为正在运行。首先，复制整个数据源，然后跟踪更改。这意味着，在发现更改时，会不断跟踪和传输更改。这使登陆区域中的登陆数据保持最新。

在 Qlik Talend Data Integration 主页中，您可以查看登陆数据更新的状态、日期和时间，以及出错的表数。您还可以打开数据任务并选择表标签来查看表的基本元数据信息。

您可以通过打开监视器选项卡来详细监控进度。有关更多信息，请参阅[监视单个数据任务](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Introduction/Monitoring-data-tasks.htm#Monitori)。

如果创建了所有表并且处理了第一组更改，则当数据任务中存在截至该时间的源更改时，数据任务卡上显示数据更新为。

### 重新加载表

您可以从源重新加载数据。

#### 重新加载单个表

您可以手动重新加载特定表，而不会干扰更改数据捕获。当一个或多个表出现 CDC 问题时，这很有用。

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

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

3. 单击重新加载表。

信息注释该登陆任务至少运行一次后，此选项将变得可用。如果在登陆任务未运行时单击，则将在下一次任务运行时重新加载表。

如果无法通过重新加载表来解决问题，或者这些问题影响到整个任务，则可以将所有表重新加载到目标。这将重新启动更改数据捕获。

#### 将所有表重新加载到目标。

如果遇到无法通过重新加载特定表来解决的 CDC 问题，则可以将所有表重新加载到目标。问题的示例包括丢失事件、源数据库重组引起的问题或读取源数据库事件时失败。

信息注释此操作仅适用于具有更新方法更改数据捕获 (CDC) 并且至少运行过一次的任务。

1. 停止数据任务和所有使用它的任务。

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

3. 点击 ...，然后重新加载目标。

这将使用 Drop-Create 将所有表重新加载到目标，并将从现在起重新启动所有更改数据捕获。

* 消耗登陆数据任务的存储任务将通过比较重新加载，并在下次运行时应用以保持同步。现有历史将被保留。类型 2 历史记录将更新，以反映执行重新加载和比较进程后的变化。

  类型 2 历史记录中的起始日期的时间戳将反映重新加载日期，而不一定是源中发生更改的日期。

* 在重新加载目标操作期间以及在存储同步之前，存储实时视图将不可靠。存储将在以下情况下完全同步：

  * 使用比较和应用重新加载所有表，

  * 每个表执行一个更改周期。

信息注释不支持元数据更改。如果源中有元数据更改，则在重新加载数据时会将其传播到登陆位置，但不会正确处理。这可能会导致消耗的存储发生故障。

## 通过满负载和比较运行登陆数据任务

数据准备好后，可以使用登陆数据任务复制数据。

* 单击运行以开始完全加载。

现在将开始复制数据，数据任务的状态为正在运行。复制完整数据源时，状态为完成。

在 Qlik Talend Data Integration 主页中，您可以查看登陆数据更新的状态、日期和时间，以及出错的表数。您还可以打开数据任务并选择表标签来查看表的基本元数据信息。

您可以通过打开监视器选项卡来详细监控进度。有关更多信息，请参阅[监视单个数据任务](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Introduction/Monitoring-data-tasks.htm#Monitori)。

如果加载了所有表，则当数据任务中存在截至该时间的源更改时，数据资产卡上显示数据更新为。但是，数据任务的某些表可以在以后更新，具体取决于它们开始加载的时间。这意味着无法保证数据的一致性。例如，如果加载从08:00开始，耗时4小时，则加载完成时，数据更新为显示 08:00。但是，在 11:30 开始重新加载的表将包括 08:00 到 11:30 之间发生的源更改。

数据更新为仅反映成功加载的表。它并不表示表的重新加载失败。在云目标中，如果重新加载完成且所有表都出错，则该字段将为空。

### 使用重新加载和比较时重新加载数据

使用重新加载和比较作为更新方法时，需要重新加载数据以使其与数据源保持同步。

* 单击重新加载以手动重新加载所有表。

* 设置计划的重新加载。

  有关更多信息，请参阅[Scheduling tasks](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Deploying/Scheduling-tasks.htm)。

#### 重新加载单个表

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

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

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

3. 单击重新加载表。

信息注释

* 此选项将在登陆任务至少运行一次后，且仅在任务未运行时可用。
* 不支持元数据更改。如果源中有元数据更改，则在重新加载数据时会将其传播到登陆位置，但不会正确处理。这可能会导致消耗的存储发生故障。

### 安排重新加载和比较登陆数据任务

如果您在数据任务空间中具有可以操作角色或可以编辑角色，则可以为登陆数据任务安排定期重新加载。数据任务状态必须至少准备好，计划才能处于活动状态。

* 单击数据任务上的 ...，然后选择计划。

  您可以设置基于时间的计划。

  有关更多信息，请参阅[Scheduling tasks](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Deploying/Scheduling-tasks.htm)。

  有关根据数据源类型和订阅层的最小调度间隔的信息，请参阅[允许的最小调度间隔](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Admin/subscription-options-QTC.htm#Minimum)。

信息注释如果在计划重新加载即将开始时数据任务仍在重新加载，则将跳过计划重新加载，直到下一个计划重新加载事件。

## 设置数据集的加载优先级

您可以通过为每个数据集指定加载优先级来控制数据任务中数据集的加载顺序。例如，如果您想先加载较小的数据集，然后再加载较大的数据集，这就很有用。

1. 点击加载优先级。

2. 为每个数据集选择加载优先级。

   默认加载优先级为正常。数据集将按以下优先顺序加载：

   * 最高

   * 较高

   * 高

   * 正常

   * 低

   * 较低

   * 最低

   具有相同优先级的数据集不分先后加载。

3. 单击确定。

信息注释来自 SaaS 应用程序源的数据集可能包含加载顺序依赖关系。设置负载优先级时应考虑这一点。

## 对登陆数据任务的操作

您可以从任务菜单对登陆数据任务执行以下操作。

* 打开

  这将打开登陆数据任务。您可以查看表结构和有关数据任务的详细信息。

* 编辑

  您可以编辑任务的名称和描述。

* 删除

  您可以删除数据任务。

  以下对象未被删除：

  * 登陆区中的数据

  * 目标平台中的架构

* 运行

  您可以运行数据任务以开始复制数据。

  [使用更改数据捕获 (CDC) 运行登陆任务](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Landing/Landing-data-data-sources.htm#Running)

  [通过满负载和比较运行登陆数据任务](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Landing/Landing-data-data-sources.htm#Running2)

* 停止

  您可以停止正在运行的数据任务的操作。登陆区域不会使用更改的数据进行更新。

  使用重新加载计划停止满负载数据任务时，仅停止当前重新加载。如果数据任务状态为停止，并且有活动的重新加载计划，它将在下一个计划时间再次重新加载。必须在计划重新加载中关闭重新加载计划。

* 重新加载

  您可以在重新加载和比较更新模式下手动重新加载数据任务。

* 准备

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

  * 验证设计是否有效。

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

  * 为数据任务生成 SQL 代码。

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

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

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

* 重新创建表

  这将从源重新创建数据集。

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

* 计划

  可以在完全加载模式下为登陆数据任务设置计划重新加载。您可以设置可以自定义的基于时间的计划。

  您还可以打开或关闭计划的重新加载。

  您必须在数据任务的空间上具有可以运算角色才能计划重新加载。

  有关更多信息，请参阅[Scheduling tasks](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Deploying/Scheduling-tasks.htm)。

* 存储数据

  您可以创建使用此登陆数据任务中的数据的存储数据任务。

## 模式演变

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

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

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

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

* 应用于目标

  自动应用更改。

* 忽略

  忽略更改。

* 挂起表

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

* 停止任务

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

支持以下更改：

* 添加列

* 重命名列

* 更改列数据类型

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

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

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

您还可以获得有关使用模式演进处理的变更的通知。有关更多信息，请参阅[设置操作更改通知](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Introduction/Notifications.htm)。

### 模式演变的限制

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

* 只有使用 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 精确度列的修改。

### 处理未自动应用的更改

这描述了如何处理无法应用于目标的更改，即操作为“忽略”、“挂起”或“停止任务”时的更改。

| DDL 更改 | 实施变更 | 保留当前状态 |
| --- | --- | --- |
| 添加列 | 刷新元数据，准备任务，然后运行任务。 | 无需操作 |
| 创建表格 | 刷新元数据，准备任务，然后运行任务。 | 无需操作 |
| 更改列数据类型 | 如果没有限制适用，则检查限制：<br><br>刷新元数据，准备任务，然后运行任务。 | 并不总是支持当前状态的保留。可能的解决方法<br><br><ul> <li> <p>手动更改列数据类型这需要在下游任务中重复进行。</p> </li> <li> <p>创建一个新列，将旧列导向新列，然后手动创建一个视图，将两列合并。</p> </li> </ul> |
| 重命名表格 | 如果没有限制适用，则检查限制：<br><br>准备任务，然后运行任务。 | 为旧名称定义显式重命名规则。 |
| 重命名列 | 如果没有限制适用，则检查限制：<br><br>刷新元数据，准备任务，然后运行任务。 | 刷新元数据，然后为旧名称定义显式重命名规则。 |

## 删除列

如果删除由启用了历史记录的存储数据任务使用的列，则需要遵循以下步骤来保留历史记录并避免可能的数据丢失。

1. 停止登陆数据任务。

2. 运行存储数据任务，确保所有登陆数据都被读取。

3. 删除登陆中的列。

4. 运行登陆数据任务。

5. 在存储中，添加带有默认表达式（Null 或默认值）的列，或者删除该列。

## 查看任务信息

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

* 所有者

* 空间

* 数据平台

* 项目 ID

* 数据任务运行时 ID

## 更改源连接或数据网关

如果更改源连接或源数据网关，则必须重新创建所有数据表。

## 登陆区域维护

不支持自动清理登陆区域。这可能影响性能。  
我们建议您手动清除登陆区域中旧的满负载数据。

* Qlik Cloud （通过 Amazon S3）

  如果有多个满载数据的文件夹，则可以删除最新文件夹以外的所有文件夹。还可以删除已处理的更改数据分区。

* 云数据仓库

  您可以删除完全加载并更改已处理的更改表记录。

## 建议

* 如果可以更新源表中的主键，请在更改处理调整中启用更新主键列选项时 DELETE 和 INSERT 选项。

## 限制

* 不支持复制长度超过 8000 字节的 varchar 数据或长度超过 4000 字节的 Nvarchar 数据。

* 移动的列不支持更改可空性，无论是直接更改还是使用转换规则。但是，默认情况下，任务中创建的新列可以为空。

* 默认情况下，CLOB 和 BLOB 类型的源列将设置为可为 Null，即使在源中标记为不可为 Null。您可以将其改为不可为 Null，但这样您就需要添加一个表达式来添加一个非 Null 值，以防从源代码使用它时它为 Null。这种情况可能发生在已删除的记录上。

转换受以下限制：

* 语序为从右向左的语言的列不支持转换。

* 无法对名称中包含特殊字符（例如 #、\、/、-）的列执行转换。

* LOB/CLOB 数据类型唯一支持的转换是删除目标上的列。

* 不支持使用转换重命名列，然后添加同名的新列。