# SQL Console: 브라우저에서 Hugging Face 데이터셋 쿼리

SQL Console를 사용하면 브라우저에서 데이터셋에 대해 SQL 쿼리를 실행할 수 있습니다. SQL Console은 [DuckDB](https://duckdb.org/) WASM 기반으로 동작하며, 완전히 브라우저 내에서 실행됩니다. Data Studio에서 SQL Console에 접근할 수 있습니다.

    
    

    SQL Console에 대해 자세히 알아보려면 SQL Console 블로그 게시물을 참조하세요.

SQL Console를 통해 다음을 수행할 수 있습니다:

- 데이터셋에서 [DuckDB SQL 쿼리](https://duckdb.org/docs/sql/query_syntax/select)를 실행합니다 (_유용한 쿼리는 [SQL Snippets](https://huggingface.co/spaces/cfahlgren1/sql-snippets)를 확인하세요_)
- 링크를 통해 쿼리 결과를 다른 사람과 공유하세요 (_[이 예시](https://huggingface.co/datasets/gretelai/synthetic-gsm8k-reflection-405b?sql_console=true&sql=FROM+histogram%28%0A++train%2C%0A++topic%2C%0A++bin_count+%3A%3D+10%0A%29)를 확인해 보세요_)
- 쿼리 결과를 Parquet 또는 CSV 파일로 다운로드
- iframe를 사용하여 쿼리 결과를 자체 웹페이지에 임베드합니다
- 자연어로 데이터셋 쿼리하기

> [!TIP]
> `hf://` 프로토콜을 통해 DuckDB CLI를 로컬에서 사용하여 데이터셋을 쿼리할 수도 있습니다. 자세한 내용은 DuckDB Datasets 문서를 참조하세요. SQL Console은 DuckDB CLI에서 뷰를 생성하고 쿼리를 실행하기 위한 SQL 쿼리를 생성하는 편리한 `Copy to DuckDB CLI` 버튼을 제공합니다. 또는 [`hf datasets sql`](/docs/huggingface_hub/package_reference/cli#hf-datasets-sql)를 사용하여 터미널이나 스크립트에서 동일한 쿼리를 실행할 수 있습니다.

## 예시

### 필터링

SQL Console을 사용하면 데이터셋을 필터링하는 것이 매우 쉽습니다. 예를 들어, `SkunkworksAI/reasoning-0.01` 데이터셋에서 추론 길이가 10 이상인 instructions와 responses를 필터링하려면 다음 쿼리를 사용할 수 있습니다:

    
    

추론 길이에 따라 정렬하는 SQL입니다
```sql
SELECT *
FROM train
WHERE LENGTH(reasoning_chains) > 10;
```

### 히스토그램

많은 데이터셋 작성자는 데이터셋에 데이터 분포에 대한 통계를 포함하는 것을 선택합니다. DuckDB의 `histogram` 함수를 사용하면 열의 값에 대한 히스토그램을 그릴 수 있습니다.

예를 들어, [Lichess/chess-puzzles](https://huggingface.co/datasets/Lichess/chess-puzzles) 데이터셋의 `Rating` 열 히스토그램을 그리려면 다음 쿼리를 사용할 수 있습니다:

    
    

    `histogram` 함수와 매개변수에 대한 자세한 내용은 여기를 참조하세요.

```sql
from histogram(train, Rating)
```

### 정규식 매칭

DuckDB의 가장 강력한 기능 중 하나는 정규식(regular expression)에 대한 심층적인 지원입니다. `regexp` 함수를 사용하여 데이터에서 패턴을 일치시킬 수 있습니다.

 [regexp_matches](https://duckdb.org/docs/sql/functions/char.html#regexp_matchesstring-pattern) 함수를 사용하면 마크다운 코드 블록을 포함하는 지시문을 필터링하여 [GeneralReasoning/GeneralThought-195k](https://huggingface.co/datasets/GeneralReasoning/GeneralThought-195K) 데이터셋을 필터링할 수 있습니다.

 
    
    

    DuckDB 정규식 함수에 대한 자세한 내용은 여기에서 확인하세요.

```sql
SELECT *
FROM train
WHERE regexp_matches(model_answer, '```')
LIMIT 10;
```

### 저장된 쿼리 및 임베드 API

SQL Console 임베드를 프로그래매틱으로 생성, 업데이트 및 삭제할 수 있습니다. 임베드는 링크를 통해 공유하거나 다른 페이지에 삽입할 수 있는 저장된 쿼리입니다.

**임베드 생성:**
```
POST /api/datasets/{namespace}/{repo}/sql-console/embed
Content-Type: application/json
Authorization: Bearer {token}

{
  "sql": "SELECT * FROM train LIMIT 10",
  "title": "Sample rows",
  "private": false,
  "views": [{"key": "default/train", "displayName": "Train", "viewName": "train"}]
}
```

**임베드 업데이트:**
```
PATCH /api/datasets/{namespace}/{repo}/sql-console/embed/{embed_id}
Content-Type: application/json
Authorization: Bearer {token}

{
  "sql": "SELECT * FROM train LIMIT 20",
  "title": "Updated title",
  "private": true
}
```

**임베드 삭제:**
```
DELETE /api/datasets/{namespace}/{repo}/sql-console/embed/{embed_id}
Authorization: Bearer {token}
```

### 누수 감지

Leakage detection은 데이터셋의 데이터가 여러 split에 존재하는지, 예를 들어 test set이 training set에 포함되어 있는지 여부를 식별하는 과정입니다.

<div class="flex justify-center">
    <img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/hub/datastudio-leakage.png"/>
    <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/hub/datastudio-leakage-dark.png"/>
</div>

<p class="text-sm text-center italic"> 누출 감지에 대해 자세히 알아보세요. <a href="https://huggingface.co/blog/lbourdois/lle">여기</a>. </p>

```sql
WITH
    overlapping_rows AS (
        SELECT COALESCE(
            (SELECT COUNT(*) AS overlap_count
             FROM train
             INTERSECT
             SELECT COUNT(*) AS overlap_count
             FROM test),
            0
        ) AS overlap_count
    ),
    total_unique_rows AS (
        SELECT COUNT(*) AS total_count
        FROM (
            SELECT * FROM train
            UNION
            SELECT * FROM test
        ) combined
    )
SELECT
    overlap_count,
    total_count,
    CASE 
        WHEN total_count > 0 THEN (overlap_count * 100.0 / total_count)
        ELSE 0
    END AS overlap_percentage
FROM overlapping_rows, total_unique_rows;
```

