【问题标题】:Database lookup in TalendTalend 中的数据库查找
【发布时间】:2014-06-06 14:20:14
【问题描述】:

在我的工作中,我将数据从 Excel 复制到 SQL 表。 为了维护外键约束,我必须在复制数据之前进行查找。

任务是这样的。 我必须复制 Table2 中的数据(id 键值)。 我的 excel 表有 id 和 keys 列的数据。表 1 有两列 id 和 value。

对于value列的数据,我想看一下Table1对应的表项,表2中当前记录的id。我必须将 Table1 的 value 列中的数据复制到 Table2 的 value 列。

Excel(id 1 2 3,键 a b c) Table_1(id 1 2 3,值 123 456 789) 所需输出:Table_2(id 1 2 3,键 a b c,值 123 456 789) 当前输出:Table_2(id 1 2 3,keys a b c,value null null null)

我如何正确映射它?

【问题讨论】:

  • 您能否按原样展示您的两个表的示例以及您希望结果的外观?事实上,听起来你想让表 1 看起来像表 2,我猜这不是你想要的。
  • 抱歉,我的问题不清楚。我需要进行数据库查找以保持外键约束。我在这里找到了这样做的方法.. appirio.com/category/tech-blog/2009/12/…
  • 我仍然需要在此处查看您的两个表的示例和示例输出以帮助您。您不必为此使用真实数据。
  • 借助该链接中解释的内容,我能够解决我的问题。我不记得确切但我的数据是这样的...... Excel表:ID 1 2 3,值50 60 70。表2:ID 1 2 3,名称x y z,键A B C。输出表1:ID 1 2 3,键 A B C,值 50 60 70。
  • 我已经添加了我的问题并提供了屏幕截图。我没有得到“价值”列的值。

标签: sql lookup talend


【解决方案1】:

您已经完全按照实际需要完成了工作,所以这里的问题不是您的工作布局。

如果您希望 Excel 文档中的每条记录在数据库表中都有匹配的记录,那么您应该在 tMap 连接中使用inner join 条件,如下所示:

然后,这允许您获得一个输出来抓取所有未加入的内容(这是您的问题):

这应该会显示您的源(不是查找)文件中不匹配的所有内容。我怀疑一切都不符合您的加入条件(本质上是WHERE ExcelDoc.id = Table.Id),即使看起来应该如此。这可能归结为数据类型在读入 Talend 时不匹配(因此 Java/Talend 数据类型,例如 int/Integer 或 String 而不是 DB 类型),或者因为您的 id 列之一具有无关的空白填充。

如果您发现您的某个来源中的 id 列实际上有任何填充,那么您应该能够在加入之前的上一步中对其进行转换,甚至只是在加入中进行转换:

我唯一推荐的另一件事是在组件之间命名流(只需单击它们即可更改名称),尤其是在加入 tMap 中的任何内容时。

【讨论】:

  • 我试过 .trim(),但它不起作用。所以我假设问题出在数据类型上。我的 Table_2 的 id 和 value 列具有字符串数据类型和 VARCHAR 作为它们的 DBtype,如 Schema 中所定义。
  • 在尝试加入数据集之前,请正确配置两个数据集。修剪只是一个示例,说明为什么看起来与连接表中的记录匹配的内容不会被匹配。如果您使用数据剖析透视图,您应该能够对您的数据集进行分析,或者您也可以手动进行。
  • 当我再次检查时,我看到表_1 中有值。映射中的数据类型是字符串。我将 DB 类型保留为 nchar,因为 Tables 的架构将其保留为 nchar。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 2016-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多