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

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

複数データソースにまたがった分析環境の改善計画 / 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. 複数データソースにまたがった分析環境の
    改善計画
    黒崎優太 / @kuro_m88

    View full-size slide

  2. 黒崎 優太
    ● バックエンド系のエンジニア
    ○ インフラの改善
    ○ データ基盤の改善
    ● 8月から副業でお手伝いしはじめました
    @kuro_m88

    View full-size slide

  3. はなすこと
    ● 株式会社estieについて
    ● スタートアップのデータ基盤
    ● スタートアップのつらみ
    ● 改善への道のり

    View full-size slide

  4. 株式会社estieについて

    View full-size slide

  5. 5
    estie(エスティ)は
    オフィス不動産を
    デジタル化する会社です

    View full-size slide

  6. スタートアップのデータ基盤

    View full-size slide

  7. データ基盤、ほしいですか?
    ● 󰢧 ほしいに決まってる!
    ● 󰢨 かっこいいデータ基盤がほしい!
    ○ ETLってやつがやりたい!
    ● 󰢧「データの民主化」がやりたい!
    ○ みんなが平等にデータにアクセスできる世界!

    View full-size slide

  8. データ基盤、ほしいですか?
    ● 🤔 データ、ありますか?
    ○ ないものは集めようがない
    ● 🤯 意味のあるログですか?
    ○ なんとなく出力したログ、役に立たないことが多い
    ● 🥺 基盤づくりから始めるのは危険かも?
    ○ 分析したいユースケースや追いたいKPIの設計からはじめよう

    View full-size slide

  9. 身も蓋もない話
    ● まずはGoogle Analytics入れましょう
    ○ webやネイティブアプリの場合
    ● カスタムイベントの計測も充実しています
    ○ アクション, カテゴリ, ラベル, 値などを組み合わせてイベントの記録が可能
    ● 生ログも分析可能
    ○ GA4からBigQueryで分析できちゃいます!
    ● 無料ではじめられます💸

    View full-size slide

  10. スタートアップ(立ち上げ初期)のデータ基盤
    ● クライアントサイドで取れないがものある
    ○ サーバサイドでしか取れないもの、秘匿性の高いものなど
    ● ログ自体の信頼性を担保したい
    ○ アクセス解析用途ではなく証跡用途など
    ● 正確なレポーティングを事業として提供する
    ○ 高度な分析を事業価値としていきたい
    ● このあたりの需要が出てきたらデータ基盤の設計に乗り出しましょう
    ● 最初から焦らなくても大丈夫です!要件を整理するのが先!

    View full-size slide

  11. 余談: 法的側面
    ● 󰢨アクセスログって保存しないといけないって聞きました!
    ○ 必ずしも義務付けられているわけではないかも…?
    ● 企業における情報システムのログ管理に関する実態調査 - IPA より
    ○ https://www.ipa.go.jp/files/000052999.pdf
    ● ログの開示を求められる確率は事業規模が大きくなるにつれて大きくなる
    可能性があるので、どこかのタイミングで考慮する必要はあるかも

    View full-size slide

  12. スタートアップのつらみ

    View full-size slide

  13. スタートアップのつらみ
    ● 採用が軌道にのるとエンジニアが増えてくる(嬉しい)
    ● 開発スピードもどんどん上がっていく(嬉しい)
    ● ひとまず作ったものがいつのまにかみんな使っている(嬉しい)
    ○ ログも散らかり始める(あれ…)
    ○ あとからしくみを変えづらい(うっ…)
    ● 分析をミッションに入社したもののなんもわからん(つらい…)
    ● 正直そんなにお金がかけられない(だいたいそう…)

    View full-size slide

  14. ほしいデータ基盤像
    ● スモールスタートしたい
    ○ コストのことを考えても必須
    ● シンプルな構成
    ○ あとから入った人でもすぐわかるように
    ● そこそこのパフォーマンス
    ○ 爆速である必要もない、安定してくれる方が嬉しい
    ● メンテしたくない
    ○ そこに人的リソースを割きたくない

    View full-size slide

  15. ● 環境
    ○ 創業期に導入したself hosting redash(EC2)
    ○ RDS, Athenaをdatasourceとして利用
    estieの現状
    RDS Athena S3
    Redash (EC2)

    View full-size slide

  16. estieの現状
    ● 主な分析対象
    ○ RDS内のestieが提供するオフィス不動産データ
    (ビル/募集/入居テナント等)
    ○ RDS内のユーザがDB内に作成したデータ
    (ウォッチする物件のリスト等)
    ○ S3に出力されたサーバのアクセスログ
    ● 体制
    ○ ビジネス/エンジニア問わず全員がSQLを書く
    ○ データアナリストが依頼されて分析するような分業はしてない
    ○ 不動産デベロッパー出身者も週1回の勉強会でクエリを書けるように

    View full-size slide

  17. つらいポイント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

    View full-size slide

  18. つらいポイント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
    🤔
    🤔

    View full-size slide

  19. つらいポイント2: 重くなる分析クエリ
    ● query resultsはquery parameterが利用できない
    ○ 参照する日付やuser_idを絞れず、スキャン量が増加
    ● ダッシュボードを表示するのに1分程度かかったり🔥
    ○ ログの量が増えるともっと🔥

    View full-size slide

  20. つらいポイント3: クエリの見通しが悪い
    ● query resultsわかりづらい
    ○ 定義がわからない
    ● 似たようなクエリが何度も書かれてる
    ○ ログがJSONでスキーマがないのでparse処理が散在
    ● SQL初心者はつらい
    ○ JSONのparseから入門🔥

    View full-size slide

  21. 改善への道のり

    View full-size slide

  22. 改善への道のり
    ● 極力シンプルに、癖のない構成をまず作りたい
    ● 改善案として提案中のアイデアを紹介します

    View full-size slide

  23. 全体像
    ● 使う技術は変わらない
    ○ データソースとアクセス方法を改良する
    RDS Athena S3
    Redash (EC2)
    S3 Athena

    View full-size slide

  24. データソース
    ● S3にある生ログは使いづらい
    ○ 分析用途で直接クエリしないようにしたい
    ● 分析用のデータのスキーマを定義する
    ○ 毎度JSONのパースをしなくていいようにする
    ○ ログの構造変更が即座に分析用データに現れないようにする

    View full-size slide

  25. フォーマット変換
    ● 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/

    View full-size slide

  26. Parquetとは
    ● 列指向データフォーマット
    ○ https://parquet.apache.org/documentation/latest/
    ● 必要なカラムのみスキャンができる
    ● ある程度のデータの塊ごとに統計情報が
    ○ さらにスキャン範囲を絞れる

    View full-size slide

  27. 複数データソースのJOIN
    ● AthenaにはFederated Queryという機能が!
    ○ ドキュメントは日本語訳がちょっと変なので英語版を読みましょう
    ■ https://docs.aws.amazon.com/athena/latest/ug/connect-to-a-data-so
    urce.html
    ○ AthenaがAuroraなどの外部データソースとのJOINをしてくれる

    View full-size slide

  28. Redashはどうなるのか
    ● SQLiteを使ったJOINは発生しなくなるため、動作は圧倒的に軽くなる予定
    ● スキーマのあるデータをクエリできるようになる
    ● Parquet化によるスキャン量減少も見込める
    ● これで分析がはかどるはず…!

    View full-size slide

  29. 再掲
    ● 使う技術は変わらない
    ○ データソースとアクセス方法を改良する
    RDS Athena S3
    Redash (EC2)
    S3 Athena

    View full-size slide

  30. さいごに
    ● 移行までしきって改善の幅をドヤりたかったのですが、
    間に合いませんでした󰢛
    ● まずはベースになるデータ基盤をリニューアルするつもりなので、
    今後ともご期待ください

    View full-size slide