SQL 쿼리 가이드
D.Hub에서는 데이터셋 탐색 및 파이프라인의 SQL 변환 노드에서 표준 SQL을 사용할 수 있습니다.
SQL 변환 노드
파이프라인 내에서 데이터를 필터링하거나 집계할 때 사용합니다.
구조
- 테이블 이름: 연결된 입력 데이터셋은 기본적으로
input이라는 테이블 이름으로 참조되거나, 사용자가 지정한 별칭을 사용합니다. - 결과: 쿼리의 실행 결과(
SELECT문의 결과)가 다음 노드로 전달됩니다.
예제
-- 입력 데이터에서 'status'가 'active'인 항목만 필터링
SELECT
id,
name,
created_at
FROM
input
WHERE
status = 'active'
데이터셋 탐색 (SQL 스크래치 패드)
데이터셋 상세 페이지의 '데이터' 탭에서 임시 쿼리를 실행하여 데이터를 확인할 수 있습니다.
- 제약 사항:
SELECT쿼리만 허용됩니다. - 테이블: 현재 데이터셋의 테이블 이름을 사용해야 합니다.
SELECT * FROM my_dataset_table LIMIT 100
유용한 SQL 함수
D.Hub의 분석 엔진에서 사용할 수 있는 주요 함수입니다. 대시보드 쿼리 모드, SQL 노드, 데이터셋 탐색에서 모두 사용 가능합니다.
날짜/시간 함수
| 함수 | 설명 | 예시 |
|---|---|---|
today() | 오늘 날짜 | WHERE date = today() |
now() | 현재 시각 | WHERE created_at > now() - INTERVAL 1 HOUR |
toStartOfMonth(date) | 월 시작일 | GROUP BY toStartOfMonth(date) |
toStartOfWeek(date) | 주 시작일 | GROUP BY toStartOfWeek(date) |
toStartOfHour(datetime) | 시간 시작 | GROUP BY toStartOfHour(ts) |
toYYYYMM(date) | YYYYMM 정수 변환 | SELECT toYYYYMM(date) |
dateDiff('day', d1, d2) | 날짜 차이 | dateDiff('day', start, end) |
formatDateTime(dt, fmt) | 날짜 포맷팅 | formatDateTime(dt, '%Y-%m-%d') |
집계 함수
| 함수 | 설명 | 예시 |
|---|---|---|
count() | 행 수 | COUNT(*) |
sum(col) | 합계 | SUM(amount) |
avg(col) | 평균 | AVG(price) |
min(col) / max(col) | 최소/최대 | MIN(temperature) |
uniq(col) | 근사 고유값 수 | uniq(user_id) |
uniqExact(col) | 정확한 고유값 수 | uniqExact(session_id) |
quantile(0.95)(col) | 분위수 | quantile(0.95)(latency) |
groupArray(col) | 그룹별 배열 수집 | groupArray(tag) |
argMax(col, val) | val 최대일 때의 col | argMax(name, score) |
문자열 함수
| 함수 | 설명 | 예시 |
|---|---|---|
lower(s) / upper(s) | 소/대문자 변환 | lower(name) |
trim(s) | 양쪽 공백 제거 | trim(input_str) |
substring(s, offset, len) | 부분 문자열 | substring(code, 1, 3) |
concat(s1, s2) | 문자열 연결 | concat(first, ' ', last) |
like(s, pattern) | 패턴 매칭 | WHERE name LIKE '%Seoul%' |
match(s, regexp) | 정규식 매칭 | WHERE match(url, '^/api/') |
splitByChar(sep, s) | 문자로 분할 | splitByChar(',', tags) |
replaceAll(s, from, to) | 문자열 치환 | replaceAll(text, '\n', ' ') |
배열 함수
| 함수 | 설명 | 예시 |
|---|---|---|
length(arr) | 배열 길이 | length(tags) |
arrayJoin(arr) | 배열 → 행 전개 | SELECT arrayJoin(items) |
has(arr, elem) | 포함 여부 | WHERE has(tags, 'urgent') |
arrayMap(f, arr) | 배열 매핑 | arrayMap(x -> x * 2, values) |
arrayFilter(f, arr) | 배열 필터 | arrayFilter(x -> x > 0, values) |
JSON 함수
| 함수 | 설명 | 예시 |
|---|---|---|
JSONExtractString(json, key) | 문자열 추출 | JSONExtractString(data, 'name') |
JSONExtractInt(json, key) | 정수 추출 | JSONExtractInt(data, 'count') |
JSONExtractFloat(json, key) | 실수 추출 | JSONExtractFloat(data, 'score') |
JSONExtractBool(json, key) | 불리언 추출 | JSONExtractBool(data, 'active') |
JSONExtractArrayRaw(json, key) | 배열 추출 | JSONExtractArrayRaw(data, 'items') |
성능 최적화 팁
D.Hub의 분석 엔진은 컬럼 지향 OLAP 데이터베이스로, 대량 데이터의 집계 쿼리에 최적화되어 있습니다.
- 필요한 컬럼만 SELECT:
SELECT *대신 필요한 컬럼을 명시하면 쿼리 성능이 크게 향상됩니다. - LIMIT 사용: 탐색 목적의 쿼리에는 항상
LIMIT을 추가하세요. - WHERE 절 활용: 필터 조건을 최대한 앞에 두어 불필요한 데이터 스캔을 줄이세요.
- 적절한 집계 함수 선택: 정확한 고유값이 불필요하면
uniqExact대신uniq를 사용하세요.