본문으로 건너뛰기
버전: v0.1.0

SQL 가이드

D.Hub는 분석 데이터베이스로 ClickHouse를 사용합니다. 파이프라인의 SQL 노드, 데이터셋 탐색, 대시보드 위젯에서 ClickHouse SQL 문법을 사용할 수 있습니다.

SQL 사용 위치

위치설명제한
파이프라인 SQL 노드코드 노드에서 SQL 쿼리로 데이터 변환SELECT 문만 허용
데이터셋 탐색데이터 탭에서 직접 쿼리 실행SELECT 문만 허용
대시보드 위젯Query 모드에서 차트 데이터 조회SELECT 문만 허용

기본 SQL 문법

SELECT와 필터링

SELECT id, name, category, price
FROM products
WHERE category = 'electronics'
AND price > 10000
ORDER BY price DESC
LIMIT 100

GROUP BY 집계

SELECT
region,
COUNT(*) AS total_count,
SUM(amount) AS total_amount,
AVG(amount) AS avg_amount
FROM transactions
GROUP BY region
HAVING total_amount > 1000000
ORDER BY total_amount DESC

JOIN

SELECT
o.order_id,
o.order_date,
c.name AS customer_name,
o.total_price
FROM orders AS o
LEFT JOIN customers AS c ON o.customer_id = c.id
WHERE o.order_date >= '2026-01-01'

서브쿼리

SELECT *
FROM sensors
WHERE station_id IN (
SELECT id
FROM stations
WHERE region = 'Seoul'
)

파이프라인에서 SQL 사용

파이프라인의 SQL 노드에서는 이전 노드로부터 전달된 데이터를 테이블처럼 조회할 수 있습니다.

  • 테이블 이름: 입력 연결에 설정한 별칭(alias)을 테이블 이름으로 사용
  • 결과 전달: SELECT 쿼리 결과가 다음 노드의 입력으로 전달
SELECT
id,
name,
created_at
FROM input
WHERE status = 'active'
ORDER BY created_at DESC

대시보드에서 SQL 사용

대시보드 위젯의 Query 모드에서 SQL을 직접 입력하여 차트 데이터를 조회합니다.

SELECT
toStartOfMonth(event_date) AS month,
COUNT(*) AS event_count
FROM events
GROUP BY month
ORDER BY month
Simple 모드

SQL에 익숙하지 않다면 대시보드의 Simple 모드에서 드래그 앤 드롭으로 차트를 구성할 수 있습니다.


유용한 ClickHouse 함수

날짜/시간 함수

함수설명예시
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 최대일 때의 colargMax(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')

공식 레퍼런스


성능 최적화 팁

ClickHouse 특성

ClickHouse는 컬럼 지향 OLAP 데이터베이스로, 대량 데이터의 집계 쿼리에 최적화되어 있습니다.

  • 필요한 컬럼만 SELECT: SELECT * 대신 필요한 컬럼을 명시하면 쿼리 성능이 크게 향상됩니다.
  • LIMIT 사용: 탐색 목적의 쿼리에는 항상 LIMIT을 추가하세요.
  • WHERE 절 활용: 필터 조건을 최대한 앞에 두어 불필요한 데이터 스캔을 줄이세요.
  • 적절한 집계 함수 선택: 정확한 고유값이 불필요하면 uniqExact 대신 uniq를 사용하세요.