来源表包含最近2年的数据,例如:
column name: aug_16, sep_16 ... oct_17 ... jul_18, aug_18
列名每月更改一次-添加一列,删除一列。
例如,“下个月”列始于:
sep_16
至sep_18
,这意味着aug_16
将被删除,而sep_18
将被添加。
所以我的问题是:我想将数据复制到另一个Interface
表中,并希望在ODI作业中进行映射,然后再加载到基本表中。我应该如何处理动态列名?
答案 0 :(得分:0)
我想说,最好的选择是放弃这样的数据模型并创建一个新的模型。与其在DDL中做所有事情,不如在DML中做。我的意思是:更改表并添加一个DATE
数据类型列。它将显示该行所属的月份/年份。然后,只需处理WHERE
子句即可处理数据。
Instead of: update interface set sep_16 = (select sep_16 from base)
You would : insert into interface select * from base
where to_char(date_column, 'yyyymm') = '201609'
这只是一个示例,旨在简化总体思路;这样的WHERE
将在DATE_COLUMN
上破坏可能的索引,但是可以处理(例如,通过使用BETWEEN
每月的第一天和最后一天)< / p>