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

不動産情報サイトにおけるデータ収集で頑張ったこと

Red Frasco
February 15, 2024

 不動産情報サイトにおけるデータ収集で頑張ったこと

2024/02/15 に開催された「Jagu'e'r(Japan Google Cloud Usergroup for Enterprise)データ利活用分科会 Data Journey: データ収集」の登壇資料です。

Red Frasco

February 15, 2024
Tweet

More Decks by Red Frasco

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 杉⼭ 隆(Takashi Sugiyama) 3 • 所属 • 株式会社Red Frasco

    • 職種 • データエンジニア/MLエンジニア • 技術 • Google Cloud, Python, Golang • よく使うGCPサービス • Cloud Composer, Dataflow, Dataproc, BigQuery, ... • 趣味 • バスケットボール🏀, ガンダム🆓, ...
  2. 収集元別 収集データ⼀覧 9 No. 収集元 収集先 収集⽅法 データ例 1 Google

    アナリティクス BigQuery BigQuery Export 機能 アクセスログ 2 Cloud Storage BigQuery Cloud Composer システムデータ 3 Google スプレッドシート BigQuery 外部テーブル, Cloud Composer 集客実績 4 Web API BigQuery Cloud Composer 成約データ 5 FTP サーバ BigQuery Cloud Composer 会計データ 6 アドレポ © YRGLM Inc. BigQuery BigQuery 出⼒機能 広告データ 7 リアルタイムデータ(※) BigQuery Cloud Run, Pub/Sub アクセスログ ※⼀部 前回登壇資料 と内容が重複します。ご容赦ください。
  3. 収集元別 頑張ったこと – Cloud Composer 全般(1/3) • なぜ Cloud Composer

    を使っているのか • Python でワークフローを実装するため、収集元がどのようなもので あってもだいたい対応できる • 複雑な条件分岐に対応 • Sensor オペレータにより、収集元の処理が遅れても処理の続⾏が可能 • 例: Cloud Storage にファイルが置かれるまで⼀定時間待つ • GUIが分かりやすい 10
  4. 収集元別 頑張ったこと – Cloud Composer 全般(2/3) • 再取り込みを考慮 • 再取り込みをしてもデータが重複しないよう、WRITE_TRUNCATE

    や DELETE/INSERT を⾏っている 11 ※対象のテーブルが存在、かつレコードがあったら削除
  5. 収集元別 頑張ったこと – Cloud Composer 全般(3/3) • 再取り込みを考慮 • 環境変数で⽇付を指定することで、特定⽇のデータを取得可能に

    している 12 ※環境変数「BASE_DATE」が存在すればそちらを、存在しなければ当⽇の⽇付を 取り込み対象にする
  6. 収集元別 頑張ったこと – Google アナリティクス • BigQuery Export のログ監視を⾏う •

    BigQuery Export は⾃動でエクスポートしてくれる便利な機能ではあ るが、念のため Cloud Logging でログ監視を⾏う • フィルタ条件(GA4 の場合) 13 ※ 4⾏⽬の条件は、毎回データセットを作成しようとしてエラーになっているログを 除外するため(GA4 は最近作成しなくなった︖)
  7. 収集元別 頑張ったこと – Web API / FTP サーバ • egress

    IP を固定 • Web API 側でグローバル IP 制限が設定されている場合を考慮し、 Cloud NAT を使⽤して egress(下り)の IP アドレスを固定 15
  8. 収集元別 頑張ったこと – Web API • GA4 のデータも API で取得

    • Analytics Data API を使⽤ • 即時性や、BigQuery Export されたデータの⼀部がWeb管理画⾯と 異なっていたため 16
  9. なぜリアルタイムデータが必要なのか(2/2) • Google アナリティクスでは要件を満たせなかった • BigQuery Export 機能 • エクスポートされるタイミングが遅い(要件定義時は翌⽇午後)

    • 最近早くなってきた(翌⽇早朝)が、それでも要件を満たしていない • ストリーミングエクスポート機能 • 翌⽇以降にエクスポートされたレコードと⽐較すると、2〜3割程度のレコード⽋ 損がある︖(※今回の対象サイトだけかもしれません。ご参考まで。) • 将来的には GA からリアルタイムデータへの移⾏を検討 • UA → GA4 の移⾏に伴う作業が⼤変だった・・・ 20
  10. 収集元別 頑張ったこと – リアルタイムデータ(2/3) • ログの保存先は2つ • Cloud Run →

    Bigtable • ログをすぐに利⽤したい場合の保存先 • 過去2⽇分を保存 • Cloud Run → Pub/Sub → Dataflow → BigQuery • 通常利⽤の保存先 • 過去分全てを保存 22
  11. 収集元別 頑張ったこと – リアルタイムデータ(3/3) • 当初は Bigtable ではなく Firestore を利⽤していたが

    書き込みエラーが多く出たため変更 • エラー原因は結局分からず・・・ • 「500/50/5」ルールはきちんと守っていた・・・はず・・・ 23