Les fonctions approximatives estiment les dénombrements distincts, les percentiles et les histogrammes à faible coût de calcul.
SLS prend en charge les fonctions approximatives suivantes.
Pour utiliser des chaînes de caractères dans les instructions d'analyse, entourez-les de guillemets simples (''). Les chaînes non entourées de guillemets ou placées entre guillemets doubles ("") désignent des noms de champ ou de colonne. Par exemple,
'status'
désigne la chaîne de caractères « status », tandis que
status
ou
"status"
fait référence au champ de journal « status ».
|
Fonction |
Syntaxe |
Description |
Prise en charge SQL |
Prise en charge SPL |
|
approx_distinct(x) |
Estime le nombre de valeurs distinctes dans x. Erreur standard par défaut : 2,3 %. |
✔ |
❌ |
|
|
approx_distinct(x, e) |
Estime le nombre de valeurs distinctes dans x avec une erreur standard personnalisée. |
✔ |
❌ |
|
|
approx_percentile(x, percentage) |
Renvoie le percentile approximatif percentage de x (trié par ordre croissant). |
✔ |
❌ |
|
|
approx_percentile(x, array[percentage01, percentage02...]) |
Renvoie les valeurs approximatives de x aux percentiles percentage01 et percentage02 (triées par ordre croissant). |
✔ |
❌ |
|
|
approx_percentile(x, weight, percentage) |
Renvoie le percentile approximatif percentage de x, pondéré par x × weight (trié par ordre croissant). |
✔ |
❌ |
|
|
approx_percentile(x, weight, array[percentage01, percentage02...]) |
Renvoie les valeurs approximatives de x aux percentiles percentage01 et percentage02, pondérées par x × weight. |
✔ |
❌ |
|
|
approx_percentile(x, weight, percentage, accuracy) |
Renvoie le percentile approximatif percentage de x, pondéré par x × weight, avec une précision configurable. |
✔ |
❌ |
|
|
numeric_histogram(bucket, x) |
Calcule un histogramme approximatif pour x avec le nombre de compartiments spécifié. Renvoie un objet JSON. |
✔ |
❌ |
|
|
numeric_histogram(bucket, x, weight) |
Calcule un histogramme approximatif pondéré pour x avec le nombre de compartiments spécifié. Renvoie un objet JSON. |
✔ |
❌ |
|
|
numeric_histogram_u(bucket, x) |
Calcule un histogramme approximatif pour x avec le nombre de compartiments spécifié. Renvoie un tableau à plusieurs lignes et colonnes. |
✔ |
❌ |
|
|
|
Estime les |
✔ |
❌ |
Fonction approx_distinct
La fonction approx_distinct estime le nombre de valeurs distinctes dans x.
Syntaxe
-
Estime le nombre de valeurs distinctes dans x. Erreur standard par défaut : 2,3 %.
approx_distinct(x) -
Estime le nombre de valeurs distinctes dans x avec une erreur standard personnalisée.
approx_distinct(x, e)
Paramètres
|
Paramètre |
Description |
|
x |
Nom de la colonne. Tous les types de données sont pris en charge. |
|
e |
Erreur standard personnalisée. Plage valide : [0,0115, 0,26]. |
Type de valeur renvoyée
BIGINT
Exemples
-
Exemple 1 : Calculez le nombre de pages vues (PV) avec
countet estimez le nombre de visiteurs uniques (UV) avecapprox_distinctsur le champclient_ip. Erreur standard : 2,3 %.-
Instruction de requête
* | SELECT count(*) AS PV, approx_distinct(client_ip) AS UV La requête renvoie un PV de 941 787 et un UV de 723 040.
-
-
Exemple 2 : Calculez le PV et estimez l'UV sur le champ
client_ipavec une erreur standard personnalisée de 10 %.-
Instruction de requête
* | SELECT count(*) AS PV, approx_distinct(client_ip,0.1) AS UV La requête renvoie un PV de 9 095 et un UV de 7 946.
-
Fonction approx_percentile
La fonction approx_percentile renvoie le percentile approximatif de x pour un percentage donné. Les résultats sont approximatifs et aucune garantie de stabilité n'est fournie.
Syntaxe
-
Renvoie le percentile approximatif percentage de x (trié par ordre croissant). Type de retour : double.
approx_percentile(x, percentage) -
Renvoie les valeurs approximatives de x aux percentiles percentage01 et percentage02 (triées par ordre croissant). Type de retour : array(double,double).
approx_percentile(x, array[percentage01, percentage02...]) -
Renvoie le percentile approximatif percentage de x, pondéré par x × weight. Type de retour :
double.approx_percentile(x, weight, percentage) -
Renvoie les valeurs approximatives de x aux percentiles percentage01 et percentage02, pondérées par x × weight. Type de retour : array(double,double).
approx_percentile(x, weight, array[percentage01, percentage02...]) -
Renvoie le percentile approximatif percentage de x, pondéré par x × weight, avec une précision configurable. Type de retour : double.
approx_percentile(x, weight, percentage, accuracy)
Paramètres
|
Paramètre |
Description |
|
x |
Nom de la colonne. Doit être de type DOUBLE. |
|
percentage |
Valeur du percentile. Plage valide : [0, 1]. |
|
accuracy |
Valeur de précision. Plage valide : (0, 1). |
|
weight |
Pondération. Doit être un entier supérieur à 1. Les valeurs sont triées selon x × weight. |
Type de valeur renvoyée
DOUBLE ou ARRAY(DOUBLE)
Exemples
-
Exemple 1 : Renvoyez le 50e percentile approximatif (médiane) de request_time.
-
Instruction de requête
* | SELECT approx_percentile(request_time, 0.5) La requête renvoie
45.0, ce qui correspond à la médiane approximative (50e percentile) derequest_time.
-
-
Exemple 2 : Renvoyez les 10e, 20e et 70e percentiles approximatifs de request_time.
-
Instruction de requête
* | SELECT approx_percentile(request_time, array[0.1, 0.2, 0.7]) La requête renvoie
[17.0, 24.0, 59.0], soit les valeurs approximatives derequest_timerespectivement aux 10e, 20e et 70e percentiles.
-
-
Exemple 3 : 50e percentile pondéré de request_time. Pondération : 100 si request_time < 20, sinon 10.
-
Instruction de requête
* | SELECT approx_percentile( request_time, CASE WHEN request_time < 20 THEN 100 ELSE 10 END, 0.5 ) La requête renvoie
18.0.
-
-
Exemple 4 : 80e et 90e percentiles pondérés de request_time. Pondération : 100 si request_time < 20, sinon 10.
-
Instruction de requête
* | SELECT approx_percentile( request_time, CASE WHEN request_time < 20 THEN 100 ELSE 10 END, array [0.8, 0.9] ) La requête renvoie
[48.0, 64.0].
-
-
Exemple 5 : 50e percentile pondéré de request_time, précision 0,2. Pondération : 100 si request_time < 20, sinon 10.
-
Instruction de requête
* | SELECT approx_percentile( request_time, CASE WHEN request_time < 20 THEN 100 ELSE 10 END, 0.5, 0.2 )
-
Fonction numeric_histogram
La fonction numeric_histogram calcule un histogramme approximatif de x avec un nombre de compartiments donné. Elle renvoie un objet JSON.
Syntaxe
-
Calcule un histogramme approximatif pour x avec le nombre de compartiments spécifié.
numeric_histogram(bucket, x) -
Calcule un histogramme approximatif pondéré pour x avec le nombre de compartiments spécifié.
numeric_histogram(bucket, x, weight)
Paramètres
|
Paramètre |
Description |
|
bucket |
Nombre de compartiments de l'histogramme. Doit être de type BIGINT. |
|
x |
Nom de la colonne. Doit être de type DOUBLE. |
|
weight |
Pondération. Doit être un entier supérieur à 0. Les valeurs sont regroupées selon x × weight. |
Type de valeur renvoyée
JSON
Exemples
-
Exemple 1 : Calculez un histogramme approximatif des durées de requête pour les requêtes POST.
-
Instruction de requête
request_method:POST | SELECT numeric_histogram(10, request_time) Renvoie un objet JSON associant les limites supérieures des compartiments aux dénombrements, par exemple
"45.03638445951907":11351.0,"31.617058096415327":16180.0et"51.0979254315973":13786.0.
-
-
Exemple 2 : Calculez un histogramme approximatif pondéré des durées de requête pour les requêtes POST.
-
Instruction de requête
request_method:POST | SELECT numeric_histogram(10, request_time, CASE WHEN request_time<20 THEN 100 ELSE 10 END) Renvoie une colonne JSON
_col0contenant 10 paires clé-valeur associant les plages aux fréquences, par exemple"60.63632633267428":268070.0,"76.41340599455032":275250.0et"15.028066666666671":1500000.0.
-
Fonction numeric_histogram_u
La fonction numeric_histogram_u calcule un histogramme approximatif de x avec un nombre de compartiments donné. Elle renvoie un tableau à plusieurs lignes et colonnes.
Syntaxe
numeric_histogram_u(bucket, x)
Paramètres
|
Paramètre |
Description |
|
bucket |
Nombre de compartiments de l'histogramme. Doit être de type BIGINT. |
|
x |
Nom de la colonne. Doit être de type DOUBLE. |
Type de valeur renvoyée
Un tableau comportant les colonnes bucket_avg et count.
Exemples
Calculez un histogramme approximatif des durées de requête POST.
-
Instruction de requête
request_method:POST | SELECT numeric_histogram_u(10, request_time) Renvoie 10 lignes avec les colonnes
bucket_avgetcount. Par exemple : bucket_avg 14,20, count 18806,0 ; bucket_avg 70,78, count 13442,0.
Fonction approx_most_frequent
Estime les k valeurs les plus fréquentes de la colonne x ainsi que leurs dénombrements approximatifs.
Syntaxe
approx_most_frequent(k, x)
Paramètres
|
Paramètre |
Description |
|
k |
Nombre de valeurs les plus fréquentes à renvoyer. Par exemple, 5 renvoie les 5 premières valeurs et leurs dénombrements approximatifs. |
|
x |
Nom de la colonne. Doit être de type VARCHAR. |
Valeur renvoyée
map(VARCHAR, BIGINT)
Exemple
Obtenez les trois valeurs les plus fréquentes du champ content.
-
Données d'exemple
content: 'A' 'B' 'A' 'C' 'A' 'B' 'C' 'D' 'E' -
Instruction de requête
SELECT approx_most_frequent(3, content) -
Résultat
La requête renvoie
{"A":3, "B":2, "C":2}.