Dataformを初めて使ってみたので、雑に感想を書いておきます。結構よかった。
使ってみようとした背景
今週、社内の開発合宿に参加していた。変更のリードタイムやデプロイ頻度などのFour Keysにあるような指標を計測できるデータ基盤を作るのが目標。様々なチームの開発のパフォーマンスをトラッキングしやすくして、うまくできているチームがなぜうまくいっているのかを明らかにしたり、改善施策を行なった結果指標も改善しているか定量的に確認できるようにして、開発効率を上げる土台を作るというのが目的。この辺の詳しいことは後々別のエントリで書かれると思う。
自分のチームは3人構成で、在宅のオンラインでやっていた。
- id:shiba_yu36さん
- Mackerelチームでも元々一緒に開発効率の計測をやっていた
- 指標自体や改善施策をやったりするのはid:shiba_yu36さんが得意で、自分はそのデータを突っ込むデータ基盤のことや指標をSQLで計算したり可視化などを担当していた
- Mackerelチーム以外にも展開していきたいねーということで今回の開発合宿でまた一緒にやることに
- Mackerelチームでも元々一緒に開発効率の計測をやっていた
- id:polamjagくん
- 別チームでアプリケーションエンジニアをやりつつ、データ活用もバシバシ推進してくれてる
- 突撃! 隣のダッシュボードや社内のデータ活用系のチャンネルでよく話していたものの、一緒に仕事をする機会は案外これまでなかった
- id:syou6162が是非一緒に仕事してみたかったので、合宿参加
Dataformについて
仕事でも普段やっているデータ基盤の管理やデータ分析を合宿でも担当する立ち位置で私は参加していた。せっかくの開発合宿なので、実験的に新しい要素を取り入れてみたいねということもあり、Dataformを使ってみることした。
Dataformはデータパイプラインを管理するのに便利なGoogle Cloudのサービスで、こういう特徴がある。
- データウェアハウスのテーブル定義、データ変換のロジック(SQL)を管理できる
- SQLXというやつに書いていく
- メタデータ(テーブルの説明、カラムの説明、タグなど)を書いたり、
ref
という依存関係を明示することでリソース間の依存関係(データリネージ的なもの)も可視化してくれる- SQLとメタデータを一緒に管理しておけるのは便利
- 特に依存関係、自前でやるのは地味にダルかったんだよね...
- 定義した上で反映(deploy)して、というのも自前でやるのはスクリプトを用意していたが、お任せできるので楽
- DataformのWebコンソールでポチポチいじった結果をSQLXの差分として見ることができて、Githubとの連携してブランチを作るなどデータ基盤のバージョン管理を任せることができる
普段の仕事でも↑のようなことはシェルスクリプトやPythonのスクリプトでやっていたが、そのスクリプト自体の管理をある程度手放すことができるのでありがたい。
試してみてどうだったか
ほぼ初めて触った & まだ3日しか利用していないですが、結構よいなと思いました。業務のリポジトリでいきなりやるのは大変なので、趣味プロジェクトはDataformに早速乗り換える予定。
よかった
- 欲しかったものが素早く実現できた
- 合宿は3日間あったけど、最後は多少時間が余るくらいだった
- 「そうそう、これ欲しかったのよね」的なものが大方揃っている
- asssertion(
uniqueKey
/nonNull
/nonNull
)とかは特にそう。自前で仕組みを作ったりしていた
- asssertion(
- データ基盤をIaCできる
- scheduled queryなどはBigQueryのWebコンソールからでも作れるが、変更履歴などが分からないのでカオスになりがち
- IaCできるので、レビューがやりやすくなったり、切り戻しなどもやりやすくなる
- JavaScriptを書くこともできて、定義の使い回しなどもやりやすそう
- まだあまり深くは使えていない
データ基盤管理のためにあれこれ自前で書いたスクリプト、ほとんど同じものがdataformとかのマネージドサービスで提供されると必要なくなって捨てるかーという気持ちになるんだけど、自分のやろうとしていた方向性は概ね間違っていなかったわねといういい気持ちにもなる
— Yasuhisa Yoshida (@syou6162) 2021年1月22日
一方で、そういうところはどんどんベースラインが上がってくるわけなので、ツールを使うだけじゃない自分が発揮する価値はどういうところなのかねーっていうのを今よりもっと考えていかないと仕事なくなりそうね(これはデータ基盤に限らず)
— Yasuhisa Yoshida (@syou6162) 2021年1月22日
まだまだこれからっぽいところ & 気になり
- 独自の概念を覚える必要がある
- 特にBigQueryと用語が結構違う
- BigQueryの
Dataset
がDataformだとSchema
に対応 - BigQueryの
Table
がDataformだとDataset
に対応
- BigQueryの
- DataformはBigQueryに限らずSnowflakeやRedshiftなど他のデータウェアハウスにも対応しているからこうなっているんだろうなとは思うものの、初手では混乱した
- 特にBigQueryと用語が結構違う
- 利用例はまだまだ少ない
- はまったときにぐぐっても出てこないことがまだ多いかも。これから利用例もどんどん増えてくると思うので、問題なくなってくるとは思う
- Webコンソールの細かいところはもうちょい改善されて欲しい
- gitのcommitメッセージを記入中にIMEの確定でcommitが保存されてしまうところとかw
- 新規でデータ基盤を作るときはよいが、既存のデータ基盤との共存や移行のやり方
- Dataformで管理するところと素のBigQueryや自前のスクリプトで管理するところの境界線の引き方
- もうちょっとノウハウを溜めていく必要がある
dataformをちょいちょい触っていて結構いいじゃんとなりつつあるんだけど、データマネジメントやデータガバナンスの観点でLookerと若干被るところがある気がしている。同じGoogle Cloudで出ているサービスではあるけど、Google Cloudの中の人的にはどういう場合はこっちを使って欲しいとかあるのかなー
— Yasuhisa Yoshida (@syou6162) 2021年1月20日
Lookerのほうが深くガバナンスにつっこんでいけそうな気もするけど、dataformはpricingの意味ではもっと気軽にできる、とかはあるかな?
— Yasuhisa Yoshida (@syou6162) 2021年1月20日
Lookerはデモを見たくらいなので、仕事ではまだ使ってないから大分勘です...
— Yasuhisa Yoshida (@syou6162) 2021年1月20日
コード管理考えると、併用はうまくいかない気はしてる
— Yasuhisa Yoshida (@syou6162) 2021年1月20日