0

我不知道该怎么做,因为我能够在具有平面文件源的列中完全阅读,但是如果某些东西是可用的,我需要将它们分成单独的列。

例子:

line 1)  2013-08-23 14:03:17 ipaddress:port @client POST /api func_0() result(0)

line 2) 2013-08-23 14:03:18 ipaddress:port @client POST /api/logout LOGOUT  
  (lm=local,haspid=randomnumbers,feat=0,sess=0000007E,duration=8400) result(0)

line 3)  2013-08-23 14:03:18 ipaddress:port @client POST /api/logout LOGOUT  
  (lm=local,haspid=randomnumbers,feat=1,sess=0000007D,duration=8408) result(0)

(为易读而包装:这三个中的每一个实际上都是一条长线)

我需要做某种派生列来将 sess= 和 duration= 的内容拆分为它们自己单独的列,但是正如您所看到的,有时函数列是不同的并且包含一个空的 func_0 或其他一些类型的函数, 因此无法通过在平面文件源读取中对其进行分隔来完成。

有任何想法吗?

4

2 回答 2

1

我会在这里使用脚本转换。您可以使用正则表达式或简单的 string.contains 来查看 /api 列中是否有数据。

然后使用 split() 或 regEx 将数据拉出 sess= 和 duration= 并将其写入新列。

您可以在脚本转换中创建新列,但我个人喜欢在脚本任务之前使用派生列转换来创建新列 - 例如 sess 和持续时间。

然后,您可以为所有行创建列,如果 /api 列中存在数据,只需使用脚本任务将数据添加到 sess 和 duration 列。

我希望这是有道理的!

于 2013-08-27T14:12:36.950 回答
0

我有一个类似的要求,涉及读取一些文件并查找可能存在或不存在的tolken=value对。我只能通过使用脚本任务并编写一个简单的解析器来完成它。我在这个问题中解释了一点。 ssis 导入带有标题和尾行的固定宽度平面文件

如果您想朝这个方向发展,我可以提供一些示例代码。如果您有任何问题,请告诉我。

于 2013-08-27T13:01:35.417 回答