본문으로 건너뛰기

SQL 참조

D.Hub의 SQL 실행 엔진은 화면에 따라 다릅니다. 파이프라인 SQL 노드는 Polars SQLContext에서 실행되고, 데이터셋 탐색과 대시보드 위젯은 ClickHouse에서 실행됩니다. 공통 SQL 문법이 있더라도 지원 함수와 세부 문법은 같지 않습니다.

사용 위치별 입력 테이블

위치실행 엔진입력 테이블결과
파이프라인 SQL 노드Polars SQL노드 옵션 탭에 설정한 입력 키다음 노드로 전달되는 쿼리 결과
데이터셋 데이터ClickHouse SQL현재 데이터셋의 실제 테이블 이름미리보기 표에 표시되는 쿼리 결과
대시보드 위젯 SQL 모드ClickHouse SQL선택한 데이터 소스의 database.table위젯에 전달되는 쿼리 결과

세 화면 모두 데이터를 조회하는 SELECT 문을 사용합니다. 파이프라인의 새 연결에 input이 기본 키로 제안될 수 있지만 고정 이름은 아닙니다. 옵션 탭에서 키를 바꾸면 쿼리의 테이블 이름도 바꿉니다.

SQL 변환 노드

파이프라인 내에서 데이터를 필터링하거나 집계할 때 사용합니다. 쿼리는 Polars SQLContext에서 실행되므로 Polars SQL 문법과 함수를 기준으로 작성합니다.

예제

-- 입력 데이터에서 'status'가 'active'인 항목만 필터링
SELECT
id,
name,
created_at
FROM
input
WHERE
status = 'active'

데이터셋 탐색

데이터셋 상세 페이지의 데이터 탭에서 쿼리를 실행해 데이터를 확인합니다.

  • 제약 사항: SELECT 쿼리만 허용됩니다.
  • 테이블: 현재 데이터셋의 테이블 이름을 써야 합니다.
SELECT * FROM my_dataset_table LIMIT 100

대시보드에서 SQL 사용하기

대시보드 위젯의 SQL 모드에서는 선택한 데이터 소스의 database.table을 조회합니다. 위젯이 표시할 필드 이름과 데이터 형식에 맞춰 결과 컬럼을 구성합니다.

SELECT
toStartOfMonth(event_date) AS month,
count() AS event_count
FROM analytics.events
GROUP BY month
ORDER BY month

SQL을 직접 작성하지 않으려면 위젯의 간단 모드에서 데이터 소스와 필드를 선택합니다.

ClickHouse SQL 함수

데이터셋 탐색과 대시보드 SQL 모드에서 자주 쓰는 ClickHouse 함수입니다. 파이프라인 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 최대일 때의 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 SQL 참조에서 확인합니다. D.Hub의 데이터셋 탐색과 대시보드에서 사용할 때는 위의 입력 테이블과 SELECT 제한을 함께 적용합니다.

조회 범위 줄이기

  • 필요한 컬럼만 SELECT: SELECT * 대신 필요한 컬럼만 명시합니다.
  • LIMIT 사용: 탐색용 쿼리에는 LIMIT을 지정합니다.
  • WHERE 절 활용: 조회 범위를 줄이는 필터 조건을 지정합니다.
  • 적절한 집계 함수 선택: ClickHouse에서 정확한 고유값이 필요 없다면 uniqExact 대신 uniq를 사용합니다.