🐕

Looker の datagroup 活用ガイド: キャッシュ更新とパフォーマンス最適化のベストプラクティス

2024/07/31に公開

はじめに

こんにちは、クラウドエース データソリューション部 の尾杉です。

最近、Looker の datagroup のトリガーに関する挙動が分からなかったので、調査しながらその知見を整理し、記事としてまとめることにしました。

datagroup は、Explore のキャッシュポリシーの定義や、永続化派生テーブル(PDT)の再構築を行うためのトリガー設定を可能にします。異なる Explore や PDT に対して複数のポリシーを適用するには、それぞれのポリシーに対して個別の datagroup パラメータを設定する必要があります。

本記事では、Looker の基本的な使い方を把握している方を対象に、datagroup の設定方法とその実践的な利用方法を解説します。基本操作に関する説明は省略していますので、ご了承ください。

datagroup で使える trigger まわりのパラメータ

max_cache_age

max_cache_age パラメータは、データキャッシュの有効期間を設定します。指定した期間が経過するとキャッシュが無効化され、新しいデータが取得されます。
例えば、max_cache_age: "24 hours" と設定すれば、24時間ごとにキャッシュが更新されます。

sql_trigger

sql_trigger パラメータは、特定の SQL クエリの結果を監視し、その結果に基づいてキャッシュの更新をトリガーします。これにより、特定のテーブルデータが変更されたタイミングでキャッシュを更新することができます。

interval_trigger

interval_trigger パラメータは、指定した時間間隔で PDT を再構築します。再構築の間隔は、"seconds"、"minutes"、"hours" で指定することができます。
検証したところ、データグループと PDT のメンテナンス スケジュールで設定している再構築すべきかどうかの確認間隔より、小さい時間を interval_trigger で指定した場合、PDT の再構築は "データグループと PDT のメンテナンス スケジュール" で設定している時間を優先しました。

注意

sql_triggerinterval_trigger の両方を指定することはできません。両方を定義した場合、sql_trigger は無視され、interval_trigger のみが機能します。

具体的な使用例とシナリオ

在庫管理システムでのデータ更新

在庫管理システムでは、商品の在庫が変更されるたびにキャッシュを更新する必要があります。例えば、在庫数の変更に応じてキャッシュを更新するには、以下のように設定します。

datagroup: datagroup_name {
  sql_trigger:
    SELECT MAX(updated_at) FROM inventory
  ;;
  max_cache_age: "12 hours"
}

sql_trigger により、inventory テーブルの updated_at 列が更新されるか定期的にチェックし、変更があればキャッシュが更新されます。
また更新漏れを防ぐため、 max_cache_age により12時間ごとにキャッシュが更新されます。

定期的なレポート作成のためのデータ更新

毎日定期的にデータを更新し、最新のデータでレポートを作成する場合は、以下のように設定します。

datagroup: datagroup_name {
  interval_trigger: "24 hours"
}

この設定により、レポートに使用するデータが24時間ごとに自動で更新されます。

ベストプラクティス

max_cache_age の設定

キャッシュの有効期間は、データの更新頻度に応じて適切に設定する必要があります。短すぎる期間を設定するとシステム負荷が増加する可能性がありますので、データの利用パターンを考慮して最適な期間を設定しましょう。

効果的な sql_trigger の設計

sql_trigger を使用する場合は、クエリが効率的に実行されるように設計することが重要です。例えば、インデックスが設定されている列を使用する、不要なジョインを避けるなどの工夫が必要です。

トラブルシューティング

キャッシュが更新されない場合

  • sql_trigger のクエリが正しく実行されているか確認します。
  • max_cache_age が適切に設定されているか確認します。
  • Looker のログを確認し、エラーメッセージや警告をチェックします。

sql_trigger のクエリが遅い場合

  • クエリの実行計画を確認し、最適化の余地がないか検討します。
  • インデックスを追加することでクエリのパフォーマンスを向上させることができる場合があります。
  • データ量を減らすために、必要最低限のデータのみを取得するクエリに変更します。

パフォーマンスへの影響

頻繁なキャッシュ更新の負荷

max_cache_ageinterval_trigger を頻繁に設定すると、システムリソースに大きな負荷がかかることがあります。適切なバランスを見つけることが重要です。

パフォーマンス最適化

sql_trigger を適切に設計し、インデックスを活用することでキャッシュ更新のパフォーマンスを向上させることができます。また、頻繁な更新が必要な場合は、システムのリソースを十分に確保することも重要です。

まとめ

Looker の datagroup は、キャッシュポリシーや PDT の再構築を管理するためのものです。適切に設定することで、データの新鮮さを維持しつつ、システムのパフォーマンスを効率的に管理することが可能です。そのためには、max_cache_agesql_triggerinterval_trigger の各パラメータを理解し、実際の使用シナリオに応じて最適な設定を行うことが重要です。トラブルシューティングやパフォーマンスへの影響も考慮しながら、より効果的なデータ管理を実現しましょう。

Discussion