Skip to main content
DataStoreには、出力をpandas互換向けに整形するか、Raw SQLのパフォーマンス向けに最適化するかを制御する2つの互換性モードがあります。

概要

パフォーマンスモードで無効化される機能


パフォーマンスモードを有効にする

configオブジェクトを使用する

モジュールレベルの関数を使用する

便利なインポートの利用

パフォーマンスモードを有効にすると、実行エンジンは自動的に chdb に設定されます。config.use_chdb() を別途呼び出す必要はありません。

パフォーマンスモードを使うべき場面

次のような場合は、パフォーマンスモードを使用してください。
  • 大規模なデータセット (数十万〜数百万行) を処理する場合
  • 集約処理の多いワークロード (groupby、sum、mean、count) を実行する場合
  • 行順が重要でない場合 (例: 集計結果、レポート、ダッシュボード)
  • SQL のスループットを最大化し、オーバーヘッドを最小限に抑えたい場合
  • メモリ使用量が気になる場合 (Parquet の並列読み取り、中間 DataFrame なし)
次のような場合は、pandasモードのままにしてください。
  • pandas と完全に同じ挙動 (行順、MultiIndex、dtypes) が必要な場合
  • first()/last() が実際の最初/最後の行を返すことに依存している場合
  • 行順に依存する shift()diff()cumsum() を使用する場合
  • DataStore の出力を pandas と比較するテストを作成している場合

挙動の違い

行の順序

パフォーマンスモードでは、どの操作でも行の順序は保証されません。これには、次のものが含まれます。
  • Filter の結果
  • GroupBy の集計結果
  • 明示的に sort_values() を指定しない head() / tail()
  • first() / last() の集計結果
順序どおりの結果が必要な場合は、明示的に sort_values() を追加してください。

GroupBy の結果

集計

単一SQLでの実行

パフォーマンスモードでは、ColumnExpr の groupby 集計 (例: ds[condition].groupby('col')['val'].sum()) は、pandasモードで使われる 2 段階の処理ではなく、単一のSQLクエリとして実行されます。
これにより、中間DataFrameを実体化する必要がなくなり、メモリ使用量と実行時間を大幅に削減できます。

実行エンジンとの比較

パフォーマンスモード (compat_mode) と実行エンジン (execution_engine) は、それぞれ独立した設定軸です。 compat_mode='performance' を設定すると、execution_engine='chdb' も自動的に設定されます。これは、パフォーマンスモードが SQL 実行向けに設計されているためです。

パフォーマンスモードでのテスト

パフォーマンスモード向けのテストを作成する際は、結果の行順やデータ構造のフォーマットが pandas と異なる場合があります。次の方法を使用してください。

ソートして比較 (集計、フィルター)

値範囲チェック (先頭/末尾)

スキーマと件数 (ORDER BY なしの LIMIT)


ベストプラクティス

1. スクリプトの冒頭で有効化する

2. 順序が重要な場合は明示的にソートを指定する

3. バッチ/ETLワークロードで使用する

4. セッション内でモードを切り替える


最終更新日 2026年7月23日