DWHっぽい事でも書いてみる
この記事はJPOUG Advent Calendarの21日目の記事です。
以前、JPOUGのイベントでLTやらせていただいた植木(id:kingyokkun)です。
私ごとながら、今月末付の12月19日最終出社日で退職になります。
年明けまで2週間程度ニート気分を味あわせてもらってます。
本日はDWHっぽい事でも書いてみようかと思います。
カテゴリをBigDataにしてますが、
残念ながら今までテラバイトクラスのBigDataは扱ってません。
MiddleDataくらいの話だと思ってくださいませ。
うろ覚えで書いているところもありますので、
曖昧なところがあればご容赦を。
まず、Oracleの集いなのでOracleでDWHを作る事を考えた場合
DWHもどき作るのって楽勝ですよね。
DBリンク越しにマテビュー使えばOK。
以上、終了。明日の記事は・・・、
では納得いかないと思いますのでもう少し続けます。。
実際、自分はマテビューでDWHを作った事は無いのですが
データ編集用のDBから参照専用のDBにデータを配るような処理を昔作りました。
ここでまず必ず引っかかるところですが、
マテビューってDBリンク越しだとON COMMITで作れないんですよね。
なので、編集処理用のシェルなりPL/SQLなりから
DBMS_MVIEW.REFRESHを呼び出す必要があります。
DWHなら即時反映する必要は無いと思うのでこれで全然OK。
ただし、この処理はREFRESHが完了するまで待ち状態になります。
なので、パラレルで処理したい場合や
複数のサーバーにデータを反映させたい場合は
DBMS_JOBを使ってREFRESH処理をキューに置いてくるような作りにすると
いい感じで命令だけ投げて、
結果は知らんけど投げてきたよーと応答がすぐに返ってきます。
正常終了したかどうかはDBMS_JOBで呼び出した処理に
終了確認させるような作りにすればOKです。
マテビューって本当にいいですよね。
Oracleならではの機能では本当にいい機能の一つだと思います。
DWHって大きい会社はともかくとして
有償のDB使いにくいんじゃないかなーとか思います。
私も持ってくる元はOracleだけど、
持っていく先は別のDBにしていました。
DWH用のDBですがPostgreSQLがとにかくおススめですね。
DWHとしてのPostgreSQLの素敵なところはBitmap Scanです。
OracleだとEEでしか使えないBitmapを使える。
最近、Amazon Redshiftなんてサービスができましたが、
あれも本体はポスグレのforkです。
多分、同じような理由からポスグレを選んだのではないかと思います。
他にはMySQLベースの列指向DBのinfiniDBなんてのもありますが
INSERT~SELECTやCREATE~AS SELECTが使えないとか
INSERTが遅い(基本、LOAD処理を使う)などといった問題があり
ちょっと最初に考えないといけない事が多いので
DBAが簡単に作ろうと思ったらPostgreSQLが一番だと思います。
使い方によってはMongoDBなんかもいいですが、
あんまり複雑な事はやらせられないですね。
次にデータを移すETLですが僕はPentaho ETLを使いました。
ぶっちゃけ、とりあえずDWH構築するなら自作スクリプト作った方が早いですが、
後の運用を考えるとETLは使った方が良いですね。
インストールは簡単。
vnc環境、Java環境を用意しておいてこのへんから取ってくる。
後は、どこかのディレクトリで解凍すれば完了です。
data-integrationディレクトリ配下のSpoon.shを叩けば立ち上がります。
そして、実際に処理を作成。
まずはConnection情報作成。
そしてTransformation作成。
基本はTable InputとTable Output、場合によりInsert/Updateを使用。
最後にJobを作る。
これでDWH完成です。
Hadoop等とのデータのやり取りもできるし、
使いこなせばなかなか楽しく使えると思います。
本番環境はお金をかけてOracleを使うけど、
データの分析にはなかなかお金をかけられない。
そもそも、お金をかけられないから実績も作れない。
そんなところは結構あるんじゃないでしょうか。
そんな時はこういったossでDWHを気軽に作って
実績を上げてみると良いかと思います。
今回のブログを書く直前に退職したので、テスト的に使える環境がなくて
ちょっと大変でした。(PCに急遽Win版Pentaho ETL入れたり。)
なんか知らんがうちのPCでprtscrがうまく効かないし・・・。
まあ、とりあえず形づけられてほっとしました。
明日は@yamadamnさんです。