SAMPLE permet un traitement approximatif des requêtes SELECT.
Lorsque l’échantillonnage des données est activé, la requête n’est pas exécutée sur l’ensemble des données, mais seulement sur une certaine fraction de celles-ci (un échantillon). Par exemple, si vous devez calculer des statistiques sur l’ensemble des visites, il suffit d’exécuter la requête sur 1/10 des visites, puis de multiplier le résultat par 10.
Le traitement approximatif des requêtes peut être utile dans les cas suivants :
- Lorsque vous avez des exigences strictes en matière de latence (par exemple inférieure à 100 ms), mais que vous ne pouvez pas justifier le coût de ressources matérielles supplémentaires pour les satisfaire.
- Lorsque vos données brutes ne sont pas exactes, et qu’une approximation ne dégrade donc pas sensiblement la qualité.
- Lorsque les exigences métier visent des résultats approximatifs (pour des raisons de coût, ou pour réserver les résultats exacts aux utilisateurs premium).
Vous ne pouvez utiliser l’échantillonnage qu’avec les tables de la famille MergeTree, et uniquement si l’expression d’échantillonnage a été spécifiée lors de la création de la table (voir moteur MergeTree).
- L’échantillonnage des données est un mécanisme déterministe. Le résultat de la même requête
SELECT .. SAMPLEest toujours identique. - L’échantillonnage fonctionne de manière cohérente sur différentes tables. Pour les tables avec une seule clé d’échantillonnage, un échantillon avec le même coefficient sélectionne toujours le même sous-ensemble de données possibles. Par exemple, un échantillon d’identifiants utilisateur prend les lignes correspondant au même sous-ensemble de tous les identifiants utilisateur possibles dans différentes tables. Cela signifie que vous pouvez utiliser l’échantillon dans des sous-requêtes de la clause IN. Vous pouvez également joindre des échantillons à l’aide de la clause JOIN.
- L’échantillonnage permet de lire moins de données depuis le disque. Notez que vous devez spécifier correctement la clé d’échantillonnage. Pour plus d’informations, consultez Création d’une table MergeTree.
SAMPLE, la syntaxe suivante est prise en charge :
| Syntaxe de la clause SAMPLE | Description |
|---|---|
SAMPLE k | Ici, k est un nombre compris entre 0 et 1. La requête est exécutée sur une fraction k des données. Par exemple, SAMPLE 0.1 exécute la requête sur 10 % des données. En savoir plus |
SAMPLE n | Ici, n est un entier suffisamment grand. La requête est exécutée sur un échantillon d’au moins n lignes (mais pas significativement plus). Par exemple, SAMPLE 10000000 exécute la requête sur un minimum de 10 000 000 lignes. En savoir plus |
SAMPLE k OFFSET m | Ici, k et m sont des nombres compris entre 0 et 1. La requête est exécutée sur un échantillon représentant une fraction k des données. Les données utilisées pour l’échantillon sont décalées d’une fraction m. En savoir plus |
SAMPLE K
k est un nombre compris entre 0 et 1 (les notations fractionnaire et décimale sont toutes deux prises en charge). Par exemple, SAMPLE 1/2 ou SAMPLE 0.5.
Dans une clause SAMPLE k, l’échantillon est prélevé sur une fraction k des données. L’exemple est présenté ci-dessous :
count() est donc multipliée manuellement par 10.
SAMPLE N
n est un entier suffisamment grand. Par exemple, SAMPLE 10000000.
Dans ce cas, la requête est exécutée sur un échantillon d’au moins n lignes (mais pas sensiblement plus). Par exemple, SAMPLE 10000000 exécute la requête sur un minimum de 10 000 000 lignes.
Comme l’unité minimale de lecture des données est un granule (sa taille est définie par le paramètre index_granularity), il est judicieux de définir un échantillon bien plus grand que la taille du granule.
Lors de l’utilisation de la clause SAMPLE n, vous ne savez pas quel pourcentage relatif des données a été traité. Vous ne connaissez donc pas le coefficient par lequel les fonctions d’agrégation doivent être multipliées. Utilisez la colonne virtuelle _sample_factor pour obtenir un résultat approximatif.
La colonne _sample_factor contient des coefficients relatifs calculés dynamiquement. Cette colonne est créée automatiquement lorsque vous créez une table avec la clé d’échantillonnage spécifiée. Des exemples d’utilisation de la colonne _sample_factor sont présentés ci-dessous.
Considérons la table visits, qui contient des statistiques sur les visites du site. Le premier exemple montre comment calculer le nombre de pages vues :
SAMPLE K OFFSET M
k et m sont des nombres compris entre 0 et 1. Des exemples figurent ci-dessous.
Exemple 1
[++------------]
Exemple 2
[------++------]