SQLServerBIの構成形態 ETL編
SQLServerでBIやデータ分析をするときには、DBは使うとして
SSAS・SSIS・SSRSをどのように組み合わせるかはいろいろなパターンがあります。
ソリューションとして、
- SQLServerだけで組む
- 他の製品と組み合わせて使う
というのが前提として考える必要があります。
また、フロントツール(ユーザーインタフェース)を
- Webにする
- 専用ソフトを組む
- 他の専用ソフトを使う
- EXCELにする
というのでも変わります。
ただ、基本的な構成は、DWH・OLAPのソリューションモデルに
集約されるのではないかと思っています。(BI屋だからそう思うのかも)
基本構成は、データの流れで言うと下記のようになります。
(外部データソース)
↓
ETL ※SSIS
↓
DataBase ※SQLServer
↓
(OLAP DataBase) ※SSAS
↓
FromtTool ※SSRS or EXCEL※は、SQLServerのみで組んだ場合の製品
()は、無い構成もアリ!というところ。
いくつかのエントリに分けて、KAYANOの推奨構成を書いていきます。
KAYANOの推奨構成 ①ETL・DWH編
今回は、
の部分。
もともと、SQLServerを使っているシステムの場合、データは
SQLServerの中に格納されています。というか、常時更新されています。
こういう場合、ETLなしでいいんじゃないか?と思われるかもしれませんが、
KAYANOの推奨は、「今あるDBを外部データソースとして扱う」ということです。
BI用のデータベースは、アプリケーションで使っているデータベースとは
別のものを作成します。
理由は3つ
①データの範囲・対象が違う
アプリケーションで使用しているデータは、大抵の場合、BIで使用する
データと範囲や対象が異なっています。
BIでは時系列で分析するため、過去すべてとか数年のデータを
「生きたデータ」として使います。
しかし、オンラインでは過去データはあくまで参照用のデータとして
保持します。
逆に、アプリケーションで必要となる一時的なワークデータや未確定の
データなどは、BIでは不要なケースが多いです。
②性能の出し方が違う
インデックス計画だけでなく、パーティションなども含め、
BIとオンラインでは性能要件が全く違います。
オンラインでは、「今必要な部分」のデータが取り出せればいいのですが
BIでは、「任意のキーで絞った全データ」が必要になります。
①同様、過去すべてが生きたデータだからです。
これは、オンラインへの影響を最小限に抑えるためにも重要なポイントになります。
③整合性のレベルが違う
オンラインでは、業務を優先するので若干のマスタ不整合を許容する
ケースがあります。マスタ未登録でも仮登録できるとか、NULLでもいいとか。
BIでは、極力このような不整合状態をなくすようにします。
未登録はNULLでもいいのですが、「NULLは未登録の状態」と
はっきりしていれば、「未登録用のコード」を割り振つけて
しまう方が扱いやすくなります。
ということで
(外部データソース)
↓
DataBase ※SQLServer
という部分は必須ということになります。
プログラミングに慣れている人や、SQLに慣れている人であれば、VBやC#,スクリプト、SQLなど色々な手法を考えると思います。
私も、ここをストアドプロシージャで作ったり、VIEW+SQLで作ったりすることもあります。
もちろんScriptingもあります。
でも、推奨は、SSISです。
理由は2つ。
①わかりやすい
GUIでの開発で、データの流し方がわかりやすくなります。
特に別の担当者に引き継いだり依頼したりするときに、非常に有効です。
②速い
SSISに限らずETLは、アーキテクチャ的に(性能を向上させる為のコツが
必要になりますが)他の手法に比べて処理速度が格段に速くできます。
特に数100万レコード以上のデータを扱う場合は、重要なポイントです。
と書いたものの、
ETLには得手不得手な処理があり、性能を出すために、不得手な部分は、
他の手法・ツールと上手く組み合わせる必要があります。
ですので「GUIだからSQLを全く知らなくても使える」とか
「プログラミング言語をわからなくても大丈夫」とかということはありません。
それでも、ほとんどのことは、GUI上でできるので、
設計書をそのまま走らせている
という感じで開発ができます。
絶対にお勧めです。
おまけ
と書きましたが、DWHではDataBaseの前にもう一つDataBase(ODSと呼んでます)を置くのがご作法です。ODSは、外部データソースのコピーであり、かつ、必要な過去データも保持します。
ODSを置く場合に、外部→ODSの部分をどういう方式にするかは、悩ましいです。
が、私は、ここも、SSISを使います。
ま、ODSや、外部取り込みの話はそのうち。
ってことで、じゃーねー