あらすじは以下の通り。
データエンジニアリングとは、組織内外で日々生成されるデータを蓄積し分析するためのデータシステムを構築し維持管理することであり、急速に注目を集めている分野です。
近年ではデータエンジニアリングを支えるツールやクラウドサービスが成熟し、組織へのデータ利活用の導入は容易になりましたが、明確な指針のないままデータシステムの構築を進めると費用と時間を無駄に費やすことになります。
本書は「データエンジニアリングライフサイクル」を軸にデータシステムの要件を整理することで、組織の「データ成熟度」に応じたデータシステム構築の指針を与えます。またデータエンジニアの立ち位置を明確にし、組織内でデータエンジニアが果たすべき役割を示します。
本書でいう「データエンジニアリングライフサイクル」とは生データを有用な最終プロダクトに変えていくための複数のステージ(生成、保存、取り込み、変換、提供)を意味している。有用な最終プロダクトとは例えば経営意思決定者のためのレポートであったり、データを活用して顧客のエンゲージメントを高めるための推薦システムが挙げられる。
「生成」とはデータソースとなるシステムが事業的に価値のあるデータ(例えば Uber であれば、乗客のアプリ利用履歴や配車のログなど)を生み出す活動のこと。生成されたデータはストレージに「保存」され、データウェアハウスに「取り込ま」れ、分析しやすい形に「変換」され、最終的なデータのユーザー(社内の意思決定者やデータを活用するプロダクト)に「提供」される。このプロセスは一般的に ELT(Extract-Load-Transform)とか ETL(Extract-Transform-Load)と呼ばれる。
本書ではまずデータエンジニアリングのライフサイクルの全体像を紹介し、それを実現するための組織や技術について考察した上でライフサイクルの構成要素を一つ一つ分析していく。また、それぞれの構成要素に対してデータエンジニアリング業務を支える底流(セキュリティ、データ管理、DataOps、データアーキテクチャ、オーケストレーション、ソフトウェアエンジニアリング)がどのように関係しているかを紹介する。
一読した感想としては、技術者というよりデータプロダクトの管理者であったり初心者または仕事の進め方に悩んでいる方向けの本という印象を受けた。紙幅が限られている中で広い分野を扱っているので仕方ないのだが、どうしても個々の要素の扱いが薄くなりがちで技術的に重要と思われる場所の説明が省かれて参考文献の提示だけになっていたりする。一方で、データを扱うシステムを構築する上で注意しなければならない要素は一通りまとまっているので、これを読んだ上で技術的に気になるところがあれば参考文献等で深掘りしていく読み方が良いと思った。
個人的には本書の参考文献として何度か登場する「データ指向アプリケーションデザイン」がすごく良い本だった(感想)ので、この本で不足する人にはそちらもお勧めしたい。
ここからは本書で特に印象に残った箇所について。
第四章「データエンジニアリングライフサイクルにおけるテクノロジの選択」において「クラウドの経済に関する寄り道」というコラムがあった。
著者はクラウドの活用について、アーカイブストレージの利用料金を題材に「クラウドを効率的に利用するにはクラウド事業者がどのように収益をあげているか知る必要がある」と主張する。
例えば Google Cloud では長期アーカイブ用のストレージと標準的なストレージは同じクラスタで動作する。つまり同等のハードウェアを使っているわけだが、実際の料金には大きな差がある(参考)。これはクラウド事業者が単に計算資源を時間単位で売っているのではなく、耐久性・信頼性・寿命・予測可能性等のサービスや抽象化された資源(ストレージ容量, IOPS, 帯域幅など)を売っているからだ。
言われてみると当たり前のことではあるのだが、クラウド事業者が提供する製品によって何のリスクを回避するのか、それによってどのような価値を創出するのかという視点は大事にしていきたいと思った。