こんにちは! JQです。
前回は『Amazon Redshift編~RubySDKパート③~』ということで、RubyからRedshiftを操作してみました。
今回は『Amazon Redshift編~Unloadパート①~』と題して、RedshiftからS3に外部出力してみたいと思います。
データの準備
※Redshiftの作成には以前のレシピ『Amazon Redshift編~RubySDKパート①~』を参照下さい。
データ作成
1. まずは出力用のデータを登録します。
テーブル(ID.NAME,DATE)を作成して適当なデータを100件登録した後に、内容を表示するスクリプトになります。
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 48 49 |
#!/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 = "パスワード" 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(" Create Table dev ( id INT, name VARCHAR(128), date TIMESTAMP ) ") for i in 1..100 do db.do("insert into dev values (#{i},'dev','now()')") end res=db.select_all("select * from dev") puts res db.disconnect |
S3への外部出力
S3への外部出力
2. それではS3への外部出力をしてみましょう!
下記スクリプトではdevテーブルの内容を全て出力します。
※出力先のS3はRedshiftと同一リージョンにしないとエラーが発生致します。
また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 |
#!/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 = "パスワード" s3bucket="出力先S3バケット名" AWS_ACCESS_KEY=”” AWS_SECRET_ACCESS_KEY=”” 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_dev_#{Time.now.strftime("%Y-%m-%d-%H:%M:%S")}/' credentials 'aws_access_key_id= AWS_ACCESS_KEY;aws_secret_access_key= AWS_SECRET_ACCESS_KEY ' ") db.disconnect |
確認
3. 次に、出力結果の確認をしてみましょう!
該当のS3バケット下に「resshift_dev_日付」のフォルダが作成されているかと思います。
上記のフォルダの中に出力結果のファイルがあります。
作成されたファイル中身は次になります。
成功すれば上記のように結果が出力されるかと思います。
いかがでしたでしょうか?
次回は『Amazon Redshift編~Unloadパート②~』ということで、Redshiftから暗号化してS3にデータを出力してみたいと思いますので、お楽しみに!
——————————————————————————————————
ナレコムクラウドのFacebookに『いいね!』をクリックして頂くと
最新のお役立ちレシピが配信されます★
┏━━━━━━━━━━━━━┓
┃ナレコムクラウド Facebook┃
┗━━━━━━━━━━━━━┛
——————————————————————————————————