トレタ開発者ブログスマートフォン用の表示で見るトレタ開発者ブログ飲食店向け予約/顧客台帳サービス「トレタ」、超直前予約アプリ「トレタnow」を開発・提供するスタートアップ企業です。DataAnalyticsサーバーサイドエンジニアの芹沢です。トレタは検索用のデータストアとしてBigQueryを使用しています。奇抜な使い方はしていませんが、トレタにおけるBigQuery活用法を紹介します。システム構成BigQuery周りのシステム構成を1枚の図にまとめるとこんな感じです。珍しいものは使っていませんがその分安定した構成かと思います。BigQueryにimportしているデータ大きく分けて以下2種類のデータをBigQueryにimportしています。Aurora)のslaveからデータをimportしてデータ分析や調査用のデータ検索業務に使っています。2.各種ログ以下のログをfluentdでBigQueryに保存しています。nginxのaccessログrailsで1リクエスト単位で出力しているカスタムログsidekiqのログ(Sidekiq.loggerが出力するログ)shoryukenのログ(Shoryuken.loggerが出力するログ)sendgridのメール送信ログsendglidのログについては過去に佐野おにいさんが解説記事を書いていますのでこちらの記事を参照ください。社内向けのデータの可視化にはRedashを使い、用途別のDashboardを作成してセールス、カスタマーサポート、マーケティングチームが普段から追っている数値をエンジニアに頼らず検索できるようになっています。BigQueryに入れたログをグラフで描画するなどのエンジニアリング方面でも使用しています。Redashの導入についてはaccountの権限管理など色々とハマりどころがあったようなのですが、その辺の話はRedash導入をリードしたサーバーサイドエンジニアの中村君がこのブログに書いてくれると思います。最近トレタのRDBにたまったデータを活用する機運が高まり、データの集計や分析を行うようになりました。Notebookで少量のデータを対象に前処理や集計をするのですが、それをproductionの全データに適用すると、処理時間がかかりすぎて丸1日かかってしまうといったケースが増えてきました。そこで、複雑な集計処理や重たい処理はなるべくSQLに落とし込んでBigQueryで処理するようにすることで解決を図っています。普通にコードで書くと全件ループせざるを得ず数十秒かかるような集計処理でも、WINDOW関数などを駆使してSQLに落としてこんでクエリを投げると、何事もなかったように数秒で結果が返ってきます。1回のクエリで処理できるデータのサイズに上限があるため、あらゆることが1回のクエリで解決する訳ではありませんが大抵は問題なく実行できています。余談ですが、pythonのデータ分析ライブラリのpandasには、BigQueryにクエリを投げて結果をdataframeに変換して返す処理をread_gbqという関数一つで実現できるので大変便利です。SQLに寄せる最適化を進めた結果、bqコマンドラインツールでクエリを投げて結果を別のテーブルにimportするだけで完了する処理も出てきました。less化が加速するのではないでしょうか。トレタではこういったデータエンジニアリングや、ビジネス方面のアナリティクスが得意なデータサイエンティストを募集しています。こちらもよろしくお願いします。www.wantedly.comログ検索基盤としての活用sidekiqとshoryukenのログ本文には、Workerの名前、ジョブのIDやステータス、実行したスレッドのIDなどが含まれています。これらの情報をキーとして利用しやすいにように、parseして構造化する必要があります。個人情報を出力することもあるため、マスキングも必須です。これらの課題を解決するため、LogのFormatterを独自のものに置き換えて運用しています。現在は以下のようなjsonのformatでログを出力してBigQueryにimportしています。messageというキーにjsonとして格納されるので、BigQueryのJSON関数を使ってカラムに展開した一時VIEWを作成し、そのVIEWに対してクエリを実行することでメッセージの本文で絞り込むことが可能です。過去10日間のログの中からerrorという文字列がmessageに含まれるものを検索したい時は、こんな感じのSQLで取得できます。1000まとめ簡単ではありますがトレタにおけるBigQueryの活用方法について紹介させていただきました。ビジネスにおけるデータ活用の重要度が日々高まる昨今、トレタもデータから得た知識を活用してビジネスを加速させていきたいと思います。2017の18日目の記事です。#railsdmサーバサイドエンジニアの中村です。2017に参加してきましたiOSエンジニアの高です。Request発行時にそのコミットIDでデプロイされた環境を自動構築してレビュー時/マージ...インフラをアレしてる佐野です。»トレタ開発者ブログ飲食店向け予約/顧客台帳サービス「トレタ」、超直前予約アプリ「トレタnow」の開発メンバーによるブログです。Blogスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。