你好,我正在使用DATASTAGE将hive数据导入Oracle,我在hive中没有任何主键约束,但在Oracle上我有一个组合主键。例如,我有一个数据,它没有基于整个记录的重复,但pk约束有重复Table有columnsTable名称:item_details ;--(hive)没有主键约束。
Id mfg_date item exp_date
1 12-01-2018 Abc 31-03-2018
2 12-01-2018 CDE 28-02-2018
3 15-01-2018 efg 10-04-2018
4 12-01-2018 Abc 10-04-2018
其中mfg_date和item是目标表(Oracle)的主键,而目标表的结构是一样的。
我需要把数据推送到目标表中。
但它说主键违反并被中止。
谁能给我一个解决方案。
Ps. 我们不能改变表的模式
这是我使用的 [[twt]]
这比做Lookup和join阶段要快。
首先将输出sql从 Insert
到 Custom SQL
.
然后你可以创建一个像下面这样的自定义SQL语句。
insert into <<target table>>
select Id, mfg_date, item, exp_date from [[twt]]
where not exist (select 1 from <<target table>> where <<target table>>.id = [[twt]].id)
它将删除那些不存在的记录. 因为 custom sql
允许多条语句,你可以用这种方式完成整个更新。
通过使用 [[twt]]
,你可以将其改为ELT形式的加载,并控制插入。
谢谢。