LoginSignup
5
5

More than 3 years have passed since last update.

Oracle Cloud Infrastructure Data Scienceを使って、AWS Redshiftのデータにアクセスしてみる

Last updated at Posted at 2020-04-06

本記事の狙い

2020/2に、Oracle Cloud Infrastructure Data Science(OCI-Data Science)がリリースされました。
前回、OCI-Data ScienceからAWS S3上のファイルのデータにクエリしてみたので(Qiita記事:Oracle Cloud Infrastructure Data Scienceを使って、OCI Object StorageとAWS S3のファイルデータにアクセスしてみる)、本記事では、OCI-Data Scienceから、Pythonを使ってAWS Redshift上のデータにアクセスしてデータ取得する手順を、実施してみたいと思います。

参考文献

実施に参考になるリンク

手順

以下のような手順で実施します。
1.OCI-Data Scienceの設定
2.Redshiftを起動し、テーブル作成、データを登録
 2-1.Redshiftのクラスタ作成、起動
 2-2.Redshiftにテーブル作成、S3にファイルから、テーブルにデータを登録
3.OCI-Data ScienceからRedshiftのテーブルにアクセスする

1.OCI-Data Scienceの設定

OCI-Data Scienceのノートブック環境を構築、初期設定をします。
上記参考文献の「Oracle Cloud Infrastructure Data Science(OCI-Data Science)を使ってみよう」を参考に下記を実施します。

・Oracle Cloudの基本的な設定の後に、ノートブック環境を構築します。
getting-started.ipynbを使って、ノートブック環境(JupyerLab)の初期作業を行います。

2.Redshiftを起動し、テーブル作成、データを登録

2-1.Redshiftのクラスタ作成、起動

上記参考文献の「Qiita記事:Redshiftをはじめて触ってみた!」を参考にRedshiftクラスタを作成しました。

2-2.Redshiftにテーブル作成、S3にファイルから、テーブルにデータを登録

今回は、上記参考文献の「Amazon Redshiftって何ができるの?AWSのデータウェアハウスサービスを解説」の” Amazon Redshiftを使ってみる”を参考に、IAMロールの作成Redshift上にテーブルを作成S3上のcsvファイルからRedshift上のテーブルにデータを登録、の手順でデータを登録しました。

今回は下記のテーブルを作成し、サンプルデータを登録しています。

CREATE TABLE PURCHASE_ITEM (
CUST_ID integer,
AGE integer,
MARRIED VARCHAR(4000),
ADDRESS VARCHAR(4000),
CHILD VARCHAR(4000),
OCCUPATION VARCHAR(4000),
LASTCONTACT VARCHAR(4000),
LASTCALL integer,
CONTACT integer,
CONTACT_BEFORE_CAMPAIGN integer,
Purchased VARCHAR(4000)
);

3.OCI-Data ScienceからRedshiftのテーブルにアクセスする

では、実際に、OCI-Data ScienceからRedshiftのテーブルにアクセスしてみます。
今回は、上記参考文献の「Redshiftからデータ読み込んでpandasのデータフレームに入れる」のとおりに、sqlalchemy-redshiftを利用します。

まず、モジュールsqlalchemy-redshiftをインストールします。

pip install sqlalchemy-redshift

次に必要なライブラリをインストールします。

import redshift_sqlalchemy
from sqlalchemy import create_engine

Redshiftに接続します。

engine = create_engine('{dialect}+{driver}://{user}:{pwd}@{url}:{port}/{db}'.format(
    dialect = 'redshift',
    driver = 'psycopg2',
    user='awsuser', #Redshiftのユーザー名
    pwd ='XXXXXX', #パスワード
    url='redshift-cluster-1.XXX.XXX.redshift.amazonaws.com', #Redshiftのクラスター画面のエンドポイント
    port=5439, #Redshiftのポート番号
    db='dev' #Redshiftのデータベース名
))

ここで下記のようなConnection timed outエラーが発生しました。
image.png

調べたところ、上記参考資料「リモートのpython3(psycopg2)からubuntu16.04@AWSのpostgresqlに接続」と同じようにみえるので、RedshiftのVNCセキュリティグループのインバウンドルールを下記のように設定します。
image.png

*今回は「0.0.0.0/0」を設定しましたが、実際の設定に関しては適切な値を設定してください。
*ここらへん、あまり自信ないので間違っていたらご指摘ください。。

セキュリティグループを設定後は、正常に接続できました。

Redshift上のデータを読み込み、データフレームに入れます。

import pandas as pd
redshift_data = pd.read_sql_query('SELECT * FROM PURCHASE_ITEM limit 100;', engine)

結果を確認してみます。

redshift_data.head()

image.png

確かに、無事取得できました。

終わりに

今回は、OCI-Data Scienceから、sqlalchemy-redshift を使って、AWS Redshift上のデータにアクセスしてみました。

これ以外にもう少しいい接続方法があるかもしれませんので、ぜひ試してみてください。(そして教えてください。。)

OCI-Data Scienceは、最大30日間300$分の無償クレジットが使えるOracle Free Trialの、対象サービスですので、ぜひ実際に使ってみることをおすすめします。

Let's Enjoy Data Science!

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5