如何在 ODI 12c 的映射中使用 Oracle 查询
how to use an Oracle query in Mapping of ODI 12c
我有一个 table 这样的:
CREATE TABLE risk_test
(id VARCHAR2 (32) NOT NULL PRIMARY KEY,
customer_id varchar2 (40BYTE),
risk number,
day VARCHAR2(50 BYTE))
insert into risk_test values(1,102,15,1);
insert into risk_test values(2,102,16,1);
insert into risk_test values(3,104,11,1);
insert into risk_test values(4,102,17,2);
insert into risk_test values(5,102,10,2);
insert into risk_test values(6,102,13,3);
insert into risk_test values(7,104,14,2);
insert into risk_test values(8,104,13,2);
insert into risk_test values(9,104,17,1);
insert into risk_test values(10,104,16,2);
我想计算 总风险 并将结果保存在新的 table 中。因此,我在 ODI 中创建了一个过程并在其中编写了这个查询:
create table risk_odi as
SELECT o.*,ROUND (
SUM (day_minus_day0 * risk) OVER (PARTITION BY customer_id)
/ SUM (day_minus_day0) OVER (PARTITION BY customer_id),
5) AS total_risk
FROM (SELECT rt.*, (rt.day - MIN (rt.day) OVER (PARTITION BY customer_id)) + 1 AS day_minus_day0
FROM risk_test rt) o
ORDER BY customer_id, TO_NUMBER (day), TO_NUMBER (id)
结果table是这样的:
我的问题是我想在映射中创建table;因此,请您指导我如何使用 聚合组件 或 表达式组件 在映射中 运行 上述查询?
非常感谢任何帮助。
问题已解决。
我在映射中使用这个结构:
首先,我使用过滤器提取最近三十天并将其保存到三十天 table。之后,我使用聚合根据customer_id对数据进行分组,并计算每组中的最小天数。然后将聚合结果与三十天结合起来。最后一个聚合是根据分组customer_id计算total_risk。最后我把数据保存到最后一个table也就是结果
我有一个 table 这样的:
CREATE TABLE risk_test
(id VARCHAR2 (32) NOT NULL PRIMARY KEY,
customer_id varchar2 (40BYTE),
risk number,
day VARCHAR2(50 BYTE))
insert into risk_test values(1,102,15,1);
insert into risk_test values(2,102,16,1);
insert into risk_test values(3,104,11,1);
insert into risk_test values(4,102,17,2);
insert into risk_test values(5,102,10,2);
insert into risk_test values(6,102,13,3);
insert into risk_test values(7,104,14,2);
insert into risk_test values(8,104,13,2);
insert into risk_test values(9,104,17,1);
insert into risk_test values(10,104,16,2);
我想计算 总风险 并将结果保存在新的 table 中。因此,我在 ODI 中创建了一个过程并在其中编写了这个查询:
create table risk_odi as
SELECT o.*,ROUND (
SUM (day_minus_day0 * risk) OVER (PARTITION BY customer_id)
/ SUM (day_minus_day0) OVER (PARTITION BY customer_id),
5) AS total_risk
FROM (SELECT rt.*, (rt.day - MIN (rt.day) OVER (PARTITION BY customer_id)) + 1 AS day_minus_day0
FROM risk_test rt) o
ORDER BY customer_id, TO_NUMBER (day), TO_NUMBER (id)
结果table是这样的:
我的问题是我想在映射中创建table;因此,请您指导我如何使用 聚合组件 或 表达式组件 在映射中 运行 上述查询?
非常感谢任何帮助。
问题已解决。 我在映射中使用这个结构:
首先,我使用过滤器提取最近三十天并将其保存到三十天 table。之后,我使用聚合根据customer_id对数据进行分组,并计算每组中的最小天数。然后将聚合结果与三十天结合起来。最后一个聚合是根据分组customer_id计算total_risk。最后我把数据保存到最后一个table也就是结果