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