【问题标题】:Split up a column if certain parameters are present如果存在某些参数,则拆分列
【发布时间】:2013-08-27 12:43:54
【问题描述】:

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

例子:

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文件源读取中对其进行分隔来完成。

有什么想法吗?

【问题讨论】:

    标签: ssis bids


    【解决方案1】:

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

    然后使用 split() 或 regEx 从 sess= 和 duration= 中提取数据并将其写入新列。

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

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

    我希望这是有道理的!

    【讨论】:

    • 这是我几乎想通的,但我采取的路线略有不同。我正在使用脚本转换并使用子字符串来拆分所有内容。我有会话 ID,但目前正在研究持续时间,因为它可能会根据用户使用它的时间而有所不同,这会带来一个小问题,因为它的大小可以从 1 到 4580 不等,依此类推.
    • 我想通了。谢谢。
    【解决方案2】:

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

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

    【讨论】:

    • 这很有帮助,但不是我想要的。
    • 对拆分使用“=”和“)”分隔符应该隔离您的持续时间
    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2019-05-19
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多