SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Amazon Redshiftによるビッグデータ分析環境の構築

Amazon Redshiftへのデータ投入からBIツールによる可視化までの手順

Amazon Redshiftによるビッグデータ分析環境の構築(4)

  • X ポスト
  • このエントリーをはてなブックマークに追加

データ投入環境の作成

 投入するデータが大方整いました。次は投入に際して必要となる環境を作っていきます。

S3バケットの準備

 まず始めにCSVをアップロードすることになるバケットを用意します。前回連載では東京リージョンにAmazon Redshiftクラスタを作成していますので、バケットも同じリージョンとなるTokyoに作成します。

スキーマの作成

 今回データを投入するテーブルが属するスキーマを別途新規作成します。名前は『codezine』としたいと思います。クラスタ作成時のスーパーユーザーでDBにログインし、以下CREATE SCHEMAコマンドでスキーマを作成してください。

$ psql -h (エンドポイント名) -U (ユーザー名) -d (データベース名) -p (ポート番号)
Password for user xxxx: (パスワード入力)
# CREATE SCHEMA codezine;
CREATE SCHEMA
注:

 Amazon Redshiftクラスタ環境作成については前回の記事『Amazon Redshiftによるビッグデータ分析環境の構築手順』をご参照ください。

 

 psqlを用いてのAmazon Redshiftクラスタ環境へのログイン詳細については、前回の記事の5ページ目を参照してください。

 個別にスキーマを作成した場合、システム系のテーブルやビューからアクセス可能な状態にするために、システムにスキーマ情報を登録しておく必要があります。何かと利用する機会は多いと思いますので、ぜひ登録しておいてください。

 クラスタが利用しているパラメータグループを編集し、『search_path』というパラメータにカンマ区切りで対応するスキーマ名を追加してください。操作完了後Amazon Redshiftクラスタの再起動を促されるので再起動実施を行うと以降は該当スキーマ内の情報も利用できるようになります。

テーブルの作成

 Excelの各種シート(テーブルに対応)の内容と照らし合わせながら、データを格納するためのテーブル定義を作成します。テーブルの項目ごとのデータ型や列圧縮タイプについては、データが収まるべき型と内容などを吟味した上で下記ドキュメントを参考に定義しています。

 投入するデータが一定件数(デフォルトでは10万件以上)ある場合は、以下の機能を参考にテーブルの項目型や列圧縮タイプを定めてみても良いでしょう。

 以下が全5テーブルのテーブル定義情報(CREATE TABLE文)です。psqlでログインした状態で以下CREATE TABLE文を実行してください。『CREATE』というメッセージが出ていれば作成できています。

