DDSQL est un langage SQL pour les données Datadog. Il implémente plusieurs opérations SQL standard, telles que SELECT, et permet d’interroger des données non structurées. Vous pouvez effectuer des actions comme obtenir exactement les données souhaitées en rédigeant votre propre instruction SELECT, ou interroger des tags comme s’ils étaient des colonnes de table standard.
Cette documentation couvre la prise en charge SQL disponible et inclut :
Récupérer des lignes depuis une base de données, DISTINCT filtrant les enregistrements en double.
SELECTDISTINCTcustomer_idFROMorders
JOIN
Combiner des lignes provenant de deux tables ou plus en fonction d’une colonne liée entre elles. Prend en charge FULL JOIN, INNER JOIN, LEFT JOIN, RIGHT JOIN.
Cette clause est un raccourci pour les jointures dont les colonnes de jointure portent le même nom dans les deux tables. Elle prend une liste de ces colonnes séparées par des virgules et crée une condition d’égalité distincte pour chaque paire correspondante. Par exemple, joindre T1 et T2 avec USING (a, b) est équivalent à ON T1.a = T2.a AND T1.b = T2.b.
Intervalle représentant une durée spécifiée dans une unité donnée.
Unités prises en charge : - milliseconds / millisecond - seconds / second - minutes / minute - hours / hour - days / day
Types de données
DDSQL prend en charge les types de données suivants :
Type de données
Description
BIGINT
Entiers signés sur 64 bits.
BOOLEAN
Valeurs true ou false.
DECIMAL
Nombres à virgule flottante.
INTERVAL
Valeurs de durée.
JSON
Données JSON.
TIMESTAMP
Valeurs de date et d’heure.
VARCHAR
Chaînes de caractères de longueur variable.
Types tableau
Tous les types de données prennent en charge les types tableau. Consultez la section Tableaux pour les littéraux de tableau, l’accès aux éléments et les fonctions de tableau.
Littéraux de type
DDSQL prend en charge les littéraux de type explicites avec la syntaxe [TYPE] [valeur].
Type
Syntaxe
Exemple
BIGINT
BIGINT 'valeur'
BIGINT '1234567'
BOOLEAN
BOOLEAN 'valeur'
BOOLEAN 'true'
DECIMAL
DECIMAL 'valeur'
DECIMAL '3.14159'
INTERVAL
INTERVAL 'valeur unité'
INTERVAL '30 minutes'
JSON
JSON 'valeur'
JSON '{"key": "value", "count": 42}'
TIMESTAMP
TIMESTAMP 'valeur'
TIMESTAMP '2023-12-25 10:30:00'
VARCHAR
VARCHAR 'valeur'
VARCHAR 'hello world'
Le préfixe de type peut être omis et le type est automatiquement déduit de la valeur. Par exemple, 'hello world' est déduit comme VARCHAR, 123 comme BIGINT et true comme BOOLEAN. Utilisez des préfixes de type explicites lorsque les valeurs peuvent être ambiguës ; par exemple, TIMESTAMP '2025-01-01' serait déduit comme VARCHAR sans le préfixe.
Exemple
-- Using type literals in queries
SELECTVARCHAR'Product Name: '||nameASlabeled_name,price*DECIMAL'1.08'ASprice_with_tax,created_at+INTERVAL'7 days'ASexpiry_dateFROMproductsWHEREcreated_at>TIMESTAMP'2025-01-01';
Tableaux
Les tableaux sont des collections ordonnées de valeurs partageant toutes le même type de données. Chaque type de base DDSQL possède un type tableau correspondant.
Littéraux de tableau
Utiliser la syntaxe ARRAY[valeur1, valeur2, ...] pour construire un littéral de tableau. Le type du tableau est automatiquement déduit des valeurs.
Les fonctions SQL suivantes sont prises en charge. Pour les fonctions de fenêtrage, consultez la section Fonctions de fenêtrage dans cette documentation.
Fonction
Type renvoyé
Description
MIN(variable v)
typeof v
Renvoie la plus petite valeur dans un ensemble de données.
MAX(variable v)
typeof v
Renvoie la valeur maximale parmi toutes les valeurs d’entrée.
COUNT(any a)
numérique
Renvoie le nombre de valeurs d’entrée non nulles.
SUM(numeric n)
numérique
Renvoie la somme de toutes les valeurs d’entrée.
AVG(numeric n)
numérique
Renvoie la valeur moyenne (moyenne arithmétique) de toutes les valeurs d’entrée.
BOOL_AND(boolean b)
booléen
Renvoie si toutes les valeurs d’entrée non nulles sont vraies.
BOOL_OR(boolean b)
booléen
Renvoie si au moins une valeur d’entrée non nulle est vraie.
CEIL(numeric n) / CEILING(numeric n)
numérique
Renvoie la valeur arrondie à l’entier supérieur. CEIL et CEILING sont tous deux pris en charge comme alias.
FLOOR(numeric n)
numérique
Renvoie la valeur arrondie à l’entier inférieur.
ROUND(numeric n)
numérique
Renvoie la valeur arrondie à l’entier le plus proche.
POWER(numeric base, numeric exponent)
numérique
Renvoie la valeur de la base élevée à la puissance de l’exposant.
LOWER(string s)
chaîne
Renvoie la chaîne en minuscules.
UPPER(string s)
chaîne
Renvoie la chaîne en majuscules.
ABS(numeric n)
numérique
Renvoie la valeur absolue.
COALESCE(args a)
typeof first non-null a OR null
Renvoie la première valeur non nulle, ou null si toutes sont nulles.
CAST(value AS type)
type
Convertit la valeur donnée vers le type de données spécifié.
LENGTH(string s)
nombre entier
Renvoie le nombre de caractères dans la chaîne.
TRIM(string s)
chaîne
Supprime les espaces blancs en début et en fin de chaîne.
REPLACE(string s, string from, string to)
chaîne
Remplace les occurrences d’une sous-chaîne dans une chaîne par une autre sous-chaîne.
SUBSTRING(string s, int start, int length)
chaîne
Extrait une sous-chaîne à partir d’une position donnée et d’une longueur spécifiée.
REVERSE(string s)
chaîne
Renvoie la chaîne avec les caractères en ordre inverse.
STRPOS(string s, string substring)
nombre entier
Renvoie la position du premier index de la sous-chaîne dans la chaîne donnée, ou 0 si aucune correspondance.
Aligne un timestamp (source) sur des intervalles de longueur régulière (stride). Renvoie le début de l’intervalle contenant la source, calculé comme le plus grand timestamp inférieur ou égal à la source et correspondant à un multiple de longueurs de stride à partir de l’origine.
DATE_TRUNC(string unit, timestamp t)
timestamp
Tronque un timestamp à une précision spécifiée selon l’unité fournie.
CURRENT_SETTING(string setting_name)
chaîne
Renvoie la valeur actuelle du paramètre spécifié. Prend en charge les paramètres dd.time_frame_start et dd.time_frame_end, qui renvoient respectivement le début et la fin de la plage temporelle globale.
NOW()
timestamp
Renvoie le timestamp UTC actuel au début de la requête en cours.
CARDINALITY(array a)
nombre entier
Renvoie le nombre d’éléments dans le tableau.
ARRAY_POSITION(array a, typeof_array value)
nombre entier
Renvoie l’index de la première occurrence de la valeur trouvée dans le tableau, ou null si la valeur est introuvable.
STRING_TO_ARRAY(string s, string delimiter)
tableau de chaînes
Divise la chaîne donnée en un tableau de chaînes à l’aide du délimiteur donné.
ARRAY_TO_STRING(array a, string delimiter)
chaîne
Convertit un tableau en chaîne en concaténant les éléments avec le délimiteur donné.
ARRAY_AGG(expression e)
tableau du type d’entrée
Crée un tableau en collectant toutes les valeurs d’entrée.
APPROX_PERCENTILE(double percentile) WITHIN GROUP (ORDER BY expression e)
typeof expression
Calcule une valeur de percentile approximative. Le percentile doit être compris entre 0,0 et 1,0 (inclus). Nécessite la syntaxe WITHIN GROUP (ORDER BY ...).
UNNEST(array a [, array b...])
lignes de a [, b…]
Développe des tableaux en un ensemble de lignes. Cette forme est uniquement autorisée dans une clause FROM.
-- Obtenir le nombre total de secondes d'un intervalle
SELECTEXTRACT(epochFROMINTERVAL'1 day 2 hours')-- Renvoie : 93600
-- Calculer le nombre de secondes écoulées depuis chaque événement
SELECTevent_time,EXTRACT(epochFROMnow())-EXTRACT(epochFROMevent_time)ASseconds_agoFROMevents
TO_TIMESTAMP
TO_TIMESTAMP existe sous deux formes :
Forme 1 : convertir une chaîne en timestamp avec un format
Modèles pris en charge pour le formatage de date/heure :
dd.time_frame_start : renvoie le début de la plage temporelle sélectionnée au format RFC 3339 (YYYY-MM-DD HH:mm:ss.sss±HH:mm).
dd.time_frame_end : renvoie la fin de la plage temporelle sélectionnée au format RFC 3339 (YYYY-MM-DD HH:mm:ss.sss±HH:mm).
-- Define the current analysis window
WITHboundsAS(SELECTCAST(CURRENT_SETTING('dd.time_frame_start')ASTIMESTAMP)AStime_frame_start,CAST(CURRENT_SETTING('dd.time_frame_end')ASTIMESTAMP)AStime_frame_end),-- Define the immediately preceding window of equal length
previous_boundsAS(SELECTtime_frame_start-(time_frame_end-time_frame_start)ASprev_time_frame_start,time_frame_startASprev_time_frame_endFROMbounds)SELECT*FROMbounds,previous_bounds
-- Calculer le temps de réponse médian (50e percentile)
SELECTAPPROX_PERCENTILE(0.5)WITHINGROUP(ORDERBYresponse_time)ASmedian_response_timeFROMlogs-- Calculer les percentiles de temps de réponse au 95e et 99e par service
SELECTservice_name,APPROX_PERCENTILE(0.95)WITHINGROUP(ORDERBYresponse_time)ASp95_response_time,APPROX_PERCENTILE(0.99)WITHINGROUP(ORDERBYresponse_time)ASp99_response_timeFROMlogsGROUPBYservice_name
Expressions régulières
Version
Toutes les fonctions d’expression régulière (regex) utilisent la version International Components for Unicode (ICU) :
Renvoie les sous-chaînes de la première correspondance du modèle dans la chaîne.
Cette fonction recherche dans la chaîne d’entrée à l’aide du modèle donné et renvoie les sous-chaînes capturées (groupes de capture) de la première correspondance. Si aucun groupe de capture n’est présent, renvoie la correspondance complète.
Ce tableau présente un aperçu des fonctions de fenêtrage prises en charge. Pour des informations détaillées et des exemples, consultez la documentation PostgreSQL.
Fonction
Type renvoyé
Description
OVER
S. O.
Définit une fenêtre pour un ensemble de lignes sur lesquelles d’autres fonctions de fenêtrage opèrent.
PARTITION BY
S. O.
Divise le jeu de résultats en partitions, spécifiquement pour l’application des fonctions de fenêtrage.
RANK()
nombre entier
Attribue un rang à chaque ligne dans une partition, avec des écarts pour les ex-aequo.
ROW_NUMBER()
nombre entier
Attribue un numéro séquentiel unique à chaque ligne dans une partition.
LEAD(column n)
typeof column
Renvoie la valeur de la ligne suivante dans la partition.
LAG(column n)
typeof column
Renvoie la valeur de la ligne précédente dans la partition.
FIRST_VALUE(column n)
typeof column
Renvoie la première valeur d’un ensemble de valeurs ordonné.
LAST_VALUE(column n)
typeof column
Renvoie la valeur à l’offset spécifié dans un ensemble de valeurs ordonné.
NTH_VALUE(column n, offset)
typeof column
Renvoie la valeur à l’offset spécifié dans un ensemble de valeurs ordonné.
Fonctions et opérateurs JSON
Name
Type renvoyé
Description
json_extract_path_text(text json, text path…)
texte
Extrait un sous-objet JSON sous forme de texte, défini par le chemin. Son comportement est équivalent à la fonction Postgres du même nom. Par exemple, json_extract_path_text(col, 'forest') renvoie la valeur de la clé forest pour chaque objet JSON dans col. Consultez l’exemple ci-dessous pour la syntaxe des tableaux JSON.
json_extract_path(text json, text path…)
JSON
Même fonctionnalité que json_extract_path_text, mais renvoie une colonne de type JSON au lieu du type texte.
json_array_elements(text json)
lignes de JSON
Développe un tableau JSON en un ensemble de lignes. Cette forme est uniquement autorisée dans une clause FROM.
json_array_elements_text(text json)
lignes de texte
Développe un tableau JSON en un ensemble de lignes. Cette forme est uniquement autorisée dans une clause FROM.
Fonctions de table
Les fonctions de table permettent d’interroger les logs, les métriques et d’autres sources de données non structurées.
Renvoie les données de log sous forme de table. Le paramètre columns spécifie les champs de log à extraire. Les champs imbriqués sont accessibles avec la notation par points, et les champs non principaux doivent être précédés de @. La clause AS définit le schéma de la table renvoyée. Facultatif : filtrage par index ou plage temporelle. Lorsque la plage temporelle n'est pas spécifiée, DDSQL utilise par défaut le paramètre de plage temporelle global, qui dans DDSQL Editor correspond à la dernière heure. Facultatif : spécification du stockage à utiliser (par exemple, hot, flex_tier). Lorsqu'il n'est pas spécifié, le stockage chaud est utilisé par défaut.
Renvoie les données de métrique sous forme de valeur scalaire. La fonction accepte une requête de métriques (avec regroupement facultatif), un reducer pour déterminer la méthode d'agrégation des valeurs (avg, max, etc.) et des paramètres de timestamp facultatifs (1 heure par défaut) pour définir la plage temporelle.
SELECT*FROMdd.metrics_scalar('avg:system.cpu.user{*} by {service}','avg',TIMESTAMP'2025-07-10 00:00:00.000-04:00',TIMESTAMP'2025-07-17 00:00:00.000-04:00')ORDERBYvalueDESC;
Renvoie les données de métrique sous forme de série temporelle. La fonction accepte une requête de métriques (avec regroupement facultatif) et des paramètres de timestamp facultatifs (1 heure par défaut) pour définir la plage temporelle. Renvoie des points de données dans le temps plutôt qu'une valeur agrégée unique.
SELECT*FROMdd.metrics_timeseries('avg:system.cpu.user{*} by {service}',TIMESTAMP'2025-07-10 00:00:00.000-04:00',TIMESTAMP'2025-07-17 00:00:00.000-04:00')ORDERBYtimestamp,service;
Les alias de colonnes ne peuvent pas contenir de points ; remplacez-les par des underscores ou tout autre caractère valide lors de la définition de l’alias.
DDSQL expose les tags sous forme de type hstore, inspiré de PostgreSQL. Vous pouvez accéder aux valeurs de clés de tags spécifiques à l’aide de l’opérateur flèche de PostgreSQL. Par exemple :
SELECTinstance_type,count(instance_type)FROMaws.ec2_instanceWHEREtags->'region'='us-east-1'-- region is a tag, not a column
GROUPBYinstance_type
Les tags sont des paires clé-valeur où chaque clé peut avoir zéro, une ou plusieurs valeurs de tag correspondantes. Lors de l’accès, la valeur du tag renvoie une chaîne unique contenant toutes les valeurs correspondantes. Lorsque les données comportent plusieurs valeurs de tag pour la même clé de tag, elles sont représentées sous forme de chaîne triée et séparée par des virgules. Par exemple :