データマートの作り方

2019年9月18日

データマートの名前はよく聞くけれども具体的にどうしたらいいのかどこにも書いてない

自分の仕事を楽にするためにデータマートの設計をやることがあるのだが、ふとスタンダードなやり方ってどうなんだっけ?と調べてみると全然情報が出てこないのに驚いた。概念的なのはあるのだけれども具体的にどうしたらいいかがわからない。

というわけで作り方と言うより自分が設計するときはこうしている、という話がメインなので他のやり方あるよ!な話のきっかけになってくれればそれでいい。

データマートの作り方

性別・・・区別がつけばなんでもいいけどルールの統一は必要

カラム名からしてgenderとかsexとか表記が違うのに、中身は男性/女性、男/女、male/famele、m/fと実に多彩なパターンが見られる。

使う人の間でルールが統一されてさえいえればよく、0/1/2にするかあとで集計して「これって1が男性?」とか毎回聞かれないように男性/女性/不明と文字で入れるかいつも迷うが0/1/2にすることが多い。

ただマートを作る前から存在しているあちこちにちらばったテーブルでの違いはいかんともしがたい。

年齢・・・異常値の扱いについて

100とか110とか実際にはいるかもしれないけれどもこのサービス使わないよね、という年齢ならnullもマイナスも全部ひとまとめに異常値扱いにして0にするとすっきりするのだけどこれって普通のことなんだろうか。

年代・・・〇代以上の区切り

ある人は80歳以上、ある人は70歳以上でひとまとめ、別の人は5歳刻みで希望とか作りこんでおくと楽なのは承知しているが個別に対応しているときりがないので一番使われるのは年代を作るとしてもあとは都度対応する、というのが現実解か。

日付・・・どこまで個別に持つか

秒単位まである日付型をそのまま持っていると集計の時めんどくさいので集計によく使いそうな値はカラムとして持たせておくのだがこれもきりがないので結局YYYYMMあたりが妥当か。気持ちとしてはYYYYMMDDも欲しいけど両方というのもまた微妙。

あと週単位での集計が多いならどこかの日を基準にして週番号を付けておくと便利。

削除データはどうするか・・・とりあえず全部突っ込んどく?

マートを作る際にすでに削除されているレコードを削除してしまうか、削除されていると区別するようなフラグなりをつけるかは悩ましい。

全部入れておいてあとで区別する方が使いまわしはきくがそれを忘れて全部集計してしまったり、逆に削除してしまったゆえに「あれどこいった」で時間を取られるので一長一短。

ただ区別するのは条件を加えれば済むが、そこに無いデータを探してくるのは大変なのでとりあえず全部突っ込んでおく、がベターか。

マスタのつなぎ込み・・・正規化がどうした

店名とか商品名とかよく使うマスタは全部JOINしておく。正規化なんて気にしない。

ただし毎日なり定期的に最新のデータに入れ替わるようになっていることが前提。

「みんなやってるはずだけど体系化されていないからみんな独学or独学の師匠から一子相伝で学んでみんなで車輪の再発明」な状態

細かいことを言い出すときりがないので思いついたのをいくつか書いてみた。多分いろいろやっているうちにこう考えるようになったのだけど、どこかにまとめられていたらどんなに楽だったことか。

こういった知識は少しづつでも書き溜めていけばそのうち役に立ちそうだが、そういう知識はたくさんあるので先はまだまだ遠い。