[Документация Yandex Cloud](../../index.md) > [Yandex Query](../index.md) > Источники и приемники данных > Работа с Yandex Object Storage > Чтение данных с помощью соединений

# Чтение данных из Object Storage с помощью соединений с Query

При работе с Yandex Object Storage с помощью соединений удобно выполнять прототипирование, первоначальную настройку подключений к данным.

Пример запроса для чтения данных:

```sql
SELECT
    *
FROM
    object_storage.`*.tsv`
WITH
(
    format=tsv_with_names,
    SCHEMA
    (
        `timestamp` Uint32,
        action String 
    )
);
```

## Настройка соединения {#create_connection}

Чтобы создать соединение с Object Storage:

1. В [консоли управления](https://console.yandex.cloud) выберите каталог, в котором нужно создать соединение.
1. Перейдите в сервис **Yandex Query**.
1. На панели слева перейдите на вкладку **Соединения**.
1. Нажмите кнопку ![info](../../_assets/console-icons/plus.svg) **Создать**.
1. Укажите параметры соединения:

   1. В блоке **Общие параметры**:

      * **Имя** — название соединения с Object Storage.
      * **Тип** — `Object Storage`.
  
   1. В блоке **Параметры типа соединения**:

      * **Аутентификация бакета** — выберите `Публичный` или `Приватный` в зависимости от типа доступа к чтению объектов в бакете.

        Для публичного бакета введите имя в поле **Бакет**.
        Для приватного бакета выберите:
        * **Облако и каталог**, в котором находится источник данных.
        * Выберите или создайте новый бакет.
        * Выберите или создайте новый [сервисный аккаунт](../../iam/concepts/users/service-accounts.md) с ролью [`storage.viewer`](../../storage/security/index.md#storage-viewer), от имени которого будет выполняться доступ к данным.

          Чтобы использовать сервисный аккаунт, пользователю нужна [роль](../../iam/security/index.md#iam-serviceAccounts-user) `iam.serviceAccounts.user`.

1. Нажмите кнопку **Создать**.

## Модель данных {#data_model}

В Object Storage данные хранятся в файлах в бинарном виде. Для чтения данных используйте SQL-выражение:

```sql
SELECT
    <выражение>
FROM
    <соединение>.<путь>
WITH(
    FORMAT = "<формат_данных>",
    COMPRESSION = "<формат_сжатия>",
    SCHEMA = (<описание схемы>))
WHERE
    <фильтр>;
```

Где:

* `<соединение>` — название [соединения](#create_connection) с хранилищем.
* `<путь>` — путь к файлу или файлам внутри бакета. Поддерживаются wildcards `*`.
* `<формат_данных>` — [формат данных](formats.md#formats) в файлах.
* `<формат_сжатия>` — [формат сжатия](formats.md#compression_formats) файлов.
* `<описание схемы>` — [описание схемы хранимых данных](#schema) в файлах.

### Описание схемы данных {#schema}

Описание схемы данных состоит из набора полей:

- Названия поля.
- Типа поля.
- Признака обязательности данных.

Например, схема данных ниже описывает поле схемы с названием `Year` типа `Int32` и требованием наличия этого поля в данных:

```text
Year Int32 NOT NULL
```

Если поле данных помечено как обязательное, `NOT NULL`, но это поле отсутствует в обрабатываемом файле, то работа с таким файлом будет завершена с ошибкой. Если поле помечено как необязательное, `NULL`, то при отсутствии поля в обрабатываемом файле не будет возникать ошибки, но поле при этом примет значение `NULL`. Ключевое слово `NULL` в необязательных полях опционально.

### Автоматический вывод схемы данных {#inferring}

Автоматический вывод схемы доступен для всех [форматов данных](formats.md#formats), кроме `raw` и `json_as_string`. Он удобен в том случае, когда схема содержит большое количество полей. Для того, чтобы не вводить эти поля вручную, используйте параметр `WITH_INFER`:

```sql
SELECT
    <выражение>
FROM
    <соединение>.<путь>
WITH(
    FORMAT = "<формат_данных>",
    COMPRESSION = "<формат_сжатия>",
    WITH_INFER="true")
WHERE
    <фильтр>;
```

Где:

* `<соединение>` — название [соединения](#create_connection) с хранилищем.
* `<путь>` — путь к файлу или файлам внутри бакета. Поддерживаются wildcards `*`.
* `<формат_данных>` — [формат данных](formats.md#formats) в файлах.
* `<формат_сжатия>` — [формат сжатия](formats.md#compression_formats) файлов.


В результате выполнения такого запроса будут автоматически выведены названия и типы полей.

### Форматы путей к данным {#path_format}

В Yandex Query поддерживаются следующие пути к данным:

|Формат пути|Описание|Пример|
|----|----|---|
|Путь завершается символом `/`|Путь к каталогу|Путь `/a` адресует все содержимое каталога:<br>`/a/b/c/d/1.txt`<br>`/a/b/2.csv`|
|Путь содержит символ макроподстановки `*`|Любые файлы, вложенные в путь|Путь `/a/*.csv` адресует файлы в каталогах:<br>`/a/b/c/1.csv`<br>`/a/2.csv`<br>`/a/b/c/d/e/f/g/2.csv`|
|Путь не завершается символом `/` и не содержит символов макроподстановок|Путь к отдельному файлу|Путь `/a/b.csv` адресует конкретный файл `/a/b.csv`|

## Пример чтения данных c помощью соединений {#read_example}

Пример запроса для чтения данных из Object Storage:

```sql
SELECT
    *
FROM
    connection.`folder/filename.csv`
WITH(
    format='csv_with_names',
    SCHEMA 
    (
        Year int,
        Manufacturer String,
        Model String,
        Price Double
    )
);
```

Где:

* `connection` — название соединения с Object Storage.
* `folder/filename.csv` — путь к файлу в бакете Object Storage.
* `SCHEMA` — описание схемы данных в файле.