Talend:已定义字符串/参数的查询数据库

use*_*555 4 sql database oracle talend

如何对我的数据库执行查询(使用tOracleInput),如Select,并使用已在其他组件中定义为参数的字符串,例如在'tFlowToIterate'中?

例如:" SELECT*from TABLE_X where FIELD_X =?; "

我的'?' 是来自我的tFlowToIterate组件(foo)的变量.我已经尝试过使用(String)globalMap.get("foo")和其他类似的表单...

谢谢

[Talend Open Studio for Data Integration v5.3.1; DB:Oracle]

Gab*_*e B 7

你自己回答.tOracleInputcomponent接受查询作为参数.这是一个非常无聊的java字符串,不多也不少.这意味着如果要在查询中使用globalMap元素,则只需要执行java String连接.像这样的东西:

"SELECT * from TABLE_X where FIELD_X='" + (String)globalMap.get("foo") + "'"
Run Code Online (Sandbox Code Playgroud)

但是这不会工作(在引号仔细看):

"SELECT * from TABLE_X where FIELD_X='(String)globalMap.get("foo")'"
Run Code Online (Sandbox Code Playgroud)

请记住,如果使用字符串连接和外部变量编写查询,查询编辑器可能会弄乱所有引号,从而生成破坏的查询.

作为一般建议,我从不建议在数据库输入组件中使用"*"运算符tOracleInput.Talend具有在编译时生成的固定方案结构.这意味着如果有一天你将向TABLE_X添​​加一列,那么你的ETL将会失败.

更强大的解决方案如下:

  1. 使用*运算符记下您的查询
  2. 单击"猜测架构"以检索表架构并放入组件元数据
  3. 现在单击"猜测查询"以明确重写SELECT
  4. 如果需要,修复查询(即WHERE条件......)