dashDB サービスを利用して、Ruby でビジネス・インテリジェンスおよびアナリティクス・サービスを作成する

IBM Bluemix 上のアプリケーションにウェアハウス・データベースとアナリティクス・ツールを追加する

Comments

IBM Bluemix で利用可能な dashDB サービス (以前は Analytics Warehouse サービスと呼ばれていました) は、ビジネス・インテリジェンスとアナリティクス・タスクに対応した、アジャイルかつ強力で使いやすいプラットフォームを提供します。エンタープライズ規模で管理されるこのサービスには、最適化された列編成のインメモリー BLU Acceleration データウェアハウス・テクノロジーが採用されています。この記事では、Bluemix で UI を何回かクリックすることにより、アプリケーションですぐに利用できるビジネス・インテリジェンスおよびアナリティクス・サービスを作成します。その後、dashDB サービスを利用して単純なグラフ・ベースのアプリケーションを作成するためのステップを実行し、そのアプリケーションを Bluemix にデプロイします。

アプリを実行するコードを入手する

始める前に

この記事でアプリケーションを作成するために必要なものは、以下の通りです。

  • Ruby プログラミング言語の十分な知識
  • 以下の Ruby モジュールの十分な知識
  • Sinatra: Ruby Web アプリケーション・ライブラリー
  • ibm_db: IBM データ・サーバー用の Ruby ドライバー/Rails アダプター
  • Google Charts: Google Chart API に対する単純な Ruby ラッパー
  • Cloud Foundry コマンド・ライン・ツール cf を使用するための十分な知識

これからステップバイステップのプロセスに従って、Bluemix 上で dashDB サービスを利用する Ruby ベースの Sinatra アプリケーションを作成してデプロイします。

ステップ 1. 基本的な Sinatra アプリケーションを作成する

  1. このアプリケーション用の Gemfile を作成し、そこにこのアプリケーションで必要な gem を記載します。
    source 'https://rubygems.org'
    gem 'sinatra'
    gem 'ibm_db'
    gem 'googlecharts'
    gem 'rack'
  2. 依存関係をインストールします。
    bundle install
  3. get '/' メソッドで index ページをレンダリングする、単純な Sinatra アプリケーションを作成します。この例では、ファイルに bluaccl.rb という名前を付けます。

    このメソッドは、ユーザーがルート・ページを表示する際に呼び出されます。

    require 'rubygems'
    require 'sinatra'
    require 'ibm_db'
    require 'json'
    require 'gchart'
    
    Tilt.register Tilt::ERBTemplate, 'html.erb' #Set template engine as erb for Sinatra
    
    get '/' do
      erb :index
    end
  4. views フォルダー内に index.html.erb ファイルを作成し、get '/' メソッドでレンダリングされる挨拶メッセージを含めます。
    <html>
    <h1>Hello Sinatra</h1>
    </html>
  5. rackup ファイルを作成し、config.ru という名前を付けます。
    require './bluaccl'
    run Sinatra::Application
  6. 以下のコマンドを使用して、アプリケーションを実行します。
    $ rackup

    http://localhost:9292 リンクにアクセスして、Sinatra アプリケーションを確認します。

    稼働中の基本的な Sinatra アプリケーションのスクリーン・キャプチャー
    稼働中の基本的な Sinatra アプリケーションのスクリーン・キャプチャー

ステップ 2. dashDB サービスに対してクエリーを実行する

アプリケーションから dashDB サービスにアクセスする準備が整いました。このステップでは、ibm_db gem を使用して dashDB サービスにアクセスした後、このサービスに対してクエリーを実行します。

  1. ibm_db gem を使用して dashDB サービスにアクセスします。アプリケーションが Bluemix 上で実行されている状態のときに、VCAP_SERVICES 環境変数からデータベース資格情報を取得します。
    #Parse VCAP_SERVICES to get Analytics Warehouse Service credentials
    if(ENV['VCAP_SERVICES'])
    
    # we are running inside PaaS, access database details from VCAP_Services
    
     $db = JSON.parse(ENV['VCAP_SERVICES'])["AnalyticsWarehouse"]
     $credentials = $db.first["credentials"]
     $host = $credentials["host"]
     $username = $credentials["username"]
     $password = $credentials["password"]
     $database = $credentials["db"]
     $port = $credentials["port"]
    
    else
    
    # we are running local, provide local DB credentials
    
     $host = "localhost"
     $username = "bludbuser"
     $password = "password"
     $database = "BLUDB"
     $port = 50000
    end
  2. dashDB サービスに接続してクエリーを実行し、その結果セットを ibm_db gem の API を使用して処理します。
    require 'ibm_db'
    def getDataFromDW
    #Connect to database using parsed credentials
      conn = IBM_DB.connect "DATABASE=#{$database};HOSTNAME=#{$host};PORT=#{$port};PROTOCOL=TCPIP;UID=#{$username};PWD=#{$password};", '', ''
    
      #Run the analytic SQL
      stmt = IBM_DB.exec conn, $profitAnalysisSQL
      data = {}
    
      while(res = IBM_DB.fetch_assoc stmt)
        if data.has_key?(res['PRODUCT'])
          data[res['PRODUCT']][res['YEAR']] = res['PROFIT']
        else
          profit = {}
          profit[res['YEAR']] = res['PROFIT']
          data[res['PRODUCT']] = profit
        end
      end
      IBM_DB.close conn
      return data
    end

