【问题标题】:Looping through large data sets循环遍历大型数据集
【发布时间】:2018-03-21 21:16:06
【问题描述】:

我有 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 个小时。

有没有更有效/更好的方法来实现这一点?

谢谢!

尝试嵌入图片,链接如下:

Sample Data Sets and desired results

【问题讨论】:

  • 您可以尝试使用 DataRelation 作为 mentioned here 可以加快速度;该示例仍然使用嵌套的 foreach。
  • 能否提供来源的样本数据?
  • 谢谢 Filburt,会做一些关于 DataRelation 的研究。

标签: powershell dataset


【解决方案1】:

如果数据集之间没有顺序依赖关系,您可以使用 Start-job cmdlet 而不是内部循环来获得一些并发性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    • 2017-10-31
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    相关资源
    最近更新 更多