用户使用DB2定义了Informatica中的连接

时间:2017-09-06 12:25:14

标签: db2 informatica informatica-powercenter

我们正在尝试将源限定符覆盖替换为用户定义的连接和源过滤器。

用于Informatica源限定符中以下用户定义的连接:

{A INNER JOIN B ON a.dept_id= b.dept_id
b.load_date between 20170712174712000000 and 20170904152656000000
LEFT OUTER JOIN C ON a.emp_id =  c.emp_id}

为此我将SQL查询作为

FROM A,B,C WHERE {A INNER JOIN B ON A.dept_id = B.dept_id
AND b.load_date between 20170712174712000000 and 20170904152656000000
LEFT OUTER JOIN C
ON  C ON a.emp_id =  c.emp_id}

我尝试用NORMAL JOIN替换覆盖查询中的INNER JOIN,因为我在某处看到了informatica将normal连接到内部连接。 源数据库是DB2。

2 个答案:

答案 0 :(得分:1)

我对informatica一无所知,但您在问题中列出的结果SQL语法对DB2无效。最大的问题是JOIN子句中的WHERE而不是FROM子句。但不确定如何在informatica中解决这个问题。适当的DB2语法可能是这样的:

FROM a
  INNER JOIN b ON a.dept_id = b.dept_id
  LEFT OUTER JOIN c ON a.emp_id = c.emp_id
WHERE
  b.load_date BETWEEN 20170712174712000000 and 20170904152656000000

这假定b.load_date不是时间戳字段。如果您使用的是时间戳字段,则时间戳的格式应为'2017-07-12 17:47:12.000000'

答案 1 :(得分:0)

T-SQL应该在FROM子句中使用,而不是在WHERE子句中。因此使用:

    def update_capacity(self, components, comp_sample_func):
      for comp_index, (comp_id, component) in enumerate(components.iteritems()):
        for dest_index, dest_comp_id in enumerate(component.destination_components.iterkeys()):
            if component.node_type == 'dependency':
                comp_sample_func[dest_index] *= comp_sample_func[comp_index]

            edge_id = self.comp_graph.get_eid(comp_id, dest_comp_id)
            self.comp_graph.es[edge_id]['capacity'] = comp_sample_func[comp_index]