跳到主要内容 跳到补充内容

移动 嵌套表

Qlik Talend Data Integration 支持包含嵌套表或定义类型的列的 Oracle 表的 移动。要启用此功能,请在 连接器设置中选择支持嵌套表选项。

数据任务将 Oracle 嵌套表的目标表创建为没有唯一约束的常规表。由于您很可能需要连接父表和子表以获取有意义的数据,因此在目标子表的 NESTED_TABLE_ID 列上手动创建非唯一索引非常重要。然后,可以在 JOIN ON 子句中使用 NESTED_TABLE_ID 列,以及与子表名对应的父列。此外,当数据任务更新/删除目标子表数据时,创建这样的索引将提高性能。

建议将任务配置为在满载完成后停止。完全加载完成后,手动为目标上的所有 已移动 子表创建非唯一索引,然后继续执行任务。

如果将捕获的嵌套表添加到现有父表(捕获或未捕获), 数据任务将正确处理该表,但不会创建相应目标表的非唯一索引。请注意,在这种情况下,如果目标子表变得非常大,性能可能会受到影响。在这种情况下,建议停止任务,创建索引,然后继续执行任务。但是,在继续执行任务之前,我们建议您创建视图,使 已移动 表被展平。这些视图应该包含与您的特定扁平化需求相对应的 JOIN 语句,如下例所示。

先决条件

确保为所有已移动嵌套表创建移动父表。父表(包含嵌套表列的表)和子表(即嵌套)都可以在 Qlik Talend Data Integration 中选择。

支持的嵌套表类型

支持以下嵌套表类型:

  • 数据类型
  • 用户自定义对象

限制

  • 仅支持一级嵌套。
  • Qlik Talend Data Integration 不会验证是否为 移动 同时选择了父表和子表。换句话说,可以选择没有子表的父表,反之亦然。

嵌套表已已移动

父表和嵌套表按如下方式已移动到目标:

  • 父表在类似于源的目标上创建,其中每个嵌套列都定义为 RAW(16)。在每个父表行中,此列将包含与 NESTED_TABLE_ID 列中嵌套的相应子表行相同的值。

  • 如前所述,创建的子表与源表相同,但有一个额外的NESTED_TABLE_ID 列。

JOIN 语句示例

假设 Oracle 源代码中存在以下定义:

  • CREATE OR REPLACE TYPE my_tab_t AS TABLE OF VARCHAR2(30);
  • CREATE TABLE my_parent_table (id NUMBER PRIMARY KEY, col1 my_tab_t) NESTED TABLE col1 STORE AS col1_tab;

在这种情况下,数据任务通常会创建两个目标表,如下所示:

  • CREATE TABLE my_parent_table (id NUMBER PRIMARY KEY, col1 RAW(16));
  • CREATE TABLE col1_tab(nested_table_id RAW(16), column_value VARCHAR2(30));

用于扁平化两个目标表的 JOIN 语句可以定义如下:

  • Select id, column_value from my_parent_table LEFT OUTER JOIN col1_tab child ON child.nested_table_id = parent.col1;
信息注释如果父表包含子表中不存在的记录,则应使用 LEFT OUTER JOIN

本页面有帮助吗?

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