【问题标题】:SSIS - how to use lookup to add extra columns within data flowSSIS - 如何使用查找在数据流中添加额外的列
【发布时间】:2013-03-20 10:48:39
【问题描述】:

我有一个包含以下列的 csv 文件:

Email | Date | Location

我几乎想将它直接放入数据库表中。问题是文件中的位置值是字符串 - 例如:“波士顿”。我要插入的表有一个整数属性LocationId

所以,在我的数据流的中途,我需要做一个数据库查询来获取与 Location 对应的 LocationId。例如:

SELECT Id as LocationId FROM Locations WHERE Name = { location string from current csv row }

并将其作为新值“LocationId”添加到我当前的列集中。

我不知道该怎么做 - 我尝试了查找,但这意味着我必须将查找放在单独的数据流中 - 我的 csv 文件中的列似乎不可用。

我想使用缓存,因为相同的位置会重复很多次,并且我不想在不需要时为每一行运行选择。

总结:

  1. 如何在数据流的中途坚持查找转换(来自不同的源,sql),并将输出与 csv 派生列合并?
  2. 查找使用的转换是否错误?

【问题讨论】:

  • 查找速度足够快且无需缓存。你不需要缓存。如果 LocationID 和 LocationName 来自同一个文件,则需要 2 个数据流和 2 个表。首先,您将在 1 个表中插入 LoactionName 和 LocationID(或生成 LoacationID)。在第二个数据流中,您将插入查找元素并通过 LocationName 获取 LocationID,并将所有内容插入到第二个表中。
  • 嗯。问题是位置名称来自文件,位置 ID 来自数据库。在我从文件中读取名称之前,我无法在数据库中查找 id。
  • 嗯,所以您需要先将该 LocationID 与 LocationName 合并...您使用的奇怪架构
  • 不,我需要使用其中一个输入列查找附加值。

标签: sql-server visual-studio-2008 ssis


【解决方案1】:

查找转换将为您工作,它具有缓存,您可以将所有输入列保存到输出,并从您在查找转换中使用的查询添加列。

您也可以在这里使用合并连接,在某些情况下它是更好的解决方案,但它会带来额外的开销,因为它需要对其输入进行排序。

【讨论】:

  • 我的数据流从平面文件源开始。我如何才能在数据流的中途坚持查找转换(来自不同的源,sql),并将输出与 csv 派生列合并?
  • 在查找转换中,您需要在连接选项卡和列选项卡中定义连接和查询/表(在您的情况下尝试类似“SELECT id, name from Locations”)连接来自源和查找的列(来自源列的位置和来自查找列的名称)以及您希望在输出流中获得的查找列。
  • 啊哈!我认为查找总是必须有一个数据源作为输入......我想我学到了一些东西。
【解决方案2】:

检查一下。

右键单击查找转换 -> 进入显示高级编辑器 -> 进入输入和输出属性。

您可以在此处添加新列,也可以更改现有列的数据类型。 更多信息如何使用查找Click Here

【讨论】:

    【解决方案3】:
    1. 打开平面文件连接管理器,转到“高级”选项卡。
    2. 单击“新建”以添加新列并修改属性。
    3. 现在返回到 Flat File Destination 输出,右键单击 > 映射 > 将查找列映射到新列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 2020-03-18
      相关资源
      最近更新 更多