メインコンテンツへスキップ
DataStore には 2 つの互換性モードがあり、出力を pandas 互換の形式にするか、生の SQL のパフォーマンス向けに最適化するかを制御できます。

概要

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


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

config オブジェクトを使う

モジュールレベルの関数を使う

便利なインポートを使う

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

パフォーマンスモードを使用する場面

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

挙動の違い

行の順序

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

GroupBy の結果

集計

単一 SQL 実行

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

実行エンジンとの比較

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

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

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

ソート後に比較 (集計、フィルター)

値範囲の確認 (先頭/末尾)

スキーマと件数 (ORDER BY を伴わない LIMIT)


ベストプラクティス

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

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

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

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


最終更新日 2026年6月10日