DDSQL은 Datadog 데이터를 위한 SQL입니다. DDSQL은 SELECT와 같은 여러 표준 SQL 연산을 구현하며, 비정형 데이터에 대한 쿼리도 허용합니다. 직접 SELECT 문을 작성하여 원하는 데이터를 정확히 가져오거나 태그를 일반 테이블 열처럼 쿼리하는 등의 작업을 수행할 수 있습니다.
AI 에이전트에서는 Datadog MCP 서버ddsql 도구 세트(미리보기)를 통해 DDSQL 쿼리를 실행할 수 있습니다.
이 절은 양쪽 표에 동일한 이름의 조인 열이 있을 때 사용하는 JOIN의 축약 구문입니다. 쉼표로 구분된 해당 열의 목록을 입력하면, 각 일치하는 쌍마다 별도의 동등 조건이 생성됩니다. 예를 들어, T1과 T2를 USING (a, b)로 조인하는 것은 ON T1.a = T2.a AND T1.b = T2.b와 동일합니다.
주어진 단위로 지정된 지속 시간을 나타내는 간격입니다.
지원되는 단위: - milliseconds / millisecond - seconds / second - minutes / minute - hours / hour - days / day
데이터 유형
DDSQL은 다음 데이터 유형을 지원합니다.
데이터 유형
설명
BIGINT
64비트 부호 있는 정수.
BOOLEAN
true 또는 false 값.
DECIMAL
부동 소수점 숫자.
INET
네트워크 주소 값(IPv4 및 IPv6, 필요 시 CIDR 접두사 길이 포함).
INTERVAL
지속 시간 값.
JSON
JSON 데이터.
TIMESTAMP
날짜 및 시간 값.
VARCHAR
가변 길이 문자 문자열.
배열 유형
모든 데이터 유형은 배열 유형을 지원합니다. 배열 리터럴, 요소 접근 및 배열 함수에 대해서는 배열을 참조하세요.
형식 리터럴
DDSQL은 [TYPE] [value] 구문을 사용하여 명시적 형식 리터럴을 지원합니다.
유형
구문
예시
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'
유형 접두사는 생략할 수 있으며, 값에서 자동으로 유형이 유추됩니다. 예를 들어, 'hello world'는 VARCHAR로, 123은 BIGINT로, true는 BOOLEAN으로 유추됩니다. 값이 모호할 수 있는 경우 명시적인 유형 접두사를 사용하세요. 예를 들어, TIMESTAMP '2025-01-01'은 접두사가 없으면 VARCHAR로 유추됩니다.
예시
-- 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';
배열
배열은 모두 동일한 데이터 유형을 공유하는 값의 정렬된 모음입니다. 모든 DDSQL 기본 유형에는 해당하는 배열 유형이 있습니다.
dd.time_frame_start: 선택한 시간 범위의 시작을 RFC 3339 형식(YYYY-MM-DD HH:mm:ss.sss±HH:mm)으로 반환합니다.
dd.time_frame_end: 선택한 시간 범위의 끝을 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
다음 표는 지원되는 윈도우 함수에 대한 개요를 제공합니다. 자세한 내용과 예시는 PostgreSQL 설명서를 참조하세요.
함수
반환 유형
설명
OVER
해당 없음
다른 윈도우 함수가 연산을 수행할, 행 집합에 대한 윈도우를 정의합니다.
PARTITION BY
해당 없음
결과 집합을 여러 파티션으로 나누며, 이는 특히 윈도우 함수를 적용하기 위한 것입니다.
RANK()
정수
파티션 내의 각 행에 순위를 부여하며, 동률이 있으면 순위 번호를 건너뜁니다.
ROW_NUMBER()
정수
파티션 내의 각 행에 고유한 순차 번호를 부여합니다.
LEAD(column n)
열의 유형
파티션 내 다음 행의 값을 반환합니다.
LAG(column n)
열의 유형
파티션 내 이전 행의 값을 반환합니다.
FIRST_VALUE(column n)
열의 유형
정렬된 값 집합에서 첫 번째 값을 반환합니다.
LAST_VALUE(column n)
열의 유형
정렬된 값 집합에서 마지막 값을 반환합니다.
NTH_VALUE(column n, offset)
열의 유형
정렬된 값 집합에서 지정된 오프셋 위치의 값을 반환합니다.
JSON 함수 및 연산자
이름
반환 유형
설명
json_extract_path_text(text json, text path…)
text
경로에 의해 정의된 JSON 하위 객체를 텍스트로 추출합니다. 그 동작은 동일한 이름의 Postgres 함수와 동일합니다. 예를 들어, json_extract_path_text(col, ‘forest')는 col의 각 JSON 객체에서 forest 키의 값을 반환합니다. JSON 배열 구문에 대한 예시는 아래를 참조하세요.
json_extract_path(text json, text path…)
JSON
와 동일한 기능을 가지지만, json_extract_path_text텍스트 유형 대신 JSON 유형의 열을 반환합니다.
json_array_elements(text json)
JSON 행
JSON 배열을 행 집합으로 확장합니다. 이 형식은 FROM 절에서만 허용됩니다.
json_array_elements_text(text json)
텍스트 행
JSON 배열을 행 집합으로 확장합니다. 이 형식은 FROM 절에서만 허용됩니다.
네트워크 주소 함수 및 연산자
inet 유형은 선택적 CIDR 접두사 길이(예: 192.168.1.5/24 또는 ::1)가 포함된 IPv4 및 IPv6 네트워크 주소를 나타냅니다. inet 값은 리터럴 구문 INET 'value'을 사용하거나 문자열을 CAST(column AS inet)로 캐스팅하여 생성합니다.
-- 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
결합 사용
-- 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
테이블 함수
테이블 함수는 로그, 메트릭, 클라우드 비용 및 기타 데이터 소스를 쿼리하는 데 사용됩니다.
로그 데이터를 테이블로 반환합니다. columns 파라미터는 추출할 로그 필드를 지정합니다. 중첩 필드는 점 표기법을 사용하여 접근하며, 핵심 필드가 아닌 경우 앞에 @를 붙여야 합니다. AS 절은 반환된 테이블의 스키마를 정의합니다. 선택 사항: 인덱스 또는 시간 범위로 필터링. 시간이 지정되지 않으면 DDSQL은 전역 시간 설정을 기본값으로 사용하며, DDSQL 편집기에서는 지난 1시간으로 설정됩니다. 선택 사항: 사용할 저장소 지정(예: hot, flex_tier). 지정하지 않으면 기본값은 핫 저장소입니다.
메트릭 데이터를 스칼라 값으로 반환합니다. 이 함수는 메트릭 쿼리(선택적 그룹화 포함), 값 집계를 결정하는 리듀서(평균, 최대 등), 그리고 시간 범위를 정의하는 선택적 타임스탬프 파라미터(기본값은 1시간)를 인수로 받습니다.
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;
메트릭 데이터를 시계열로 반환합니다. 이 함수는 메트릭 쿼리(선택적 그룹화 포함)와 선택적 타임스탬프 파라미터(기본값 1시간)를 받아 시간 범위를 정의합니다. 단일 집계 값이 아닌 시간에 따른 데이터 포인트를 반환합니다.
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;
Cloud Cost Management 데이터를 스칼라 값으로 반환합니다. 이 함수는 클라우드 비용 쿼리(선택적 그룹화 포함), 집계 리듀서(비용 데이터에는 sum 사용 권장, avg, min및 max 등의 다른 리듀서도 사용할 수 있으나 비용 쿼리에는 거의 적용되지 않음), 그리고 시간 범위를 정의하기 위한 선택적 타임스탬프 파라미터(기본값: 1시간)를 인수로 받습니다. 참고: 클라우드 비용 데이터는 일반적으로 24~48시간 지연되므로 최근 타임스탬프는 결과를 반환하지 않을 수 있습니다.
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;
Cloud Cost Management 데이터를 시계열로 반환합니다. 이 함수는 클라우드 비용 쿼리(선택적 그룹화 포함)와 선택적 타임스탬프 파라미터(기본값 1시간)를 받아 시간 범위를 정의합니다. 단일 집계 값이 아닌 시간에 따른 비용 데이터 포인트를 반환합니다. 참고: 클라우드 비용 데이터는 일반적으로 24~48시간 지연되므로 최근 타임스탬프는 결과를 반환하지 않을 수 있습니다.
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은 PostgreSQL에서 영감을 받은 hstore 유형으로 태그를 노출합니다. 특정 태그 키의 값은 PostgreSQL 화살표 연산자를 사용하여 접근할 수 있습니다. 예를 들면 다음과 같습니다.
SELECTinstance_type,count(instance_type)FROMaws.ec2_instanceWHEREtags->'region'='us-east-1'-- region is a tag, not a column
GROUPBYinstance_type
태그는 각 키가 0개, 1개 또는 여러 개의 태그 값을 가질 수 있는 키-값 쌍입니다. 태그 값을 조회하면 해당 키에 연결된 모든 값이 하나의 문자열로 반환됩니다. 데이터에 동일한 태그 키에 대해 여러 개의 태그 값이 있는 경우, 이 값은 정렬된 쉼표로 구분된 문자열로 표현됩니다. 예를 들면 다음과 같습니다.