ステップ 3. Googlecharts を使用して棒グラフを作成する

次は、Google Charts を使用して、dashDB から取得したデータに基づく棒グラフを描画する方法を説明します。Google Charts には、線グラフ、棒グラフ、円グラフなど、さまざまなタイプのグラフを生成するための各種オプションが用意されています。

以下のサンプル・コードは、Ruby Googlecharts モジュール (Google Chart API をラップする単純なラッパー) を使用して、データベースから取得したデータの棒グラフを描画します。

def renderBarGraph data
  array2011 = [] #Array group that contains profits for Brands respectively for year 2011
  array2012 = []
  array2013 = []
  productNames = []

  #Render a Bar chart that shows profits of each Product Brand in comparison year-to-year

  data.each do |product,profitHash|
    productNames << product
    profitHash.each do |year, profit|
      if(year == 2011)
        array2011 << profit
      elsif (year == 2012)
        array2012 << profit
      else
        array2013 << profit
      end
      if(profit > max)
        max = profit
      end
    end
  end
#Render the Bar chart using the gchart library and return the img html tag for display
  Gchart.bar(
           :title => "Profit by Product Brand",
           :data => [array2011, array2012, array2013],
           :background => 'efefef', :chart_background => 'CCCCCC',
           :bar_colors => '0000DD,00AA00,EE00EE',
           :stacked => false,
           :size => '600x400',
           :bar_width_and_spacing => '15,0,30',
           :legend => ['2011', '2012','2013'],
           :axis_with_labels => 'x,y',
           :axis_labels => [productNames.join('|'), [0,(max/2).to_f,max.to_f].join('|')],
           #:format => 'file', :filename => 'custom_filename.png') #To save to a file
           :format => 'image_tag',:alt => "Profit by brand img") #To be rendered as an image on web page
end

ステップ 4. コードを 1 つに結合する

これまでのセクションで記載したサンプル・コードを 1 つに結合して、実際に機能するアプリケーションに仕上げます。

まず、これまでのすべてのサンプル・コードを bluaccl.rb という名前の 1 つのファイルにまとめ、アプリケーションの 'get' メソッドを構成して、getDataFromDW 関数と renderBarGraph 関数を呼び出すようにします。

次に、index.html.erb ファイルに変更を加え、アプリケーションに関する情報と、クエリーを実行してグラフを表示するボタンを指定します。

DevOps Services (JazzHub) リポジトリーで、以上のステップを実行するコードにアクセスします。

以上のステップが完了したら、今度は Bluemix にアプリケーションをデプロイします。

ステップ 5. アプリケーションを Bluemix にデプロイする

  1. Bluemix にログインします。Bluemix の「Catalog (カタログ)」タブで Ruby Sinatra ランタイムを選択して、Ruby Sinatra アプリケーションを作成します。 Bluemix の「Catalog (カタログ)」タブのスクリーン・キャプチャー
    Bluemix の「Catalog (カタログ)」タブのスクリーン・キャプチャー
  2. 「Create Application (アプリケーションの作成)」フォームで、「AppName (アプリケーション名)」を指定します。この例では、「bluaccel」という名前を指定します。
  3. dashDB サービスのインスタンスをアプリケーションにバインドします。

    Bluemix の「Dashboard (ダッシュボード)」タブでこのアプリケーションをクリックしてから、「Add a new service (新規サービスの追加)」を選択します。サービス一式の中から「dashDB」サービスを選択し、アプリケーションに追加します。

    Bluemix のサービス・リスト・ダッシュボードのスクリーン・ショット
    Bluemix のサービス・リスト・ダッシュボードのスクリーン・ショット
  4. アプリケーションを Bluemix にデプロイします。
    Set the cf target and then deploy your application to Bluemix with the db2rubybuildpack.
    
    $ cf push bluaccl -b https://github.com/ibmdb/db2rubybuildpack
  5. アプリケーションの左側にあるナビゲーション・ペインで「OVERVIEW (概要)」をクリックします。 アプリケーションへアクセスするルートのスクリーン・キャプチャー
    アプリケーションへアクセスするルートのスクリーン・キャプチャー
  6. 新しいタブまたはウィンドウでアプリケーションを起動するには、アプリケーションのハイパーリンクをクリックします。すると、index ページが表示されます。 アプリケーションの index ページのスクリーン・キャプチャー
    アプリケーションの index ページのスクリーン・キャプチャー
  7. アプリケーションでレポートを表示してみましょう。「Show profit by Product (製品別利益の表示)」をクリックすると、製品ブランド別利益の棒グラフが表示されます。 製品ブランド別利益の統計を示す棒グラフのスクリーン・キャプチャー
    製品ブランド別利益の統計を示す棒グラフのスクリーン・キャプチャー

まとめ

このサンプル・アプリケーションで、Bluemix ではエンタープライズ・クラスの dashDB サービスを簡単に利用できることがわかったはずです。数回クリックするだけで、dashDB の機能を利用するアプリケーションをデプロイすることができました。この迅速かつ容易に作成できる Ruby アプリケーションは、Web リクエストに応答し、ibm_db モジュールと Googlecharts モジュールを使用してデータウェアハウスからマイニングされた結果を表示します。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=ビジネス・アナリティクス, Cloud computing, Information Management
ArticleID=972045
ArticleTitle=dashDB サービスを利用して、Ruby でビジネス・インテリジェンスおよびアナリティクス・サービスを作成する
publish-date=07232015