---
title: SQL만 하던 사람의 첫 Fabric Notebook: spark.sql부터 시작하세요
description: PySpark를 몰라도 Notebook에서 %%sql과 spark.sql()로 Lakehouse 테이블을 바로 조회할 수 있어요. DataFrame이 결과 집합과 어떻게 다른지부터 정리했어요.
date: 2026-09-24
  tags: [Notebook, PySpark, Spark SQL, 입문, Fabric]
cards:
  - /cards/fabric-notebook-first-steps-for-sql-users/card-01.png
  - /cards/fabric-notebook-first-steps-for-sql-users/card-02.png
  - /cards/fabric-notebook-first-steps-for-sql-users/card-03.png
  - /cards/fabric-notebook-first-steps-for-sql-users/card-04.png
  - /cards/fabric-notebook-first-steps-for-sql-users/card-05.png
  - /cards/fabric-notebook-first-steps-for-sql-users/card-06.png
  - /cards/fabric-notebook-first-steps-for-sql-users/card-07.png
author: Lissa
source: https://interlinear.work/notes/fabric-notebook-first-steps-for-sql-users/
---

> **원문:** [Develop, execute, and manage notebooks](https://learn.microsoft.com/en-us/fabric/data-engineering/author-execute-notebook)
> **게시일:** 2026-08-07

Fabric에서 Lakehouse 테이블을 좀 더 자유롭게 조회하고 싶어서 Notebook을 처음 열어보면, 셀 위쪽에 "PySpark (Python)"이라고 적힌 언어 선택 드롭다운부터 보여요. 여기서 겁먹을 필요 없어요. PySpark를 몰라도, SQL만 알아도 오늘부터 바로 쓸 수 있어요. 시작점은 익숙한 그 언어, SQL이에요.

## Notebook은 여러 언어를 섞어 쓰는 곳이에요

Fabric Notebook은 PySpark(Python), Spark(Scala), Spark SQL, SparkR 네 가지 Apache Spark 언어를 지원해요. 노트북 하나의 기본 언어를 정해둘 수도 있지만, 셀마다 맨 앞에 **매직 커맨드**를 적어서 그 셀만 다른 언어로 바꿀 수도 있어요.

| 매직 커맨드 | 언어 | 설명 |
| --- | --- | --- |
| `%%pyspark` | Python | Apache Spark Context에 대해 Python 쿼리를 실행해요 |
| `%%spark` | Scala | Apache Spark Context에 대해 Scala 쿼리를 실행해요 |
| `%%sql` | Spark SQL | Apache Spark Context에 대해 Spark SQL 쿼리를 실행해요 |
| `%%sparkr` | R | Apache Spark Context에 대해 R 쿼리를 실행해요 |

즉 `%%sql`을 셀 맨 위에 적으면, 그 순간 그 셀은 SQL 셀이 돼요. 기본 언어가 PySpark로 잡혀 있어도 상관없어요.

```sql
%%sql
SELECT CustomerId, COUNT(*) AS OrderCount
FROM orders
GROUP BY CustomerId
ORDER BY OrderCount DESC
```

이 방식의 장점은 노트북 전체를 PySpark로 바꿀 필요 없이, 조회는 익숙한 SQL로 하고 그 결과를 뒤에 이어지는 Python 셀에서 계속 다룰 수 있다는 거예요.

## spark.sql()도 결국 같은 SQL이에요

`%%sql` 매직이 셀 전체를 SQL 모드로 바꾸는 것이라면, `spark.sql()`은 Python 코드 한 줄 안에서 SQL 문자열을 그대로 실행하는 방법이에요.

```python
df = spark.sql("SELECT CustomerId, COUNT(*) AS OrderCount FROM orders GROUP BY CustomerId")
```

두 방식 모두 Spark SQL 엔진을 그대로 쓰기 때문에 실행되는 쿼리 자체는 같아요. 차이는 결과를 어떻게 다루느냐예요. `%%sql` 매직은 그 셀 안에서 결과를 바로 보여주는 데 초점이 맞고, `spark.sql()`은 결과를 변수(`df`)에 담아서 이후 Python 코드에서 계속 가공할 수 있게 해줘요. SQL로 시작해서 이후 단계를 Python으로 넘어가야 한다면 `spark.sql()` 쪽이 자연스러워요.

## DataFrame은 결과 집합과 뭐가 다른가

SSMS나 Power BI에서 SQL을 실행하면 결과가 바로 화면에 뿌려지는 표(결과 집합)로 나와요. 반면 `spark.sql()`이 돌려주는 건 **DataFrame**이에요. DataFrame은 그 자체로는 아직 "화면에 뿌려진 표"가 아니라, 데이터를 어떻게 읽고 계산할지에 대한 정의예요. Spark는 실제로 결과가 필요해지는 시점(출력하거나, 다른 테이블에 쓰거나 할 때)에야 그 계산을 실제로 돌려요.

그래서 `spark.sql(...)`만 실행하고 아무것도 안 하면 화면에 아무것도 안 보여요. 결과를 눈으로 확인하려면 한 단계가 더 필요해요.

## display()로 결과를 확인하세요

Fabric Notebook에는 `display()`라는 최상위 함수가 있어요. DataFrame이든 다른 Python 객체든 `display()`에 넘기면 노트북 출력 영역에 표 형태로 렌더링돼요.

```python
df = spark.sql("SELECT CustomerId, COUNT(*) AS OrderCount FROM orders GROUP BY CustomerId")
display(df)
```

SSMS에서 쿼리를 실행하면 결과 그리드가 바로 뜨는 것과 감각적으로 비슷해요. 차이라면 `display()`는 명시적으로 호출해야 한다는 점, 그리고 결과 화면에서 바로 차트로 바꿔볼 수 있다는 점 정도예요.

## toPandas()는 언제 쓰나

DataFrame은 Spark 클러스터 위에서 분산 처리되는 걸 전제로 만들어졌어요. 그런데 matplotlib 같은 일반 Python 시각화 라이브러리나, pandas 기반의 세세한 데이터 조작은 Spark DataFrame을 직접 받아주지 않아요. 이럴 때 `toPandas()`로 Spark DataFrame을 Pandas DataFrame으로 바꿔요.

```python
df_pandas = df.toPandas()
```

다만 `toPandas()`는 분산돼 있던 데이터를 노트북 세션(드라이버) 메모리로 전부 끌어모으는 동작이에요. 조회 결과가 수십만 행을 넘어가는 대용량이라면, `toPandas()`로 바꾸기 전에 `GROUP BY`나 `LIMIT`으로 먼저 데이터를 줄여두는 게 안전해요. "SQL로 웬만큼 추려낸 다음, 마지막에만 Pandas로 넘긴다"는 순서를 기본값으로 삼으면 돼요.

## 정리

Fabric Notebook의 언어 선택 드롭다운을 PySpark로 바꿀 필요는 없어요. `%%sql` 매직이나 `spark.sql()`로 익숙한 SQL을 그대로 쓰면 돼요. 다만 결과가 SSMS처럼 자동으로 화면에 뜨지 않는다는 점, DataFrame은 실제로 쓰일 때까지 계산을 미룬다는 점만 새로 익히면 돼요. 화면에서 확인하려면 `display()`, 일반 Python 시각화 라이브러리로 넘기려면 `toPandas()`, 이 두 가지만 기억해두면 SQL 경험만으로도 Notebook 조회는 바로 시작할 수 있어요.