DDSQL es SQL para datos de Datadog. Implementa varias operaciones estándar de SQL, como SELECT, y permite consultas sobre datos no estructurados. Puedes realizar acciones como obtener exactamente los datos que deseas escribiendo tu propia sentencia SELECT, o consultando etiquetas como si fueran columnas de tabla estándar.
Puedes ejecutar consultas de DDSQL desde agentes de IA utilizando el conjunto de herramientas Servidor MCP de Datadogddsql (Vista previa).
Esta documentación cubre el soporte de SQL disponible e incluye:
Esta cláusula es una abreviatura para uniones donde las columnas de unión tienen el mismo nombre en ambas tablas. Toma una lista separada por comas de esas columnas y crea una condición de igualdad separada para cada par coincidente. Por ejemplo, unir T1 y T2 con USING (a, b) es equivalente a ON T1.a = T2.a AND T1.b = T2.b.
Intervalo que representa una duración de tiempo especificada en una unidad dada.
Unidades soportadas: - milliseconds / millisecond - seconds / second - minutes / minute - hours / hour - days / day
Tipos de datos
DDSQL soporta los siguientes tipos de datos:
Tipo de Dato
Descripción
BIGINT
Enteros con signo de 64 bits.
BOOLEAN
true o false valores.
DECIMAL
Números de punto flotante.
INET
Valores de dirección de red (IPv4 e IPv6, con longitud de prefijo CIDR opcional).
INTERVAL
Valores de duración de tiempo.
JSON
Datos JSON.
TIMESTAMP
Valores de fecha y hora.
VARCHAR
Cadenas de caracteres de longitud variable.
Tipos de arreglo
Todos los tipos de datos soportan tipos de arreglo. Vea Arreglos para literales de arreglo, acceso a elementos y funciones de arreglo.
Literales de tipo
DDSQL admite literales de tipo explícitos utilizando la sintaxis [TYPE] [value].
Tipo
Sintaxis
Ejemplo
BIGINT
BIGINT 'value'
BIGINT '1234567'
BOOLEAN
BOOLEAN 'value'
BOOLEAN 'true'
DECIMAL
DECIMAL 'value'
DECIMAL '3.14159'
INET
INET 'value'
INET '192.168.1.5/24'
INTERVAL
INTERVAL 'value unit'
INTERVAL '30 minutes'
JSON
JSON 'value'
JSON '{"key": "value", "count": 42}'
TIMESTAMP
TIMESTAMP 'value'
TIMESTAMP '2023-12-25 10:30:00'
VARCHAR
VARCHAR 'value'
VARCHAR 'hello world'
El prefijo de tipo se puede omitir y el tipo se infiere automáticamente del valor. Por ejemplo, 'hello world' se infiere como VARCHAR, 123 como BIGINT, y true como BOOLEAN. Utilice prefijos de tipo explícitos cuando los valores puedan ser ambiguos; por ejemplo, TIMESTAMP '2025-01-01' se inferiría como VARCHAR sin el prefijo.
Ejemplo
-- 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';
Arreglos
Los arreglos son colecciones ordenadas de valores que comparten el mismo tipo de dato. Cada tipo base de DDSQL tiene un tipo de arreglo correspondiente.
Literales de arreglo
Utilice la sintaxis ARRAY[value1, value2, ...] para construir un literal de arreglo. El tipo de arreglo se infiere automáticamente de los valores.
Alinea un timestamp (fuente) a intervalos de longitud uniforme. Devuelve el inicio del bucket que contiene la fuente, calculado como el mayor timestamp que es menor o igual a la fuente y que es un múltiplo de la longitud del stride a partir del origen.
DATE_TRUNC(string unit, timestamp t)
timestamp
Trunca un timestamp a una precisión especificada basada en la unidad proporcionada.
CURRENT_SETTING(string setting_name)
cadena
Devuelve el valor actual de la configuración especificada. Soporta los parámetros dd.time_frame_start y dd.time_frame_end, que devuelven el inicio y el final del marco temporal global, respectivamente.
NOW()
timestamp
Devuelve el timestamp UTC actual al inicio de la consulta actual.
CARDINALITY(array a)
entero
Devuelve el número de elementos en el arreglo.
ARRAY_POSITION(array a, typeof_array value)
entero
Devuelve el índice de la primera ocurrencia del valor encontrado en el arreglo, o nulo si el valor no se encuentra.
STRING_TO_ARRAY(string s, string delimiter)
arreglo de cadenas
Divide la cadena dada en un arreglo de cadenas utilizando el delimitador proporcionado.
ARRAY_TO_STRING(array a, string delimiter)
cadena
Convierte un arreglo en una cadena concatenando los elementos con el delimitador dado.
ARRAY_AGG(expression e)
arreglo de tipo de entrada
Crea un arreglo recolectando todos los valores de entrada.
APPROX_PERCENTILE(double percentile) WITHIN GROUP (ORDER BY expression e)
expresión typeof
Calcula un valor percentil aproximado. El percentil debe estar entre 0.0 y 1.0 (inclusive). Requiere la sintaxis WITHIN GROUP (ORDER BY ...).
UNNEST(array a [, array b...])
filas de a [, b…]
Expande arreglos en un conjunto de filas. Esta forma solo se permite en una cláusula FROM.
dd.time_frame_start: Devuelve el inicio del marco de tiempo seleccionado en formato RFC 3339 (YYYY-MM-DD HH:mm:ss.sss±HH:mm).
dd.time_frame_end: Devuelve el final del marco de tiempo seleccionado en formato 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
-- Calculate the median (50th percentile) response time
SELECTAPPROX_PERCENTILE(0.5)WITHINGROUP(ORDERBYresponse_time)ASmedian_response_timeFROMlogs-- Calculate 95th and 99th response time percentiles by service
SELECTservice_name,APPROX_PERCENTILE(0.95)WITHINGROUP(ORDERBYresponse_time)ASp95_response_time,APPROX_PERCENTILE(0.99)WITHINGROUP(ORDERBYresponse_time)ASp99_response_timeFROMlogsGROUPBYservice_name
Expresiones regulares
Sabor
Todas las funciones de expresiones regulares (regex) utilizan el sabor de Componentes Internacionales para Unicode (ICU):
Devuelve las subcadenas de la primera coincidencia del patrón en la cadena.
Esta función busca en la cadena de entrada utilizando el patrón dado y devuelve las subcadenas capturadas (grupos de captura) de la primera coincidencia. Si no hay grupos de captura presentes, devuelve la coincidencia completa.
Esta tabla proporciona una visión general de las funciones de ventana soportadas. Para detalles y ejemplos completos, consulta la documentación de PostgreSQL.
Función
Tipo de retorno
Descripción
OVER
N/A
Define una ventana para un conjunto de filas sobre las que operar otras funciones de ventana.
PARTITION BY
N/A
Divide el conjunto de resultados en particiones, específicamente para aplicar funciones de ventana.
RANK()
entero
Asigna un rango a cada fila dentro de una partición, con huecos para empates.
ROW_NUMBER()
entero
Asigna un número secuencial único a cada fila dentro de una partición.
LEAD(column n)
tipo de dato de la columna
Devuelve el valor de la siguiente fila en la partición.
LAG(column n)
tipo de dato de la columna
Devuelve el valor de la fila anterior en la partición.
FIRST_VALUE(column n)
tipo de dato de la columna
Devuelve el primer valor en un conjunto ordenado de valores.
LAST_VALUE(column n)
tipo de dato de la columna
Devuelve el último valor en un conjunto ordenado de valores.
NTH_VALUE(column n, offset)
tipo de dato de la columna
Devuelve el valor en el desplazamiento especificado en un conjunto ordenado de valores.
Funciones y operadores JSON
Nombre
Tipo de retorno
Descripción
json_extract_path_text(text json, text path…)
text
Extrae un subobjeto JSON como texto, definido por la ruta. Su comportamiento es equivalente a la función de Postgres con el mismo nombre. Por ejemplo, json_extract_path_text(col, ‘forest') devuelve el valor de la clave forest para cada objeto JSON en col. Vea el ejemplo a continuación para la sintaxis de un arreglo JSON.
json_extract_path(text json, text path…)
JSON
Misma funcionalidad que json_extract_path_text, pero devuelve una columna de tipo JSON en lugar de tipo texto.
json_array_elements(text json)
filas de JSON
Expande un arreglo JSON en un conjunto de filas. Esta forma solo se permite en una cláusula FROM.
json_array_elements_text(text json)
filas de texto
Expande un arreglo JSON en un conjunto de filas. Esta forma solo se permite en una cláusula FROM.
Funciones y operadores de dirección de red
El tipo inet representa direcciones de red IPv4 e IPv6 con una longitud de prefijo CIDR opcional (por ejemplo, 192.168.1.5/24 o ::1). Crea valores inet con la sintaxis literal de tipo INET 'value' o convirtiendo una cadena con CAST(column AS inet).
Funciones
Función
Tipo de retorno
Descripción
host(inet addr)
VARCHAR
Devuelve la dirección IP como texto, sin la longitud del prefijo.
network(inet addr)
INET
Devuelve la parte de red de la dirección, con los bits de host en cero.
netmask(inet addr)
INET
Devuelve la máscara de red para la dirección.
masklen(inet addr)
BIGINT
Devuelve la longitud del prefijo de la máscara de red.
broadcast(inet addr)
INET
Devuelve la dirección de difusión de la red.
family(inet addr)
BIGINT
Devuelve la familia de direcciones: 4 para IPv4, 6 para IPv6.
Operadores
Operador
Tipo de retorno
Descripción
inet a << inet b
BOOLEAN
Devuelve true si a está estrictamente contenido dentro de b.
inet a <<= inet b
BOOLEAN
Devuelve true si a está contenido dentro de o es igual a b.
inet a >> inet b
BOOLEAN
Devuelve true si a contiene estrictamente b.
inet a >>= inet b
BOOLEAN
Devuelve true si a contiene o es igual a b.
inet a && inet b
BOOLEAN
Devuelve true si las subredes de a y b se superponen.
-- Check if an IP is within a subnet
SELECTINET'192.168.1.5'<<INET'192.168.1.0/24'-- Returns: true
-- Check containment or equality
SELECTINET'192.168.1.0/24'<<=INET'192.168.1.0/24'-- Returns: true
-- Check if a subnet contains an IP
SELECTINET'10.0.0.0/8'>>INET'10.1.2.3'-- Returns: true
-- Check if two subnets overlap
SELECTINET'192.168.1.0/24'&&INET'192.168.1.128/25'-- Returns: true
Uso combinado
-- Find all IPs in a private subnet and extract network info
SELECThost(CAST(src_ipASinet))ASip,masklen(CAST(src_ipASinet))ASprefix_len,network(CAST(src_ipASinet))ASnetworkFROMconnectionsWHERECAST(src_ipASinet)<<INET'10.0.0.0/8'ANDfamily(CAST(src_ipASinet))=4
Funciones de tabla
Las funciones de tabla se utilizan para consultar registros, métricas, costos en la nube y otras fuentes de datos.
Devuelve datos de registro como una tabla. El parámetro de columnas especifica qué campos de registro extraer. Los campos anidados se acceden utilizando notación de punto, y los campos no centrales deben ser precedidos por @. La cláusula AS define el esquema de la tabla devuelta. Opcional: filtrado por índice o rango de tiempo. Cuando no se especifica el tiempo, DDSQL utiliza la configuración de tiempo global, que en DDSQL Editor está configurada para la última hora. Opcional: especificar el almacenamiento a utilizar (por ejemplo, hot, flex_tier). Cuando no se especifica, el valor predeterminado es almacenamiento caliente.
Devuelve datos métricos como un valor escalar. La función acepta una consulta de métricas (con agrupamiento opcional), un reducer para determinar cómo se agregan los valores (avg, max, etc.), y parámetros de marca de tiempo opcionales (por defecto 1 hora) para definir el rango de tiempo.
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;
Devuelve los datos de métricas como series temporales. La función acepta una consulta de métricas (con agrupamiento opcional) y parámetros de marca de tiempo opcionales (por defecto 1 hora) para definir el rango de tiempo. Devuelve puntos de datos a lo largo del tiempo en lugar de un solo valor agregado.
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;
Devuelve datos de Cloud Cost Management como un valor escalar. La función acepta una consulta de Cloud Cost (con agrupamiento opcional), un reductor de agregación (usa sum para datos de costos; otros reductores como avg, min, y max son aceptados pero rara vez aplicables a consultas de costos), y parámetros de marca de tiempo opcionales (por defecto 1 hora) para definir el rango de tiempo. Nota: Los datos de Cloud Cost suelen tener un retraso de 24 a 48 horas, por lo que las marcas de tiempo recientes pueden no devolver resultados.
SELECT*FROMdd.cloud_cost_scalar('sum:all.cost{*} by {service}','sum',TIMESTAMP'2025-07-10 00:00:00.000-04:00',TIMESTAMP'2025-07-17 00:00:00.000-04:00')ORDERBYvalueDESC;
Devuelve datos de Cloud Cost Management como series temporales. La función acepta una consulta de Cloud Cost (con agrupamiento opcional) y parámetros de marca de tiempo opcionales (por defecto 1 hora) para definir el rango de tiempo. Devuelve puntos de datos de costos a lo largo del tiempo en lugar de un solo valor agregado. Nota: Los datos de costos en la nube suelen tener un retraso de 24 a 48 horas, por lo que las marcas de tiempo recientes pueden no devolver resultados.
SELECT*FROMdd.cloud_cost_timeseries('sum:all.cost{*} by {service}',TIMESTAMP'2025-07-10 00:00:00.000-04:00',TIMESTAMP'2025-07-17 00:00:00.000-04:00')ORDERBYtimestamp,service;
DDSQL expone etiquetas como un hstore tipo, que está inspirado en PostgreSQL. Puede acceder a los valores de claves de etiquetas específicas utilizando el operador de flecha de PostgreSQL. Por ejemplo:
SELECTinstance_type,count(instance_type)FROMaws.ec2_instanceWHEREtags->'region'='us-east-1'-- region is a tag, not a column
GROUPBYinstance_type
Las etiquetas son pares clave-valor donde cada clave puede tener cero, uno o múltiples valores de etiqueta correspondientes a ella. Cuando se accede, el valor de la etiqueta devuelve una única cadena, que contiene todos los valores correspondientes. Cuando los datos tienen múltiples valores de etiqueta para la misma clave de etiqueta, se representan como una cadena ordenada y separada por comas. Por ejemplo: