Tous les produits
Search
Centre de documentation

Simple Log Service:Fonctions approximatives

Dernière mise à jour :Aug 19, 2026

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.

Important

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

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

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

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

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.

approx_most_frequent

approx_most_frequent(k, x)

Estime les k valeurs les plus fréquentes de la colonne x ainsi que leurs dénombrements approximatifs. Renvoie une map.

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 count et estimez le nombre de visiteurs uniques (UV) avec approx_distinct sur le champ client_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_ip avec 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) de request_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 de request_time respectivement 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.0 et "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 _col0 contenant 10 paires clé-valeur associant les plages aux fréquences, par exemple "60.63632633267428":268070.0, "76.41340599455032":275250.0 et "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_avg et count. 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}.