如果存在某些参数,则拆分列

时间:2013-08-27 12:43:55

标签: ssis bids

我无法做什么,因为我能够在具有平面文件源的列中完全阅读,但如果某些事情是可用的,我需要将它们拆分成一个单独的列。

示例:

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,或者其他一些函数类型,因此无法通过在Flat文件源读入中分隔它来完成。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

然后使用split()或regEx将数据拉出sess =和duration =&把它写进新栏目。

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

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

我希望这是有道理的!

答案 1 :(得分:0)

我有类似的要求,包括阅读一些文件并寻找可能存在或可能不存在的 tolken = value 对。我只能通过使用脚本任务和编写一个简单的解析器来完成它。我在这个问题上解释了一下。 ssis import fixed width flat file with header and trailer rows

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