我有2个大型数据集(每个> 25K记录),我试图根据公共密钥查找记录。缺点是我需要根据该公共密钥从第二个数据集中提取字段。不幸的是,公共密钥可以在两列中的一列中。
我设置了一个嵌套的 foreach 方案,但是它需要特别长的时间来处理记录。最终目标是使用每个数据集中的数据字段构建自定义PSObject。
foreach($MPD in $MPDS.Tables.Rows){
$i++
Write-Host "Outter: $i"
$linkedID = "http://site/" + $MPD.ID
$obj = New-Object PSObject
$obj | Add-Member -MemberType NoteProperty -Name MPDLinkedID -Value $linkedID
$obj | Add-Member -MemberType NoteProperty -Name OrderID -Value $MPD.OrderID
$obj | Add-Member -MemberType NoteProperty -Name DSID -Value $MPD.MDS_ID
$obj | Add-Member -MemberType NoteProperty -Name CreatedBy -Value $MPD.CreatedBy
foreach($DS in $DSTwoRecords.Tables.rows){
$j++
Write-Host "Inner: $j"
if(($MPD.MDS_ID -eq $DS.ID) -or ($MPD.ExternalRefernceID -eq $DS.DSID)){
$obj | Add-Member -MemberType NoteProperty -Name DSID -Value $DS.Code
$obj | Add-Member -MemberType NoteProperty -Name DeliveryDate -Value $DS.DeliveryDate
$obj | Add-Member -MemberType NoteProperty -Name DeliveryLocation -Value $DS.DeliveryLocation
}
}
$AllRecords += $obj
}
return $AllRecords
对于数据集的大小,此循环到目前为止已运行超过10小时。
是否有更有效/更好的方法来实现这一目标?
谢谢!
试图嵌入图片,链接如下:
答案 0 :(得分:0)
如果数据集之间没有顺序依赖关系,则可以使用 Start-job cmdlet而不是内部循环来实现并发。