CSVをS3経由でRedshiftへインポートするPowershell
環境
- Windows 10 Pro 64bit
- PowerShell 7.2.0-preview.3
- AWS Tools for PowerShell Version 4.1.9.0
- postgresql-9.3.25(psql)
コード
【】は各自環境の値で置換
set S3_BUCKETNAME "【CSVアップロード先S3バケット名】" -option constant
set LOCAL_CSV_LOCATION "【CSVファイル保存先ディレクトリ】" -option constant
Write-S3Object -BucketName $S3_BUCKETNAME -Folder $LOCAL_CSV_LOCATION -KeyPrefix /
set HOST "【Redshiftエンドポイント】" -option constant
set PORT 【ポート番号】 -option constant
set DBNAME "【データベース名】" -option constant
set USERNAME "【マスターユーザー名】" -option constant
set PASSWORD "【マスターユーザーパスワード】" -option constant
set REGION "【Redshiftリージョン】" -option constant
set AWS_ACCESS_KEY "【IAMユーザーのアクセスキー】" -option constant
set AWS_SECRET_ACCESS_KEY "【IAMユーザーのシークレットアクセスキー】" -option constant
$env:PGCLIENTENCODING = "UTF8"
$env:PGPASSWORD = $DB_PASSWORD
$table_name = ""
foreach ($s3_object in (Get-S3Object -BucketName $S3_BUCKETNAME -Prefix /)) {
# table_name.csv -> table_name
$table_name = $s3_object.Key.Split(".")[0]
psql -h HOST -p $PORT -U $USERNAME -d $DBNAME -c ("copy " + $table_name + " from 's3://" + $S3_BUCKETNAME + "/" + $s3_object.Key + "' CSV credentials 'aws_access_key_id=" + $AWS_ACCESS_KEY + ";aws_secret_access_key=" + $AWS_SECRET_ACCESS_KEY + "' region '" + $REGION + "' IGNOREHEADER 1 EMPTYASNULL;") -a
}
Share