Skip to main content
DataStoreの遅延評価モデルを理解することは、DataStoreを効果的に活用し、最適なパフォーマンスを引き出すうえで重要です。

遅延評価

DataStore は 遅延評価 を採用しています。つまり、操作はすぐには実行されず、いったん記録された後、最適化された SQL クエリへコンパイルされます。実行されるのは、結果が実際に必要になったときだけです。

例: 遅延評価と即時評価

遅延評価の利点

  1. クエリ最適化: 複数の操作が、最適化された単一のSQLクエリにまとめてコンパイルされます
  2. フィルタのプッシュダウン: フィルタはデータソースレベルで適用されます
  3. カラムプルーニング: 必要なカラムだけが読み込まれます
  4. 実行時の判断: 実行エンジンは実行時に選択できます
  5. プランの確認: 実行前にクエリを確認したりデバッグしたりできます

実行のトリガー

実際の値が必要になると、自動的に実行がトリガーされます:

自動トリガー

例:

遅延実行のまま維持される操作

例:

3 段階の実行

DataStore の操作は、3 段階の実行モデルに沿って進行します。

フェーズ 1: SQLクエリの構築 (遅延実行)

SQLで表現できる操作が蓄積されます:

フェーズ2: 実行ポイント

トリガーが発生すると、それまでに蓄積されたSQLが実行されます。

フェーズ 3: DataFrame の操作 (ある場合)

実行後に pandas 固有の操作を続けて適用する場合:

実行計画を表示する

explain() を使用すると、実行される内容を確認できます。
Query
Response
詳細情報を表示するには verbose=True を使用します:
詳しいドキュメントについては、Debugging: explain()を参照してください。

キャッシュ

DataStore は、重複するクエリの実行を避けるために、実行結果をキャッシュします。

キャッシュの仕組み

キャッシュの無効化

DataStore に変更を加える操作が行われると、キャッシュは無効化されます:

キャッシュの手動制御


SQL と Pandas の操作を組み合わせる

DataStore は、SQL と pandas を組み合わせた操作を適切に処理します。

SQL互換の操作

以下はSQLに変換されます:
  • filter(), where()
  • select()
  • groupby(), agg()
  • sort(), orderby()
  • limit(), offset()
  • join(), union()
  • distinct()
  • カラム操作 (算術演算、比較、文字列メソッド)

Pandas のみの操作

以下は実行がトリガーされ、pandas が使用されます。
  • カスタム関数を使った apply()
  • 複雑な集計を行う pivot_table()
  • stack()unstack()
  • 実行済みの DataFrame に対する操作

ハイブリッドパイプライン


実行エンジンの選択

DataStore では、異なるエンジンを使って操作を実行できます。

自動モード (既定)

chDB エンジンを強制的に使用する

pandas Engineの使用を強制する

詳しくは、設定: 実行エンジンを参照してください。

パフォーマンスへの影響

良い例: 早い段階でフィルタする

悪い例: フィルタを後で適用する

良い例: 早い段階でカラムを絞り込む

良い例: SQLに任せる


ベストプラクティスのまとめ

  1. 実行前に一連の操作を組み立てる - クエリ全体を構築してから、一度だけトリガーします
  2. 早い段階で絞り込む - データの発生元でデータ量を減らします
  3. 必要なカラムだけを選択する - カラムプルーニングによりパフォーマンスが向上します
  4. 実行内容を理解するために explain() を使う - 実行前にデバッグします
  5. 集計は SQL に任せる - ClickHouse はこの処理に最適化されています
  6. 実行のトリガーを意識する - 意図しない早期実行を避けます
  7. キャッシュを適切に使う - cache が無効になるタイミングを理解します
最終更新日 2026年7月23日