Upgrade to Pro — share decks privately, control downloads, hide ads and more …

複数データソースにまたがった分析環境の改善計画 / improvement-plan-fo...

複数データソースにまたがった分析環境の改善計画 / improvement-plan-for-analytical-environment

【09/15 イベント登壇資料】
Nowcast主催の「データ分析環境に関する勉強会」にestieから黒崎( @kuro_m88 )が登壇いたします。

redashやAmazon Athena、Amazon RDSなど複数データソースにまたがった分析環境の改善計画についてお話ししました。

▼ 会社について
会社サイト:https://www.estie.jp/corp/
エンジニア採用サイト:https://jobs.estie.jp/

estie | エスティ

September 15, 2021
Tweet

More Decks by estie | エスティ

Other Decks in Technology

Transcript

  1. データ基盤、ほしいですか? • 󰢧 ほしいに決まってる! • 󰢨 かっこいいデータ基盤がほしい! ◦ ETLってやつがやりたい! •

    󰢧「データの民主化」がやりたい! ◦ みんなが平等にデータにアクセスできる世界!
  2. データ基盤、ほしいですか? • 🤔 データ、ありますか? ◦ ないものは集めようがない • 🤯 意味のあるログですか? ◦

    なんとなく出力したログ、役に立たないことが多い • 🥺 基盤づくりから始めるのは危険かも? ◦ 分析したいユースケースや追いたいKPIの設計からはじめよう
  3. 身も蓋もない話 • まずはGoogle Analytics入れましょう ◦ webやネイティブアプリの場合 • カスタムイベントの計測も充実しています ◦ アクション,

    カテゴリ, ラベル, 値などを組み合わせてイベントの記録が可能 • 生ログも分析可能 ◦ GA4からBigQueryで分析できちゃいます! • 無料ではじめられます💸
  4. スタートアップ(立ち上げ初期)のデータ基盤 • クライアントサイドで取れないがものある ◦ サーバサイドでしか取れないもの、秘匿性の高いものなど • ログ自体の信頼性を担保したい ◦ アクセス解析用途ではなく証跡用途など •

    正確なレポーティングを事業として提供する ◦ 高度な分析を事業価値としていきたい • このあたりの需要が出てきたらデータ基盤の設計に乗り出しましょう • 最初から焦らなくても大丈夫です!要件を整理するのが先!
  5. 余談: 法的側面 • 󰢨アクセスログって保存しないといけないって聞きました! ◦ 必ずしも義務付けられているわけではないかも…? • 企業における情報システムのログ管理に関する実態調査 - IPA

    より ◦ https://www.ipa.go.jp/files/000052999.pdf • ログの開示を求められる確率は事業規模が大きくなるにつれて大きくなる 可能性があるので、どこかのタイミングで考慮する必要はあるかも
  6. スタートアップのつらみ • 採用が軌道にのるとエンジニアが増えてくる(嬉しい) • 開発スピードもどんどん上がっていく(嬉しい) • ひとまず作ったものがいつのまにかみんな使っている(嬉しい) ◦ ログも散らかり始める(あれ…) ◦

    あとからしくみを変えづらい(うっ…) • 分析をミッションに入社したもののなんもわからん(つらい…) • 正直そんなにお金がかけられない(だいたいそう…)
  7. ほしいデータ基盤像 • スモールスタートしたい ◦ コストのことを考えても必須 • シンプルな構成 ◦ あとから入った人でもすぐわかるように •

    そこそこのパフォーマンス ◦ 爆速である必要もない、安定してくれる方が嬉しい • メンテしたくない ◦ そこに人的リソースを割きたくない
  8. estieの現状 • 主な分析対象 ◦ RDS内のestieが提供するオフィス不動産データ (ビル/募集/入居テナント等) ◦ RDS内のユーザがDB内に作成したデータ (ウォッチする物件のリスト等) ◦

    S3に出力されたサーバのアクセスログ • 体制 ◦ ビジネス/エンジニア問わず全員がSQLを書く ◦ データアナリストが依頼されて分析するような分業はしてない ◦ 不動産デベロッパー出身者も週1回の勉強会でクエリを書けるように
  9. つらいポイント1: 複数データソース • RDSにあるユーザの属性とS3のログデータを組み合わせて利用状況分析 ◦ RDSとS3のJOINをしたい… • 現状のJOIN方法 ◦ RDSからselectした結果とS3からselectした結果をredashに保存

    ◦ redashのquery results機能を使ってJOIN(内部実装はsqlite🔥) SELECT month, org_id, function, sum(action_count) FROM query_1533 as function_analysis LEFT JOIN query_1489 as active_users ON active_users.user_id=function_analysis.user_id AND active_users.org_id={{ org_id }} GROUP BY month, org_id, function_analysis.function ORDER BY month
  10. つらいポイント1: 複数データソース • RDSにあるユーザの属性とS3のログデータを組み合わせて利用状況分析 ◦ RDSとS3のJOINをしたい… • 現状のJOIN方法 ◦ RDSからselectした結果とS3からselectした結果をredashに保存

    ◦ redashのquery results機能を使ってJOIN(内部実装はSQLite🔥) SELECT month, org_id, function, sum(action_count) FROM query_1533 as function_analysis LEFT JOIN query_1489 as active_users ON active_users.user_id=function_analysis.user_id AND active_users.org_id={{ org_id }} GROUP BY month, org_id, function_analysis.function ORDER BY month 🤔 🤔
  11. つらいポイント3: クエリの見通しが悪い • query resultsわかりづらい ◦ 定義がわからない • 似たようなクエリが何度も書かれてる ◦

    ログがJSONでスキーマがないのでparse処理が散在 • SQL初心者はつらい ◦ JSONのparseから入門🔥
  12. フォーマット変換 • AWS Glueを使いたいところだが、そこまでお金を掛けずに変換可能 • Athenaでselect insertができます…! ◦ S3からselectしてS3にinsert可能 ◦

    insert時にテーブルの定義をParquet形式にしておけば フォーマット変換が可能 • 参考 ◦ Amazon Athena がついにINSERT INTOをサポートしたので実際に試してみ ました! ▪ https://dev.classmethod.jp/articles/20190920-amazon-athena-insert-i nto-support/