データ統合基盤CSアナリティクスを使ってS3のデータでRedshiftにテーブルを作成してデータを取り込んでみる

2020.06.25

弊社では、短期間かつお手軽にAWS上にデータ分析基盤を導入可能なCSA(Customer Story Analytics)というデータ統合基盤パッケージを提供しています。

CSAの機能概要の説明については、別途ブログでも触れていますが、今回は各論として、JMC(Job Management Console)を使った、S3上のデータのRedshiftへの連携(テーブル作成、データの連携)を行ってみたいと思います。

目次

JMCとは

  • JMC(Job Management Console)は、CSAがカバーする範囲の中で「S3にアップロードされたファイルを取り込む」ところから「可視化・分析に必要なデータの整形を行うジョブを作成・管理する」までを行います。
  • 作業を軽減・効率化するために、各種処理(ジョブ)を作成・実行・管理するWeb UIを提供します。
  • JMCの中では、下記の構成要素を定義することが可能で、同構成要素を「ジョブ」としてGUIで組み合わせた上で、任意のタイミングで実行するというジョブ実行の一連の流れを定義することが可能です。
    • S3からRedshiftへのデータ連携
    • 任意のSQL
    • 任意のPython

準備(S3へのデータ格納)

DWH(Amazon Redshift)に反映するデータをまずはS3にアップロードする必要がありますので、今回はtableauのcsvサンプルデータ(アメリカで人気の新生児名)を使います。CSVの中身は下記のようになります。

State,Gender,Year,Top Name,Occurences
AK,F,1910,Mary,14
AK,F,1911,Mary,12
AK,F,1912,Mary,9
AK,F,1913,Mary,21
AK,F,1914,Mary,22
AK,F,1915,Mary,23
AK,F,1916,Mary,18
AK,F,1917,Mary,21

CSA用に初期設定されたS3はバケット配下に以下のフォルダが並んでいます。

フォルダ名 用途
init テーブル作成時に取り込むデータを格納しておくフォルダ。
monthly データ投入サイクルが「月次」のデータを格納するフォルダ。
weekly データ投入サイクルが「週次」のデータを格納するフォルダ。
daily データ投入サイクルが「日次」のデータを格納するフォルダ。
hourly データ投入サイクルが「毎時」のデータを格納するフォルダ。
manual 任意の構成で自由に利用可能な形とするフォルダ。
program 構成要素「プログラム」を格納するフォルダ。
sql 構成要素「SQL」を格納するフォルダ。

今回はテーブルを作成するので、initフォルダ配下に対象のcsvファイルをアップロードします。

なお、それ以外のフォルダは今回使いませんが、データ更新頻度、用途に応じて、格納先フォルダを使い分ける事になります。

今回は、対象バケット配下の「init」というデフォルトで存在するフォルダにさらに「blog」というフォルダを作り、その中に、さきほどダウンロードしたsampleデータをアップロードします。

テーブル作成・データ取り込み操作

前述のとおりJMCからジョブの設定を行いますので、まずは、JMCにログインします。(ID、パスワードはインフラを構築後に弊社からお客様に連絡致します。)

ログイン後、下記のページが表示されます。

ヘッダーメニューの「リソース」から「テーブル作成(ファイルから)」を選択します。

モード選択から、任意のモードを選択します。今回は「ログ取り込みモード」でテーブルを作成したいと思います。

各モードの説明は以下のとおりです。

モード名 説明
ログ取り込みモード 「アクセスログ」等に代表される、列のデータ型や桁数の定義が不明または曖昧なデータ。列の定義を最大限大きく確保し、「ひとまずデータとして取り込む」事を念頭に置いた取り込みの場合に有用です。
DB取り込みモード データベース由来のデータや、列のデータ型・桁数の定義が明確である、または厳しく定義したいという場合に有用です。CSA JMCがデータの内容を自動判別し、より適した形でテーブル定義を作成します。 
カスタムモード テーブル定義作成そのものをユーザー側で個別に行う際に用います。(※テーブル作成SQLを自作し、構成要素に取り込んで実行するイメージです)

※「ログ取り込みモード」「DB取り込みモード」はいずれも、対象となるデータの中身をシステムで自動判別し、データの型を割り出します。

※ただし、内容によっては意図しない判定結果で作成される可能性もあります(文字列型としたかったが、中身が全て数字の場合は数値型で判定される等)

※その場合はSQLで任意のCREATE TABLE文を用意し、DBクライアントツールやCSAのジョブ機能(と構成要素SQL)を使ってテーブルを個別に作成してください。

「ログ取り込みモード」を選択すると下記の画面が表示されます。

必須事項を入力します。

    • テーブル名:Redshift上でのテーブル名
    • テーブルオーナー:「スキーマのオーナーと合わせる」、「SQL実行ユーザーをオーナーにする」いずれかから選択します。
    • バケット名:さきほどデータを格納したS3バケットを指定します。
    • S3ファイルパス:データを格納した、バケット配下の「init」内に作成したフォルダを指定します。
    • ファイル囲み文字:ファイルの囲み文字有無を指定します。
    • テーブル利用形態:テーブルの内容に応じて利用形態を指定します。
    • その他、Redshift特有の分散スタイル、ソートキー等、設定可能な事項もありますが、今回はテーブル作成・データ連携までの流れを簡単に概観したく、ブランクで進みます。

※今回は、S3のデータを元に、「テーブル作成」及び「データの連携」の為の手順となりますが、「データの連携」は行わずに「テーブル作成」のみ実施する場合は、下から2つ目の項目:「データを削除する」にチェックを入れます。

「作成」ボタンを押すと、下記のログイン直後の「ジョブ」画面に遷移し、上記で定義したテーブル作成・データ連携のジョブが動いていることがわかります。

なお、インジケーターは左から、成功、実行中、失敗、待機中となります。

ジョブが成功すると、左端の成功ステータスの数字が「8」から「9」に増えたことが確認できます。

テーブル作成・データ取り込み結果の確認

Redshiftに接続可能なDBクライアントから、データがRedshiftに反映されているか確認します。ここでは、DBクライアントツール:DBeaverを使います。

DBクライアントの接続設定で、Host(Redshiftのエンドポイント)、Port番号、データベース名、ユーザー名、パスワードを入力して接続します。

下記のように、CSVデータに対応したテーブルが作成され、そのテーブルにデータも合わせて格納されていることが確認出来ます。

まとめ

元のデータベースのテーブル定義に則って、SQLで任意のCREATE TABLE文を用意し、DBクライアントツールやCSAのジョブ機能でテーブルを作成した方がデータ型が正確で、データ長も過不足なく作成できますが、ひとまず、手元のCSV等のデータをRedshift上にテーブルとして展開したい、というときには、この機能が便利です。

今後もCSAの機能について定期的に発信していきます。