Amazon Redshift編~Unloadパート③~

こんにちは! 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」でファイルが作成されているかと思います。

出力先のS3バケット直下

上記のフォルダの中に出力結果のファイルがあります。

出力結果ファイル一覧

作成されたファイル中身は、以下になります。

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に『いいね!』をクリックして頂くと

最新のお役立ちレシピが配信されます★

┏━━━━━━━━━━━━━┓

┃ナレコムクラウド Facebook┃

┗━━━━━━━━━━━━━┛

——————————————————————————————————

この記事を書いた人

aws-recipe-user