データ分析のためのSQL】データマートの名前はよく聞くけれども具体的にどうしたらいいのかどこにも書いてない自分の仕事を楽にするためにデータマートの設計をやることがあるのだが、ふとスタンダードなやり方ってどうなんだっけ?と調べてみると全然情報が出てこないのに驚いた。概念的なのはあるのだけれども具体的にどうしたらいいかがわからない。いうわけで作り方と言うより自分が設計するときはこうしている、という話がメインなので他のやり方あるよ!な話のきっかけになってくれればそれでいい。性別・・・区別がつけばなんでもいいけどルールの統一は必要カラム名からしてgenderとかsexとか表記が違うのに、中身は男性/女性、男/女、male/famele、m/fと実に多彩なパターンが見られる。使う人の間でルールが統一されてさえいえればよく、0/1/2にするかあとで集計して「これって1が男性?」とか毎回聞かれないように男性/女性/不明と文字で入れるかいつも迷うが0/1/2にすることが多い。区切りある人は80歳以上、ある人は70歳以上でひとまとめ、別の人は5歳刻みで希望とか作りこんでおくと楽なのは承知しているが個別に対応しているときりがないので一番使われるのは年代を作るとしてもあとは都度対応する、というのが現実解か。日付・・・どこまで個別に持つか秒単位まである日付型をそのまま持っていると集計の時めんどくさいので集計によく使いそうな値はカラムとして持たせておくのだがこれもきりがないので結局YYYYMMあたりが妥当か。気持ちとしてはYYYYMMDDも欲しいけど両方というのもまた微妙。あと週単位での集計が多いならどこかの日を基準にして週番号を付けておくと便利。削除データはどうするか・・・とりあえず全部突っ込んどく?マートを作る際にすでに削除されているレコードを削除してしまうか、削除されていると区別するようなフラグなりをつけるかは悩ましい。全部入れておいてあとで区別する方が使いまわしはきくがそれを忘れて全部集計してしまったり、逆に削除してしまったゆえに「あれどこいった」で時間を取られるので一長一短。区別するのは条件を加えれば済むが、そこに無いデータを探してくるのは大変なのでとりあえず全部突っ込んでおく、がベターか。マスタのつなぎ込み・・・正規化がどうした店名とか商品名とかよく使うマスタは全部JOINしておく。正規化なんて気にしない。毎日なり定期的に最新のデータに入れ替わるようになっていることが前提。細かいことを言い出すときりがないので思いついたのをいくつか書いてみた。やっているうちにこう考えるようになったのだけど、どこかにまとめられていたらどんなに楽だったことか。いった知識は少しづつでも書き溜めていけばそのうち役に立ちそうだが、そういう知識はたくさんあるので先はまだまだ遠い。