こんにちは! JQです。
前回は『Amazon Redshift編~Unloadパート②~』ということで、Redshiftから暗号化してS3に外部出力してみました。
今回は『Amazon Redshift編~Unloadパート③~』と題して、RedshiftからS3に出力するフォーマットを変更してみたいと思います。
フォーマットを変更してS3へ外部出力
1. フォーマットを変更してS3へ外部出力をしてみましょう!
『Amazon Redshift編~Unloadパート①』のスクリプトのunloadコマンドにDelimiterオプションを追記して行います。
今回はCSV形式で出力をしてみます。
※AWS_ACCESS_KEY等は環境に合わせて変更して下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
#!/usr/bin/env ruby require 'rubygems' require 'aws-sdk' require "dbi" cluster_identifier = "dev" redshift = AWS:: Redshift.new( :redshift_endpoint => "redshift.ap-northeast-1.amazonaws.com", :access_key_id => 'xxxxxxxxxxxx', :secret_access_key => 'xxxxxxxxxxxxxxx' ) client = redshift.client cluster = client.describe_clusters( :cluster_identifier => cluster_identifier ).clusters[0] dbuser=cluster.master_username dburl="DBI:Pg:dbname=#{cluster.db_name};host=#{cluster.endpoint.address};port=#{cluster.endpoint.port}" dbpassword = "パスワード" AWS_ACCESS_KEY=”” AWS_SECRET_ACCESS_KEY=”” s3bucket="出力先S3バケット名" begin db=DBI.connect(dburl,dbuser,dbpassword) rescue DBI::DatabaseError => e puts "rescue" puts "Error code: #{e.err}" puts "Error message: #{e.errstr}" end db.do(" unload ('select * from dev') to 's3://#{s3bucket}/resshift_del/del_' credentials 'aws_access_key_id= AWS_ACCESS_KEY;aws_secret_access_key= AWS_SECRET_ACCESS_KEY ' delimiter ','; ") db.disconnect |
確認
2. 次に、出力結果の確認をしてみましょう!
該当のS3バケット下に「resshift_del/del_」でファイルが作成されているかと思います。
上記のフォルダの中に出力結果のファイルがあります。
作成されたファイル中身は、以下になります。
CSV形式で出力されているのがわかります。
インポート
3.インポートしてみましょう!
インポートでも同様にCopyコマンドにDelimiterオプションを利用して行います。
テーブルの中身を削除した状態で、下記スクリプトを実行してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
#!/usr/bin/env ruby require 'rubygems' require 'aws-sdk' require "dbi" cluster_identifier = "dev" redshift = AWS:: Redshift.new( :redshift_endpoint => "redshift.ap-northeast-1.amazonaws.com", :access_key_id => 'xxxxxxxxxxxx', :secret_access_key => 'xxxxxxxxxxxxxxx' ) client = redshift.client cluster = client.describe_clusters( :cluster_identifier => cluster_identifier ).clusters[0] dbuser=cluster.master_username dburl="DBI:Pg:dbname=#{cluster.db_name};host=#{cluster.endpoint.address};port=#{cluster.endpoint.port}" dbpassword = "パスワード" AWS_ACCESS_KEY=”” AWS_SECRET_ACCESS_KEY=”” s3bucket="出力先S3バケット名" begin db=DBI.connect(dburl,dbuser,dbpassword) rescue DBI::DatabaseError => e puts "rescue" puts "Error code: #{e.err}" puts "Error message: #{e.errstr}" end db.do(" copy dev from 's3://#{s3bucket}/resshift_del/del_' credentials 'aws_access_key_id= AWS_ACCESS_KEY;aws_secret_access_key= AWS_SECRET_ACCESS_KEY' delimiter ','; ") res2=db.select_all("select * from dev") puts res2 db.disconnect |
成功すれば”select * from dev”の結果が出力されるかと思います。
いかがでしたでしょうか?
次回は、『chef-solo編~パート①~』と題して、EC2でchef-soloを構築してみたいと思います。お楽しみに!
——————————————————————————————————
ナレコムクラウドのFacebookに『いいね!』をクリックして頂くと
最新のお役立ちレシピが配信されます★
┏━━━━━━━━━━━━━┓
┃ナレコムクラウド Facebook┃
┗━━━━━━━━━━━━━┛
——————————————————————————————————