CUEBiC TEC BLOG

キュービックTECチームの技術ネタを投稿しております。

trocco®️の転送設定をチューニングしたはなし

どうも! キュービックのテックリードの尾﨑です
本日はtrocco®️のGoogle Driveコネクタを使用した転送設定をワークフローで実行していた際に、trocco APIを使用してパフォーマンス改善した事例をご紹介します。 かなりマイナーな方法なので他のtroccerの方の参考になれば嬉しいです

trocco®️のおさらい

trocco®は株式会社primeNumberさんが提供している、ETL/データ転送・データマート生成・ジョブ管理・データガバナンスなどのデータエンジニアリング領域をカバーした、 分析基盤構築・運用の支援SaaSツールです。

本記事で使用するtrocco®️の機能

機能

  • 転送設定
  • データマート機能
  • ワークフロー機能
  • trocco API

キュービックのアーキテクチャ

キュービックではワークフロー機能のスケジュール設定またはtrocco APIトリガーでデイリーで以下を実施しています

ポイント! ①広告/ASPから取得したレポートをtrocco®️の転送設定機能を使用してRedshiftに生データとして連携
②Redshiftに転送した生データをデータマート機能を使用して、Redshiftのストアドプロシージャーの関数をCallして整形/集計
Komawo

パフォーマンスチューニングのスコープ

本記事では以下のASPの部分にフォーカスして解説していきます
①広告/ASPから取得したレポートをtrocco®️の転送設定機能を使用してRedshiftに生データとして連携

概要

キュービックでは80近いASP(Affiliate Service Provider)アカウントを使用しており、こちらを既存の分析基盤システムCUEBiC Analyticsに手動でインポートしていました。

こちらをtrocco®️を使用して代替し、自動化/または半自動化しようと試みました。
抽象的な前後比較図で表すと以下のようになります。

コネクタ選定

どうも!Komawoです。ここからは文量マシマシなので、チャット形式でお届けします

trocco®️は広告媒体のコネクタに関しては豊富だったのですが、ASPに関しては数個のみだったため、主要なASPに関してはHTTP(S)コネクタを使用してAPI連携を試みました

documents.trocco.io

しかし、APIを提供しているASPがそもそも少なかった点と、ASPのアカウントに関しては統制がができていなかったため自動化によって運用負荷が上がってしまうことが懸念されました

そこでASPに関しては手動で取得したレポートをGoogle Driveに集約し、Google Driveコネクタ経由でRedshiftにレポートデータを転送することにしました

パフォーマンスチューニング

少々前置きが長くなりましたが、本題です
80近いASPを実行する上で、いくつか壁にぶち当たったので、その事例と解消方法をご紹介します

初回

最初は純粋にtrocco®️から各ASPの転送設定のjobをワークフロー機能でスケジュールで実行するという形をとっていました

しかし、ASPの成果が必ず毎日全て発生するわけではないため、trocco®️からは発生したASPのみを実行するということは現在の機能では実行ができず、全件実行することになってしまいました

適切なスキップ処理を設定していれば該当のないものは当然0件で停止するのですがコンテナが起動してembulkが実行されるまでのオーバーヘッドとファイルの走査処理が無駄に時間を食っていました。

一つ一つの処理時間は30秒〜1分程度で決して遅くはないのですが、80近いASPでこれを実行していると不必要な実行時間が発生してしまうことになり、非効率でした

更新

そこで暫定対応として以下のように処理を見直しました

こちらで実際に40分〜60分程度の実行時間の削減になったのでかなり大きいと思います。

APIでjobがちょっとずつ実行されているのを見ると非常に頼もしいですね。trocco!頑丈だぜ!

こらこら

元ネタはこちら cuebic.hatenablog.com

裏技

チューニングする際にprimeNumberさんのCSに教えてもらったのですが、スケジュール実行は自社の並列だけでなく他社の負荷も全体としてはかかるようです

回避方法としてキリの良い数字を避けるとことで多少改善されることはあるとのことでした

確かに10:00とかにしがちですよね!10:01とか10:31とかにすれば並列の負荷を分散できるので立ち上がりの速度は早められるってわけですね

おまけ情報【転送設定編集】

実際にGoogle Drivekネクタで転送設定を行った際に、いくつかハマったポイントがあったので事例としてご紹介します

1.テンプレートの設定は存在しない

trocco®️ではHTTP(S)コネクタのようにGoogle Driveコネクタではまだテンプレート機能が提供されていませんでした

一旦、ASP単位でレポートのテンプレート用のフォルダIDを指定して、疎通確認を行った後で、IDを指定し直すという作業を行いました。これを80近く行ったのでなかなか骨が折れました

2.ファイル名の正規表現は自動でエスケープされない

Google Driveに格納されたファイルを識別するために特定フォルダ配下にASPの成果ファイルを格納して、ファイルを正規表現を取得する設定をしようとしました

しかし、ファイル名の正規表現の入力エリアは自動でエスケープされないためファイルが読み込まれずエラーとなりハマりました。初歩的ではあるものの、正規表現内でカスタム変数を設定していたので盲点でした

対応前:キュービック(サンプル)
 対応後:キュービック\(サンプル\)にした感じですね

3.TSVファイルを取り込もうとするとタブ区切りで取り込まれない

CSに相談させていただき、タブのスペースを使用することで解消見込みでしたが設定を行ってもTooManyColumnsExceptionがプレビュー画面で発生しました

結局これは不具合だったので修正いただくことで、正常に取り込みができるようになりました。爆速対応感謝です

4.データ設定のカラム定義の元カラムにラベルが認識されない

trocco®️ではembulkを使用しており、embulkの不具合により、レポートが全て日本語の場合はラベルが認識されず、カラム定義がバグるという状況になりました

以下のようにラベルがプレビューでは確認できるのですが、カラム定義で認識されないという状況でした

CSエンジニアの中村さんに確認して、回避策として日本語以外の列を1列追加する形で解消できる見込みになりました

対象のレポートを毎回更新するのは骨が折れるのと、ASPによってレポートの形式が異なるため、目視でのマッピングはやめて、ストアドプロシージャー側でレポートの定義情報を別途読み込んでマッピングする処理を追加して回避しました

embulk側での修正が待ち遠しいですね

まとめ

今回はGoogle Driveコネクタを使用して転送設定機能をtrocco APIで実行することでパフォーマンス改善した事例を紹介しました。

隠れ機能や設定の裏技などはCS担当者の方との密なコミュニケーションや試行錯誤によって生まれるので、顕在化していないものはノウハウとして今後も発信していければと思います

Google Driveを使用した事例はまだまだ少ないかもしれませんが、ハマったポイントは少なくなかったので機能改善を祈りつつも後に続く方達の参考になれば嬉しいです