概要
2つのCSVファイル(顧客マスタ、商品マスタ)から、顧客マスタに商品マスタ.商品コードが存在するものをPowerShellを使ってCSV出力する
メモ
CSVファイル
■商品マスタ(items.csv)
ITEM_ID,ITEM_NAME 10000,AAAAAA 10001,BBBBBB 10002,CCCCCC ・・・・ ・・・・■顧客マスタ(customers.csv)
CUSTOMER_ID,ITEM_ID,CUSTOMER_NAME,QUANTITY 8000,10000,aaaaa,100 8000,10002,bbbbb,50 8001,10005,ccccc,1000 ・・・・ ・・・・
SQL文だと以下のような感じ
■SQL
SELECT CUSTOMERS.* FROM CUSTOMERS, ITEMS WHERE CUSTOMERS.ITEM_ID = ITEMS.ITEM_ID
PowerShell その1
$result = Import-Csv c:\items.csv | Select-Object ITEM_ID Import-Csv c:\customers.csv | Where-Object {$result -match $_.ITEM_ID} | Export-Csv c:\output.csv -NoTypecustomers.csvが10万件、items.csvが1万件で約数十分ぐらいかかる(※スペックによるがとにかく遅い!!)
PowerShell その2
その1の場合、シンプルだが遅いので
items.csvをHashTableにセット(ITEM_IDに重複がないこと)する方法で解決した(約20秒ぐらいで終わる)
$hash = @{} Import-Csv c:\items.csv | ForEach-Object {$hash.Add($_.ITEM_ID, $_)} Import-Csv c:\customers.csv | ForEach-Object {if($hash.Get_Item($_.ITEM_ID)){$_}} | Export-Csv c:\output.csv -NoType
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。