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 최대일 때의 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') |
전체 문법과 함수는 ClickHouse SQL 참조에서 확인합니다. D.Hub의 데이터셋 탐색과 대시보드에서 사용할 때는 위의 입력 테이블과 SELECT 제한을 함께 적용합니다.
조회 범위 줄이기
- 필요한 컬럼만 SELECT:
SELECT *대신 필요한 컬럼만 명시합니다. - LIMIT 사용: 탐색용 쿼리에는
LIMIT을 지정합니다. - WHERE 절 활용: 조회 범위를 줄이는 필터 조건을 지정합니다.
- 적절한 집계 함수 선택: ClickHouse에서 정확한 고유값이 필요 없다면
uniqExact대신uniq를 사용합니다.