私は開発者でもCSV専門家でもありません。私はこのコードを一緒に置くことができ、それは仕事をしています。 概要を簡単に紹介するため、CSVにネストされたJSONデータを処理する必要がありました。だから私はJSONを読んでいるので、それを別の列に分割して、CSVを保存しています。Powershell - ネストされたJSONでCSV処理を最適化する
さて、私の問題は、これが正常に動作しているが、私は今、1.5GB CSVファイルを処理する必要があると私は処理は2日かかるしたくないということです...
だからみんなができればそれが妥当な時間内に実行されるように、私は私のスクリプトを微調整に役立ち、私は非常に感謝される:)
$file = Get-Content -Path 'input.csv' | Select-Object -Skip 2 | ConvertFrom-Csv
$file | Add-Member -MemberType NoteProperty -Name AdditionalInfo_StreamingEndpointName -value $null
$file | Add-Member -MemberType NoteProperty -Name AdditionalInfo_Id -value $null
$file | Add-Member -MemberType NoteProperty -Name AdditionalInfo_AppServicePlanUri -value $null
$file | Add-Member -MemberType NoteProperty -Name AdditionalInfo_ImageType -value $null
$file | Add-Member -MemberType NoteProperty -Name AdditionalInfo_ServiceType -value $null
$file | Add-Member -MemberType NoteProperty -Name AdditionalInfo_VMName -value $null
$file | Add-Member -MemberType NoteProperty -Name AdditionalInfo_UsageType -value $null
$file | Add-Member -MemberType NoteProperty -Name AdditionalInfo_DatabaseAccount -value $null
$file | Add-Member -MemberType NoteProperty -Name AdditionalInfo_CollectionRid -value $null
$file | Add-Member -MemberType NoteProperty -Name AdditionalInfo_ResourceCategory -value $null
$file | Add-Member -MemberType NoteProperty -Name Tags_displayName -value $null
$file | Add-Member -MemberType NoteProperty -Name 'Tags_ACCESSED-VIA-INTERNET' -value $null
$file | Add-Member -MemberType NoteProperty -Name 'Tags_APP-NAME' -value $null
$file | Add-Member -MemberType NoteProperty -Name 'Tags_APP-TYPE' -value $null
$file | Add-Member -MemberType NoteProperty -Name Tags_APPTYPE -value $null
$file | Add-Member -MemberType NoteProperty -Name Tags_CHARGECODE -value $null
$file | Add-Member -MemberType NoteProperty -Name Tags_COMMENTS -value $null
$file | Add-Member -MemberType NoteProperty -Name Tags_COUNTRY -value $null
$file | Add-Member -MemberType NoteProperty -Name 'Tags_EY-REGION' -value $null
$file | Add-Member -MemberType NoteProperty -Name 'Tags_IT-ENV' -value $null
$file | Add-Member -MemberType NoteProperty -Name Tags_OWNER -value $null
$file | Add-Member -MemberType NoteProperty -Name 'Tags_OWNER-EMAIL' -value $null
$file | Add-Member -MemberType NoteProperty -Name Tags_SERVICELINE -value $null
$file | Add-Member -MemberType NoteProperty -Name 'Tags_SUB-TYPE' -value $null
$file | Add-Member -MemberType NoteProperty -Name Tags_TECHCONTACTS -value $null
$count=1
ForEach ($line in $file) {
Write-Output "Processing line: $count"
$count++
try{
if ($line.AdditionalInfo -ne $null -Or $line.Tags -ne $null){
$line.AdditionalInfo_StreamingEndpointName = ($line.AdditionalInfo | ConvertFrom-JSON).StreamingEndpointName
$line.AdditionalInfo_Id = ($line.AdditionalInfo | ConvertFrom-JSON).Id
$line.AdditionalInfo_AppServicePlanUri = ($line.AdditionalInfo | ConvertFrom-JSON).AppServicePlanUri
$line.AdditionalInfo_ImageType = ($line.AdditionalInfo | ConvertFrom-JSON).ImageType
$line.AdditionalInfo_ServiceType = ($line.AdditionalInfo | ConvertFrom-JSON).ServiceType
$line.AdditionalInfo_VMName = ($line.AdditionalInfo | ConvertFrom-JSON).VMName
$line.AdditionalInfo_UsageType = ($line.AdditionalInfo | ConvertFrom-JSON).UsageType
$line.AdditionalInfo_DatabaseAccount = ($line.AdditionalInfo | ConvertFrom-JSON).DatabaseAccount
$line.AdditionalInfo_CollectionRid = ($line.AdditionalInfo | ConvertFrom-JSON).CollectionRid
$line.AdditionalInfo_ResourceCategory = ($line.AdditionalInfo | ConvertFrom-JSON).ResourceCategory
$line.Tags_displayName = ($line.Tags | ConvertFrom-JSON).displayName
$line.'Tags_ACCESSED-VIA-INTERNET' = ($line.Tags | ConvertFrom-JSON).'ACCESSED-VIA-INTERNET'
$line.'Tags_APP-NAME' = ($line.Tags | ConvertFrom-JSON).'APP-NAME'
$line.'Tags_APP-TYPE' = ($line.Tags | ConvertFrom-JSON).'APP-TYPE'
$line.Tags_APPTYPE = ($line.Tags | ConvertFrom-JSON).APPTYPE
$line.Tags_CHARGECODE = ($line.Tags | ConvertFrom-JSON).CHARGECODE
$line.Tags_COMMENTS = ($line.Tags | ConvertFrom-JSON).COMMENTS
$line.Tags_COUNTRY = ($line.Tags | ConvertFrom-JSON).COUNTRY
$line.'Tags_EY-REGION' = ($line.Tags | ConvertFrom-JSON).'EY-REGION'
$line.'Tags_IT-ENV' = ($line.Tags | ConvertFrom-JSON).'IT-ENV'
$line.Tags_OWNER = ($line.Tags | ConvertFrom-JSON).OWNER
$line.'Tags_OWNER-EMAIL' = ($line.Tags | ConvertFrom-JSON).'OWNER-EMAIL'
$line.Tags_SERVICELINE = ($line.Tags | ConvertFrom-JSON).SERVICELINE
$line.'Tags_SUB-TYPE' = ($line.Tags | ConvertFrom-JSON).'SUB-TYPE'
$line.Tags_TECHCONTACTS = ($line.Tags | ConvertFrom-JSON).TECHCONTACTS
}
}
catch {}
}
#write-output $info
$file | Export-Csv 'C:\output.csv' -NoTypeInformation
「Import-Csv」を使用してください... – TheIncorrigible1
1.5TB CSV !? 'Get-Content'を使って一度に処理している処理量を制限し、一度に読み込んだ行の数を制限して、メモリ不足にならないようにするのが最良です。あなたの質問。 – TheIncorrigible1
申し訳ありません。私は1.5 GBのファイル(TBではない)を意味しました。一定。また、Import-CSVを使用すると処理速度が向上しました。それ以外の可能性はありますか? – Jester