matobaの備忘録

育児しながら働くあるエンジニアの記録

データレイクやデータウェアハウスについて

データ分析の話題に関連して、データレイクやデータウェアハウスといった単語を聞くことがあります。以前、聞いて調べたこともあるのですが、いまいちピンとくる説明が見つかりませんでした。今は、以前と比較して「データレイクやデータウェアハウスって、こういうこと?」と言う理解が進んできました。今回は、現時点の知識を元に当時の私が知りたかった情報を説明してみます。

前提情報

インターネットを中心にデータレイクやデータウェアハウスについて調べていました。 その中でも特に次の書籍で得た知識は私にとって大きな意味がありました。 なので、この記事に興味を持った方には、とりあえずこの本をオススメしています。

私は、この本を非常に良い本だと思っていて、データ基盤について気になることがあれば、この本を眺めることにしてます。 なお、私は本格的なデータ基盤を構築したことはありません。この記事で説明した情報が間違っていれば誰か指摘いただけると助かります。

データ基盤の3つの層

前提として、データレイクやデータウェアハウスは、データ基盤の中での役割や種類を表す用語です。

データレイク、データウェアハウス、データマート、という三つの用語が並んで出てくるケースをよく見かけます。 それぞれのシステムとしての目的が違います。

そもそもの話として、インターネット上の情報を見ると、実装や仕組みの話ばかりが出てきます。 今、思うのはデータレイク/データウェアハウス/データマートにしても、目的を理解するのが重要だと思っています。 そして、目的がわかった上で、技術的な話を読むと理解が進みます。

というか、その目的があった上で、良い感じにシステムを作っているのがデータレイクやデータウェアハウスなどなど、と考えると理解がスムーズになったように思います。

データレイク

データレイクは、とってきたデータを貯める場所を指します。 これはオブジェクトストレージのこともあれば、データベースのこともあります。 重要なのは、「とってきたものをそのまま保存する場所である」ということです。

データレイクの目的は、「データをとってくる」という課題だけを終わらせた状態にすることにあります。 データといってもいろんな種類があるし、色んな場所から集めてくることになります。 そして、それを実現するためのシステムです。

データを収集する場合、毎回、一次情報を取りに行くのは大変です。 なので、集めてきたデータをそのまま保管しておくと便利でしょう。 そして、実際に利用するときはそのデータをコピーして使います。 このために集めたデータの一次情報の置き場が「データレイク」と呼ばれます。

インターネット上で、データレイクについて調べていると、データの保管の説明ばかりが出てくるように思います。 それは次の話の展開が隠れているように思います。

  • とりあえずデータをとってきたら保管したい。保管する場所が欲しい。
  • 過去に収集したデータは削除せずに全て保管したい。容量無制限が良い。
  • 容量無制限にするためには、必然的にパブリッククラウドのオブジェクトストレージを利用し、それを管理するための何かも必要になる。
  • また、データの形式もテキストや画像や色々あり、大容量データを保存することを考えるなら、できるだけ圧縮しておきたい。
  • これらはデータを収集し、保管する仕組みにとって、よくあるパターンになってるケースがある。

こんな話があって、色々良い感じに構築されたシステムが「データレイク」と呼ばれていると理解してます。

cloud.google.com

aws.amazon.com

データウェアハウス

データレイクにあるデータは集めてきた状態で整理されていません。 データを整理・構造化して、分析するのがデータウェアハウスです。

ウェアハウスは倉庫であり、データを良い感じに整理して格納している状態をイメージしています。 データが少なければ、普通のRDBで分析できるでしょうが、大規模なデータになれば、GCPのBigQueryやAWSのRedshiftなどなどを使わないと現実的な時間で処理できなくなります。

このような大容量のデータ分析に特化したリレーショナルデータベースをデータウェアハウスと呼びます。 なお、データレイクにデータを溜めずに、直接データウェアハウスに放り込むケースもあるようです。

というわけで

上記の前提を考慮して、ミニマムなデータ基盤の仕組みを作ってみて、イメージを検証してみました。

  • データレイクは、外部やいろんな場所から収集したデータを何も考えずに積み上げる仕組みになりました。
  • データウェアハウスは、データレイクにあるデータを取り込んで構造化し、SQLで集計できる仕組みにしました。

やってみて思ったこと

  • データレイクと、データウェアハウスという役割が分かれていることで、「データをとってくる」「データを構造化して保管する」の工程を分割できました。また、とってきたデータを保管しているので後から構造化データに再度取り込むことも容易です。そう考えると、分析用のデータ構造の定義も必要最低限にしておいて、後から追加することも容易になることが実感できました。
  • データウェアハウスに構造化データが入ってると、当たり前ですが、分析が容易になりました。参照しやすい場所にデータがあることで、とりあえずグリグリとデータを変更してみることが容易になりました。

終わり

とりあえず、今の知識を書き出してみました。 何かの参考になれば幸いです。

では