La donnée la moins chère à traiter est celle qu’on ne lit jamais. Le predicate pushdown est la discipline qui consiste à décider quoi ignorer le plus tôt physiquement possible.
Où passe réellement le temps
Dans un entrepôt de données en colonnes, l’essentiel du temps d’une requête est consacré à déplacer des octets depuis le disque et à travers le réseau. Si un filtre peut éliminer un row group avant même qu’il soit lu, c’est du coût économisé à l’état pur.
Parquet stocke des statistiques min/max par row group et par page. Une requête sur les commandes supérieures à 1 000 $ peut ignorer tout bloc dont le maximum est sous ce seuil — souvent la majeure partie du fichier.
Pousser le filtre au fond de la pile
L’astuce consiste à apprendre à chaque couche — planificateur, scanner, stockage — à honorer le prédicat au lieu de le revérifier au sommet. Chaque couche qui élimine des lignes tôt réduit le travail de tout ce qui se trouve au-dessus.
- Planificateur : réécrire la requête pour que les filtres se lient aux scans.
- Scanner : utiliser les statistiques pour ignorer row groups et pages.
- Exécution : évaluer les filtres restants de façon vectorisée, par lots.
Le résultat
Sur un entrepôt de 4 Po, le pushdown a fait passer une requête de tableau de bord représentative de 90 secondes à moins de 8 — avec exactement le même matériel.