Sql server 主机和IP混合的列上的SSI合并联接
需要一些帮助,以了解合并联接操作在我的专栏中的IP地址联接时出现问题的原因 我有2个CSV文件,其中包含以下信息,加入列是ClientName,总体目标是Sql server 主机和IP混合的列上的SSI合并联接,sql-server,join,merge,ssis,etl,Sql Server,Join,Merge,Ssis,Etl,需要一些帮助,以了解合并联接操作在我的专栏中的IP地址联接时出现问题的原因 我有2个CSV文件,其中包含以下信息,加入列是ClientName,总体目标是 Array|ClientName|ResolvedClientName|Path 从我的合并加入 CSV1 CSV2 将它们都拉入并对它们执行合并联接非常简单,连接上的输出都是字符串,操作在只包含文本的连接上非常有效(server1/2/5)。然而,它的分崩离析之处在于IP地址,这似乎是由于IP地址中的“.”。在测试了这两种情况下的随机数
Array|ClientName|ResolvedClientName|Path
从我的合并加入
CSV1
CSV2
将它们都拉入并对它们执行合并联接非常简单,连接上的输出都是字符串,操作在只包含文本的连接上非常有效(server1/2/5)。然而,它的分崩离析之处在于IP地址,这似乎是由于IP地址中的“.”。在测试了这两种情况下的随机数字集(12345)后,看到它确实加入了,这是我能得出的唯一结论
有没有人对此有经验,也许是一个解决办法?建议的解决方案
只需遵循以下步骤:
ClientName
添加派生列转换(以删除尾随空格并更新为大写)
[ClientName]
进行排序(在每个文件上)如果你在CSV文件中尝试这两个案例,我相信你会看到与我相同的结果,第一个有效,第二个无效。
解决方案:
获取此示例数据后,我将它们直接从您的注释复制到我的记事本++编辑器中,发现有些unicode字符显示为问号,这将导致值之间的差异
一个建议是在每个源代码之后添加一个脚本组件,并使用脚本获得一个新的输出列(可以删除派生列)
例如:
注意:您必须导入System.Text.RegularExpressions
才能使用RegEx
建议的解决方案
只需遵循以下步骤:
ClientName
添加派生列转换(以删除尾随空格并更新为大写)
[ClientName]
进行排序(在每个文件上)如果你在CSV文件中尝试这两个案例,我相信你会看到与我相同的结果,第一个有效,第二个无效。
解决方案:
获取此示例数据后,我将它们直接从您的注释复制到我的记事本++编辑器中,发现有些unicode字符显示为问号,这将导致值之间的差异
一个建议是在每个源代码之后添加一个脚本组件,并使用脚本获得一个新的输出列(可以删除派生列)
例如:
注意:必须导入
System.Text.RegularExpressions
才能使用RegEx
如果它们是字符串,它们的工作方式应该相同。你检查过尾随空格等了吗?@Matt OP发布了一些示例数据作为对我答案的评论。值中似乎有一些unicode字符,并且他正在使用的编辑器看不到这些字符。看看我的答案更新。如果它们是字符串,它们应该以相同的方式工作。你检查过尾随空格等了吗?@Matt OP发布了一些示例数据作为对我答案的评论。值中似乎有一些unicode字符,并且他正在使用的编辑器看不到这些字符。看一看我的答案更新。嗯,这样做很有效,它能够在135个IP地址的新案例中加入,但仍然遗漏了很多其他案例。@Wingman 1487最后一个尝试是将两列都改为大写。检查我的更新(派生列表达式)所做的更改,结果仍然相同。我觉得很奇怪,看看CSV文件,IP列没有区别,没有奇数字符,只有直接的IP和主机名。@Wingman 1487最后一次尝试时,将两个列转换为相同的unicode(DT_WSTR,50)UPPER(TRIM([ClientName])
检查它是否为注释编码issue@Wingman1487根据你提供的信息,我认为你不会得到其他建议。如果你能附上示例文件,那会更好。很好,这样做很有效,它能够加入135个IP地址的新案例,但仍然错过了很多其他案例。@Wingman 1487最后一件事是尝试is将两个列都更改为大写。检查我的更新(派生列表达式)是否进行了更改,结果仍然相同。这对我来说很奇怪,在CSV文件中,IP列没有区别,没有奇数字符,只有直接的IP和主机名。@Wingman 1487上次尝试时,只将两个列转换为相同的unicode(DT_WSTR,50)UPPER(TRIM([ClientName])
检查注释是否为编码issue@Wingman1487根据你提供的信息,我认为你不会得到其他建议。如果你能附上样本文件,那会更好
Array | ClientName | Path
___________|________________|______________________
myArray1 | server1 | /something/something
myArray1 | server2 | /something/something
myArray1 | 192.168.0.55 | /something/something
myArray2 | 192.172.6.10 | /something/something
myArray2 | server5 | /something/something
ClientName | ResolvedClientName
_______________|______________________
server1 | server1
server2 | server2
192.168.0.55 | server3
192.172.6.10 | server4
server5 | server5
UPPER(TRIM([ClientName])
ArrayName|ClientName|MountPath
array2.nam.nsroot.net|144.215.120.114|/mwdctov0285/ctoqt0285
array1-pr.nam.nsroot.net|10.102.133.24|/mwdcerv0618/cerqt0618
ClientName|ResolvedClientName
144.215.120.114|client3.nam.nsroot.net
10.102.133.24|client1.nam.nsroot.net`
If Not Row.ClientName_IsNull AndAlso _
Not String.IsnullOrEmpty(Row.ClientName) Then
Row.OutClientName = Regex.Replace(Row.ClientName, "[^0-9.]", "").ToUpper
Else
Row.OutClientName_IsNull = True
End If