데이터 분석을 하려면 반드시 쿼리 언어를 알아야 할까? 아니다. 개발자가 아니어도 KQL(Kusto Query Language)과 SQL(Structured Query Language)의 기초 문법만 알면 원하는 정보만 딱 뽑아서 분석할 수 있다. 특히 Azure 환경에서 SAP, MSSQL 데이터를 다루는 Data Engineer나 BI Engineer는 이 두 쿼리 언어를 일상적으로 사용한다. 이 글에서는 초보자가 바로 따라 쓸 수 있는 KQL과 SQL의 기초 문법, 비교, 실무 활용법을 상세하게 설명한다.

KQL과 SQL이란 무엇인가?
SQL: 전통적인 관계형 데이터베이스 쿼리 언어
SQL 은 1970 년대부터 사용된 관계형 데이터베이스 관리 언어다. MSSQL, Oracle, MySQL, PostgreSQL 등 모든 관계형 DB 에서 사용한다. SQL 은 데이터를 조회, 삽입, 수정, 삭제할 수 있는 언어다.
주요 특징:
- 관계형 데이터(테이블) 관리에 최적화
- CRUD(Create, Read, Update, Delete) 모두 지원
- 여러 테이블 간의 JOIN 이 강력
- 학습 곡선이 다소 높음 (서브쿼리, 복잡한 JOIN 등)
KQL: Azure 환경의 실시간 분석 쿼리 언어
KQL 은 Microsoft 가 Azure 데이터 익스플로어, Azure Log Analytics, Application Insights 등에서 사용하는 쿼리 언어다. 이름은 Kusto Query Language 의 약자다. KQL 은 주로 로그, 원격 데이터, 시간 시리즈 같은 대규모 반구조화 데이터를 실시간으로 분석한다.
주요 특징:
- 데이터 흐름 모델 사용: 각 단계의 입력/출력이 테이블
- 읽기 전용: 데이터 수정 불가, 조회만 가능
- 시간 시리즈 분석, 로그 검색에 최적화
- 학습 곡선이 상대적으로 낮음, 직관적인 문법
- Azure 생태계와 네이티브 통합
KQL과 SQL의 핵심 차이 비교
아래 표는 두 쿼리 언어의 주요 차이를 한눈에 보기 쉽게 정리했다.
| 구분 | SQL | KQL |
| 용도 | 관계형 데이터베이스 관리 | 로그/텔리메트리 실시간 분석 |
| 데이터 수정 | 가능 (INSERT, UPDATE, DELETE) | 불가능 (읽기 전용) |
| 모델 | 테이블 기반 관계 모델 | 데이터 흐름 모델 |
| JOIN | 강력 (여러 테이블 연결) | 제한적 (주로 단일 테이블 내 연산) |
| 시간 시리즈 분석 | 기본 함수만 제공 | 내장 함수 풍부 (avg, sum over time 등) |
| 학습 난이도 | 높음 (서브쿼리, 복잡한 JOIN) | 낮음 (직관적, 단계별 연산) |
| Azure 통합 | 일반적 (MSSQL 등) | 네이티브 통합 |
| 반구조화 데이터 | 비최적 | 최적화 |
SQL 기초 문법: 바로 따라 쓰는 7 가지 핵심 클로즈
SQL 은 클로즈 단위로 문법이 구성된다. 초보자가 가장 자주 사용하는 7 가지 클로즈만 알면 80% 이상의 조회를 할 수 있다.
1. SELECT: 데이터 조회
SELECT col_name1, col_name2
FROM TABLE_NAME;
- col_name1, col_name2: 원하는 열(컬럼) 이름
- TABLE_NAME: 테이블 이름
- 모든 SQL 쿼리는 SELECT 로 시작한다
2. WHERE: 조건 필터링
SELECT col_name1, col_name2
FROM TABLE_NAME
WHERE age >= 18 AND status = 'active';
- AND: 모든 조건이 참일 때만 반환
- OR: 조건 중 하나라도 참일 때 반환
- 비교 연산자: =, >, <, >=, <=, <>
3. ORDER BY: 정렬
SELECT col_name1, col_name2
FROM TABLE_NAME
ORDER BY col_name1 DESC;
- ASC: 오름차순 (기본값)
- DESC: 내림차순
- ORDER BY 는 반드시 SELECT 문의 마지막에 위치
4. GROUP BY: 집계 그룹화
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;
- COUNT(), SUM(), AVG(), MAX(), MIN() 등 집계 함수 사용
- GROUP BY 기준 컬럼을 여러 개 지정 가능
5. JOIN: 여러 테이블 연결
SELECT e.name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;
- INNER JOIN: 두 테이블의 교집합만 반환
- LEFT JOIN: 왼쪽 테이블 모든 행 + 오른쪽 일치하는 행
- RIGHT JOIN, FULL JOIN 도 존재
6. CASE WHEN: 조건문
SELECT name,
CASE
WHEN age >= 18 THEN 'adult'
ELSE 'minor'
END AS age_group
FROM users;
- 특정 조건에 따라 값을 반환
7. LIKE: 문자열 패턴 매칭
SELECT name
FROM users
WHERE name LIKE 'John%';
- %: 0 개 이상의 임의 문자
- _: 정확히 1 개의 임의 문자
KQL 기초 문법: 단계별 연산 6 가지
KQL 은 SQL 과 문법이 다르다. KQL 은 단계별 연산으로 데이터를 처리한다. 각 단계의 출력은 다음 단계의 입력으로 들어간다.
1. 필터링: where
Sales
| where Amount > 1000
| where Region == 'Korea'
- where: 행 필터링 (SQL 의 WHERE 와 유사)
- ==: 비교 연산자 (SQL 의 = 대신 사용)
2. 열 선택: project
Sales
| where Amount > 1000
| project OrderID, Amount, Region
- project: 지정된 컬럼만 반환 (SQL 의 SELECT 와 유사)
3. 정렬: order by
Sales
| where Amount > 1000
| order by Amount desc
- order by: 결과 정렬 (SQL 의 ORDER BY 와 동일)
4. 집계: summarize
Sales
| where Amount > 1000
| summarize TotalAmount = sum(Amount), Count = count() by Region
- summarize: by 표현식 다음에 동일한 값으로 그룹화
- sum(), avg(), count(), min(), max() 등 집계 함수 사용
5. 개수 계산: count
Sales
| where Amount > 1000
| count
- count: 행 개수 반환 (SQL 의 COUNT(*) 와 유사)
6. 제한: take
Sales
| where Amount > 1000
| take 10
- take: 지정된 행 수만 반환 (기본값 5)
실무 활용 예시: Azure 환경에서 SAP/MSSQL 데이터 분석
상황 1: SAP 판매 데이터에서 상위 10 건 조회
Azure 데이터 익스플로어에서 SAP 판매 테이블을 조회하는 KQL 예시:
SAP_Sales
| where SaleDate >= '2025-01-01'
| where Amount > 5000
| project SaleID, CustomerName, Amount, SaleDate
| order by Amount desc
| take 10
- SAP_Sales: SAP 판매 테이블 이름
- SaleDate >= '2025-01-01': 2025 년 이후 데이터만 필터
- project: 필요한 열만 선택
- order by Amount desc: 금액 내림차순 정렬
- take 10: 상위 10 건만 반환
상황 2: MSSQL 직원 데이터에서 부서별 평균 연령 계산
MSSQL 에서 SQL 로 부서별 평균 연령을 계산:
SELECT department, AVG(age) AS avg_age, COUNT(*) AS employee_count
FROM employees
WHERE status = 'active'
GROUP BY department
ORDER BY avg_age DESC;
- AVG(age): 부서별 평균 연령
- COUNT(*): 부서별 직원 수
- GROUP BY department: 부서로 그룹화
- ORDER BY avg_age DESC: 평균 연령 내림차순
상황 3: Azure Log Analytics 에서 오류 로그 검색
KQL로 로그에서 오류만 필터링:
AzureLog
| where Level == 'Error'
| where TimeGenerated >= ago(1h)
| project Timestamp = TimeGenerated, Message, Computer
| order by Timestamp desc
| take 50
- Level == 'Error': 오류 로그만 필터
- ago(1h): 최근 1 시간 이내 데이터
- project: 열 이름 재정의 (Timestamp = TimeGenerated)
- take 50: 최근 50 건 반환
초보자가 자주 하는 오류와 해결법
오류 1: SQL 에서 WHERE 앞에 COMMA 넣기
-- 잘못된 예
SELECT col1, col2,
FROM table;
-- 올바른 예
SELECT col1, col2
FROM table;
- SELECT 마지막 열 뒤에 COMMA 넣으면 에러
오류 2: KQL 에서 비교 연산자 = 대신 == 사용
-- 잘못된 예
Sales | where Amount = 1000
-- 올바른 예
Sales | where Amount == 1000
- KQL은 == 사용 (SQL 의 = 대신)
오류 3: SQL 에서 GROUP BY 누락
-- 잘못된 예
SELECT department, COUNT(*)
FROM employees;
-- 올바른 예
SELECT department, COUNT(*)
FROM employees
GROUP BY department;
- 집계 함수 사용 시 GROUP BY 필수
오류 4: KQL 에서 파이프(|) 위치 오류
-- 잘못된 예
Sales | where Amount > 1000 project OrderID
-- 올바른 예
Sales
| where Amount > 1000
| project OrderID
- 각 연산은 새 줄에 파이프 시작
KQL과 SQL 언제 쓸까?
| 상황 | 추천 언어 | 이유 |
| MSSQL, Oracle 등 관계형 DB 조회 | SQL | CRUD 전체 지원, JOIN 강력 |
| Azure 로그/텔리메트리 실시간 분석 | KQL | 시간 시리즈 분석 최적화, 내장 함수 풍부 |
| SAP 데이터 적재 후 분석 | SQL → KQL | 적재는 SQL, 실시간 분석은 KQL |
| Power BI 데이터 소스 연결 | SQL | Power BI 는 MSSQL/Oracle 등 RDBMS 와 네이티브 통합 |
| Azure Data Explorer에서 대규모 로그 쿼리 | KQL | 네이티브 통합, 성능 최적화 |
Azure 환경에서는 SQL로 원천 데이터(SAP, MSSQL) 를 적재하고, KQL로 실시간 분석하는 패턴이 흔다.
Power BI와 쿼리 언어 연동
Power BI 는 SQL 과 KQL 모두 지원한다.
Power BI 에서 SQL 사용
- Power BI Desktop 실행
- Get Data → SQL Server Database 선택
- 서버 이름, 테이블 입력
- Advanced options에서 SQL 쿼리 직접 작성:
SELECT department, AVG(salary) AS avg_salary
FROM employees
WHERE status = 'active'
GROUP BY department
Power BI 에서 KQL 사용
- Get Data → Azure Data Explorer 선택
- KQL 쿼리 입력:
Sales
| where Amount > 1000
| summarize Total = sum(Amount) by Region
| order by Total desc
- Power BI 대시보드에서 시각화
학습 로드맵: 초보자가 1 주일에 끝내는 쿼리 언어 마스터
1 일차: SQL 기초 문법
- SELECT, WHERE, ORDER BY 연습
- 작은 테이블로 직접 쿼리 작성
2 일차: SQL 집계와 GROUP BY
- COUNT(), SUM(), AVG() 사용
- GROUP BY로 부서별/지역별 집계
3 일차: SQL JOIN 기초
- INNER JOIN, LEFT JOIN 연습
- 두 테이블 연결해서 조회
4 일차: KQL 기초 문법
- where, project, order by 연습
- 파이프(|) 로 단계 연결
5 일차: KQL 집계와 summarize
- summarize + by로 그룹화
- count, sum, avg 사용
6 일차: 실제 데이터로 연습
- Azure Log Analytics에서 로그 조회
- MSSQL에서 직원 데이터 집계
7 일차: Power BI 연동
- SQL/KQL 쿼리로 Power BI 보고서 개발
- 대시보드 시각화
개발자 아니어도 쿼리 언어로 데이터 뽑아내기
KQL과 SQL은 각각 다른 목적을 가진 쿼리 언어다. SQL은 관계형 데이터베이스 관리에, KQL은 Azure 환경의 실시간 로그/텔리메트리 분석에 최적화다. 개발자가 아니어도 기초 문법만 알면 원하는 정보만 딱 뽑아서 분석할 수 있다.
핵심 요약:
- SQL: SELECT, WHERE, GROUP BY, JOIN, ORDER BY 5 가지 클로즈만 알면 80% 조회 가능
- KQL: where, project, order by, summarize, count, take 6 가지 연산만 알면 기본 분석 완료
- Azure 환경: SQL로 원천 데이터 적재, KQL로 실시간 분석
- Power BI: SQL 과 KQL 모두 지원, 보고서 개발에 활용
이 글에서 설명한 기초 문법만 따라 하면 SAP, MSSQL 데이터를 적재하고 모델링해서 Power BI로 보고서를 개발하는 Data Engineer, BI Engineer의 일상 업무를 바로 시작할 수 있다.
놓치면 아쉬운 추천 글, 함께 읽어보세요!
- 추천 글을 불러오는 중입니다...