【问题标题】:How to configure ODI to auto-increment rows for IKM Incremental Update如何将 ODI 配置为自动增加行以进行 IKM 增量更新
【发布时间】:2018-11-22 15:30:22
【问题描述】:

我对我的“维度”和 IKM 的自动增量 ID 有疑问:增量更新。

我的源表只有一列:SUPPLIER_NAME。它有 23 行供应商名称。

我的目标表包含两列:SUPPLIER_ID、SUPPLIER_NAME

接下来我想在 SUPPLIER_ID 上为每个新行创建自动增量 ID 并使用 IKM:增量更新 - 有人添加新供应商我只想更新表(添加新行)并为此供应商添加新 ID(自动增量的下一个值) .

我该怎么做?

我在 DB 上创建序列,例如:

Create sequence autoinc start with 1  
increment by 1  
minvalue 1  
maxvalue 1000000;  

在 ODI 中,我创建序列: AutoIncrementDIm --> 增量:1, 原生序列 - 原生序列名称:autoinc

接下来我创建 ODI 映射:

源表(带有一列)映射到目标表(带有 ID 和 NAME)。

将供应商名称映射到供应商名称

对于我使用的 ID:#NFS_HD.AutoIncrementDim_NEXTVAL

在逻辑部分我设置了集成类型:增量更新 在物理部分我为 IKM 设置:IKM Oracle Merge

对于我的第一次跑步来说,一切正常。我对每个供应商都有从 1 到 23 的自动增量。

但是当我在源表中有新的供应商名称的新行并运行我的映射时,我会得到类似的结果:

Results

新行(新供应商)有 47 个 ID ...我认为这是因为序列正在为每一行运行。

我必须更改哪些内容才能更正或更好的解决方案是什么?

【问题讨论】:

    标签: oracle oracle-data-integrator


    【解决方案1】:

    在逻辑映射上,单击您的SUPPLIER_ID 目标属性。在“目标”选项卡的属性窗格中,取消选中“更新”复选框。这意味着该属性不会在更新查询中使用。

    还要确保将 SUPPLIER_NAME 属性设置为键,以便 IKM 使用它来了解何时应该进行插入或更新。

    【讨论】:

    • 您好 JeromeFr,感谢您的回复。它仅适用于更新新行-但是当我在第一次运行时使用像您一样的“解决方案”时-当我有带有供应商ID的空表时||供应商名称,我想运行 ETL,每行和供应商名称的 id = 1。我必须有两个 etl 进程吗?一个用于首先在表中加载数据,第二个用于仅更新新行?
    • 更新:您的解决方案在它只有一个新行时有效 - 当我有 3 个新行时,我会为这些新行获得相同的 ID。
    • 当我使用:#NFS_HD.AutoIncrementDim_NEXTVAL - 我为新行获得相同的 ID(我有 1-24 个供应商,添加新的 3 个供应商,在 etl 之后,我有三个新供应商的三个 25 ID ) :NFS_HD.AutoIncrementDim_NEXTVAL -- 我得到更高的 ID 例如现在我有 1 - 24, 25, 25, 25 --- 接下来我添加两个新供应商并使用 etl,结果如下:1-24,25,25,25 ,53,54.
    • 是的,您需要使用 : 而不是 #。 : 在 PL/SQL 中绑定,而 # 用于在 ODI 级别进行替换。所以对于基于集合的操作 # 将返回相同的值。 : 将返回不同的值。它从 1 跳到 24 的事实是因为 Oracle 序列不是无间隙的。
    猜你喜欢
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 2020-05-12
    • 2012-04-25
    相关资源
    最近更新 更多