[Poweshell] Split Big Flat File (CSV/TXT...)
1613 ワード
ビジネスでは期首データのインポートが頻繁に発生し、大きなファイル(100 w行を超える)に遭遇した場合
Powershellを使用してファイルを行数で切断し、バッチでインポートすることができます.パフォーマンスの問題や、excel、ssisなどのマイクロソフトコントロールで100 w行以上のデータが読み書きできない問題を回避します.
Powershellを使用してファイルを行数で切断し、バッチでインポートすることができます.パフォーマンスの問題や、excel、ssisなどのマイクロソフトコントロールで100 w行以上のデータが読み書きできない問題を回避します.
#split test
$sw = new-object System.Diagnostics.Stopwatch
$sw.Start()
$filename = "C:\Source\FullExtract_data.csv"#
$rootName = "C:\Target\splitOutput"#
$ext = "csv"#
$linesperFile = 600000#
$filecount = 1
$reader = $null
try{
$reader = [io.file]::OpenText($filename)
try{
"Creating file number $filecount"
$writer = [io.file]::CreateText("{0}{1}.{2}" -f ($rootName,$filecount.ToString("000"),$ext))
$filecount++
$linecount = 0
while($reader.EndOfStream -ne $true) {
"Reading $linesperFile"
while( ($linecount -lt $linesperFile) -and ($reader.EndOfStream -ne $true)){
$writer.WriteLine($reader.ReadLine());
$linecount++
}
if($reader.EndOfStream -ne $true) {
"Closing file"
$writer.Dispose();
"Creating file number $filecount"
$writer = [io.file]::CreateText("{0}{1}.{2}" -f ($rootName,$filecount.ToString("000"),$ext))
$filecount++
$linecount = 0
}
}
} finally {
$writer.Dispose();
}
} finally {
$reader.Dispose();
}
$sw.Stop()
Write-Host "Split complete in " $sw.Elapsed.TotalSeconds "seconds"