CREATE TABLE codezine.orders (
    order_id INT encode lzo NOT NULL, /** オーダー ID */
    order_date DATE encode delta NOT NULL, /** 受注日 */
    priority VARCHAR(15) encode bytedict NOT NULL, /** 優先度 */
    quantity SMALLINT encode mostly8 NOT NULL, /** 数量 */
    sales BIGINT encode lzo NOT NULL, /** 売り上げ */
    discount_rate DOUBLE PRECISION, /** 割引率 */
    shipping_mode VARCHAR(20) encode bytedict NOT NULL, /** 出荷モード */
    profit INT encode lzo NOT NULL, /** 利益 */
    unit_price INT encode lzo NOT NULL, /** 単価 */
    ad_expences INT encode lzo NOT NULL, /** 宣伝費 */
    shipping_cost INT encode mostly16 NOT NULL, /** 発送費用 */
    customer_name VARCHAR(50) encode lzo NOT NULL, /** 顧客名 */
    prefecture VARCHAR(20) encode bytedict NOT NULL, /** 都道府県 */
    city VARCHAR(30) encode bytedict NOT NULL, /** 市町村 */
    area VARCHAR(15) encode bytedict NOT NULL, /** 地域 */
    shop_name VARCHAR(50) encode lzo NOT NULL, /** 店名 */
    customer_segment VARCHAR(50) encode bytedict NOT NULL, /** 顧客区分 */
    product_category VARCHAR(50) encode bytedict NOT NULL, /** 製品カテゴリー */
    product_sub_category VARCHAR(100) encode bytedict NOT NULL, /** 製品サブカテゴリー */
    product_id CHAR(15) encode lzo NOT NULL, /** プロダクト ID */
    product_name VARCHAR(300) encode lzo NOT NULL, /** 製品名 */
    product_description VARCHAR(500) encode lzo NOT NULL, /** 製品説明 */
    product_container VARCHAR(50) encode bytedict NOT NULL, /** 製品コンテナー */
    product_base_margin DOUBLE PRECISION, /** 製品ベースマージン */
    supplier VARCHAR(50) encode bytedict NOT NULL, /** サプライヤー */
    delivery_date DATE encode delta NOT NULL, /** 配達予定日 */
    shipment_date DATE encode delta NOT NULL, /** 発送日 */
    PRIMARY KEY(order_id)  
)
distkey(order_id)
sortkey(order_date);
----------
CREATE TABLE codezine.inventory (
    store_name VARCHAR(20) encode bytedict NOT NULL, /** 店名 */
    product_id CHAR(15) encode lzo NOT NULL, /** プロダクト ID */
    product_name VARCHAR(300) encode lzo NOT NULL, /** 製品名 */
    inventory DOUBLE PRECISION, /** インベントリ */
    PRIMARY KEY(product_id)
)
distkey(product_id)
sortkey(product_id);
----------
CREATE TABLE codezine.customer (
    customer_name VARCHAR(50) encode lzo NOT NULL, /** 顧客名 */
    life_time_revenue DOUBLE PRECISION, /** 生涯収入 */
    age_group CHAR(10) encode bytedict NOT NULL, /** 年代グループ */
    tenure CHAR(20) encode bytedict NOT NULL, /** 在職期間 */
    PRIMARY KEY(customer_name)
)
distkey(customer_name)
sortkey(customer_name);
----------
CREATE TABLE codezine.prefecture (
    prefecture VARCHAR(20) encode bytedict NOT NULL, /** 都道府県 */
    capital VARCHAR(20) encode bytedict NOT NULL, /** 県庁所在地 */
    region VARCHAR(10) encode bytedict NOT NULL, /** 地域 */
    major_island VARCHAR(20) encode bytedict NOT NULL, /** 所属本土 */
    population INT encode lzo NOT NULL, /** 人口 */
    area DOUBLE PRECISION, /** 面積 */
    destiny INT encode lzo NOT NULL, /** destiny */
    distr SMALLINT NOT NULL, /** distr */
    municop SMALLINT NOT NULL, /** municop */
    prefecture_code CHAR(2) encode bytedict NOT NULL, /** 都道府県コード */
    PRIMARY KEY(prefecture_code)
)
diststyle ALL
sortkey(prefecture_code);
----------
CREATE TABLE codezine.targets (
    product_category VARCHAR(25) encode bytedict NOT NULL, /** 製品カテゴリ */
    product_sub_category VARCHAR(70) encode lzo NOT NULL, /** 製品サブカテゴリ */
    sales_target DOUBLE PRECISION NOT NULL, /** 売上目標額 */
    PRIMARY KEY(product_category, product_sub_category)
)
diststyle ALL
sortkey(product_category, product_sub_category);

次のページ
Amazon S3からのデータ投入(COPY)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Amazon Redshiftによるビッグデータ分析環境の構築連載記事一覧

もっと読む

この記事の著者

しんや(シンヤ)

2010年末~2013年前半位までの期間で興味のある勉強会に頻繁に参加。参加してきた勉強会のレポートブログとTogetterをひたすらまとめ続け、まとめ職人(自称/他称含む)として暫く過ごしておりました。色々な縁あってDevelopers Summit 2013では『公募レポーター』も務めました。2013年05月『出張ブロガー』を経て2013年08月にクラスメソッド株式会社へ転職。現在は業務(AWS及びその周辺技術を扱う)の...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8438 2015/02/19 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング