Чтение данных из Object Storage с помощью соединений с Query
При работе с Yandex Object Storage с помощью соединений удобно выполнять прототипирование, первоначальную настройку подключений к данным.
Пример запроса для чтения данных:
SELECT
*
FROM
object_storage.`*.tsv`
WITH
(
format=tsv_with_names,
SCHEMA
(
`timestamp` Uint32,
action String
)
);
Настройка соединения
Чтобы создать соединение с Object Storage:
-
В консоли управления
выберите каталог, в котором нужно создать соединение. -
В списке сервисов выберите Yandex Query.
-
На панели слева перейдите на вкладку Соединения.
-
Нажмите кнопку
Создать. -
Укажите параметры соединения:
-
В блоке Общие параметры:
- Имя — название соединения с Object Storage.
- Тип —
Object Storage
.
-
В блоке Параметры типа соединения:
-
Аутентификация бакета — выберите
Публичный
илиПриватный
в зависимости от типа доступа к чтению объектов в бакете.Для публичного бакета введите имя в поле Бакет.
Для приватного бакета выберите:-
Облако и каталог, в котором находится источник данных.
-
Выберите или создайте новый бакет.
-
Выберите или создайте новый сервисный аккаунт с ролью
storage.viewer
, от имени которого будет выполняться доступ к данным.Чтобы использовать сервисный аккаунт, пользователю нужна роль
iam.serviceAccounts.user
.
-
-
-
-
Нажмите кнопку Создать.
Модель данных
В Object Storage данные хранятся в файлах в бинарном виде. Для чтения данных используйте SQL-выражение:
SELECT
<выражение>
FROM
<соединение>.<путь>
WITH(
FORMAT = "<формат_данных>",
COMPRESSION = "<формат_сжатия>",
SCHEMA = (<описание схемы>))
WHERE
<фильтр>;
Где:
<соединение>
— название соединения с хранилищем.<путь>
— путь к файлу или файлам внутри бакета. Поддерживаются wildcards*
.<формат_данных>
— формат данных в файлах.<формат_сжатия>
— формат сжатия файлов.<описание схемы>
— описание схемы хранимых данных в файлах.
Описание схемы данных
Описание схемы данных состоит из набора полей:
- Названия поля.
- Типа поля.
- Признака обязательности данных.
Например, схема данных ниже описывает поле схемы с названием Year
типа Int32
и требованием наличия этого поля в данных:
Year Int32 NOT NULL
Если поле данных помечено как обязательное, NOT NULL
, но это поле отсутствует в обрабатываемом файле, то работа с таким файлом будет завершена с ошибкой. Если поле помечено как необязательное, NULL
, то при отсутствии поля в обрабатываемом файле не будет возникать ошибки, но поле при этом примет значение NULL
. Ключевое слово NULL
в необязательных полях опционально.
Автоматический вывод схемы данных
Автоматический вывод схемы доступен для всех форматов данных, кроме raw
и json_as_string
. Он удобен в том случае, когда схема содержит большое количество полей. Для того, чтобы не вводить эти поля вручную, используйте параметр WITH_INFER
:
SELECT
<выражение>
FROM
<соединение>.<путь>
WITH(
FORMAT = "<формат_данных>",
COMPRESSION = "<формат_сжатия>",
WITH_INFER="true")
WHERE
<фильтр>;
Где:
<соединение>
— название соединения с хранилищем.<путь>
— путь к файлу или файлам внутри бакета. Поддерживаются wildcards*
.<формат_данных>
— формат данных в файлах.<формат_сжатия>
— формат сжатия файлов.
В результате выполнения такого запроса будут автоматически выведены названия и типы полей.
Форматы путей к данным
В Yandex Query поддерживаются следующие пути к данным:
Формат пути | Описание | Пример |
---|---|---|
Путь завершается символом / |
Путь к каталогу | Путь /a адресует все содержимое каталога:/a/b/c/d/1.txt /a/b/2.csv |
Путь содержит символ макроподстановки * |
Любые файлы, вложенные в путь | Путь /a/*.csv адресует файлы в каталогах:/a/b/c/1.csv /a/2.csv /a/b/c/d/e/f/g/2.csv |
Путь не завершается символом / и не содержит символов макроподстановок |
Путь к отдельному файлу | Путь /a/b.csv адресует конкретный файл /a/b.csv |
Пример чтения данных c помощью соединений
Пример запроса для чтения данных из Object Storage:
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
— описание схемы данных в файле.