# SQL Console: Запросы к наборам данных Hugging Face в вашем браузере

Вы можете выполнять SQL-запросы к набору данных в браузере с помощью SQL Console. SQL Console работает на базе [DuckDB](https://duckdb.org/) WASM и полностью функционирует в браузере. Доступ к SQL Console можно получить из Data Studio.

    
    

    Чтобы узнать больше о SQL Console, см. статью в блоге SQL Console.

С помощью SQL-консоли вы можете:

- Выполняйте [запросы 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]
> Вы также можете использовать DuckDB локально через CLI для запросов к набору данных по протоколу `hf://`. Подробнее см. в документации DuckDB Datasets. SQL Console предоставляет удобную кнопку `Copy to DuckDB CLI`, которая генерирует SQL-запрос для создания представлений и выполнения вашего запроса в DuckDB CLI. Альтернативно, выполните те же запросы из терминала или скрипта с помощью [`hf datasets sql`](/docs/huggingface_hub/package_reference/cli#hf-datasets-sql).

## Примеры

### Фильтрация

SQL Console делает фильтрацию наборов данных очень простой. Например, если вы хотите отфильтровать набор данных `SkunkworksAI/reasoning-0.01` по инструкциям и ответам с длиной рассуждения не менее 10, вы можете использовать следующий запрос:

    
    

Вот SQL-запрос для сортировки по длине рассуждения
```sql
SELECT *
FROM train
WHERE LENGTH(reasoning_chains) > 10;
```

### Гистограмма

Многие авторы наборов данных включают в них статистику о распределении данных. С помощью функции `histogram` в DuckDB можно построить гистограмму значений столбца.

Например, чтобы построить гистограмму столбца `Rating` в наборе данных [Lichess/chess-puzzles](https://huggingface.co/datasets/Lichess/chess-puzzles), можно использовать следующий запрос:

    
    

    Подробнее о функции `histogram` и её параметрах можно узнать здесь.

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

### Сопоставление регулярных выражений

Одной из самых мощных возможностей DuckDB является глубокая поддержка регулярных выражений. Вы можете использовать функцию `regexp` для сопоставления шаблонов в ваших данных.

 С помощью функции [regexp_matches](https://duckdb.org/docs/sql/functions/char.html#regexp_matchesstring-pattern) можно отфильтровать датасет [GeneralReasoning/GeneralThought-195k](https://huggingface.co/datasets/GeneralReasoning/GeneralThought-195K), выбрав инструкции, содержащие блоки кода в формате Markdown.

 
    
    

    Подробнее о функциях регулярных выражений 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
}
```

**Удалить embed:**
```
DELETE /api/datasets/{namespace}/{repo}/sql-console/embed/{embed_id}
Authorization: Bearer {token}
```

### Обнаружение утечек

Обнаружение утечки данных — это процесс определения того, присутствуют ли данные из набора данных в нескольких разбиениях, например, содержится ли тестовый набор в обучающем.

<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;
```

