【问题标题】:Repetition while copying data to SQL table from multiple sheets将数据从多个工作表复制到 SQL 表时重复
【发布时间】:2014-06-13 14:21:18
【问题描述】:

我必须将数据从多个 Excel 表复制到单个 SQL 表。

Excel 输入: Sheet1 的列:fname a、b。 lname c, d. (2 行) Sheet2 的栏目:city boston、austin、state ma、tx。 (2 行)

我的输出 (tMSSqlOutpout) 有 4 行而不是 2 行。 a c 波士顿马,a c 奥斯汀 tx,b d 波士顿马,b d 奥斯汀 tx。

期望的输出:a c boston ma,b d austin tx。 (仅限 2 行)

我该如何管理?

【问题讨论】:

  • 您在 tmap 中进行查找吗?如果是,那么那里的加入条件是什么?可以放一张加入条件的截图吗?
  • 问题中指定的数据没有明显的join key。除了他们所在的顺序之外,还有什么将人员表的第一条记录与城市表的第一条记录联系起来?
  • 是的,这就是问题所在。他们没有任何共同的列可以加入。
  • 不,我没有在 tmap 上进行查找,我创建了之前名为“查找”的作业。这可能是连接被命名为“row2(查找)”的原因,我不确定。
  • 那么是否有可能没有任何连接条件?仅根据条目的顺序进行。

标签: sql excel talend


【解决方案1】:

根据 cmets,您没有加入两个数据集的自然键。相反,您可以为每个数据集生成一个序列,该序列对两个数据集均等递增,并等同于您在每个数据集上的行号。

首先,这应该为您的数据状态敲响警钟,以及如何确定一个数据集中的第 n 行绝对对应于另一个数据集中的第 n 行。在没有添加适当的键的情况下,这有点被严重规范化的味道,并且假设由此产生的数据集将是准确的可能非常危险。

如果您绝对必须这样做,那么您应该为每个数据集分配一个Numeric.sequence。您可以在加入 tMap 之前的 tMap 中执行此操作:

注意"s1" 参数到Numeric.sequence。如果您在其他地方重用它,那么它将增加这个而不是从 1 开始,所以通常您希望为您工作中的每个序列选择一个唯一的名称(尽管显然在某些情况下增加先前定义的序列是您想要的)。

一旦您定义了具有相同起始编号(第二个参数)和相同增量编号(第三个参数)的唯一序列,那么您应该能够在这些实例上创建连接:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2016-08-17
    • 2011-10-12
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    相关资源
    最近更新 更多