Федеративные запросы к данным
Yandex Query — это интерактивный сервис для бессерверного анализа данных. С его помощью можно обрабатывать информацию из различных хранилищ без необходимости создания выделенного кластера. Поддерживается работа с хранилищами данных Yandex Object Storage, Yandex Managed Service for PostgreSQL, Yandex Managed Service for ClickHouse®.
Данные из этих систем можно обрабатывать как по отдельности, так и в рамках одного общего запроса — такие запросы называются федеративными.
В этом руководстве вы создадите три отдельных хранилища данных: покупатели, купленные товары и даты покупок. С помощью федеративного запроса из ячейки ноутбука вы сможете получить данные из всех хранилищ одновременно.
- Подготовьте инфраструктуру.
- Начните работу в Query.
- Подключитесь к данным Object Storage.
- Подключитесь к данным Managed Service for ClickHouse®.
- Подключитесь к данным Managed Service for PostgreSQL.
- Выполните федеративный запрос.
Если созданные ресурсы вам больше не нужны, удалите их.
Ноутбук с примерами также доступен на GitHub
Перед началом работы
Перед началом работы нужно зарегистрироваться в Yandex Cloud, настроить сообщество и привязать к нему платежный аккаунт:
- На главной странице DataSphere
нажмите Попробовать бесплатно и выберите аккаунт для входа — Яндекс ID или рабочий аккаунт в федерации (SSO). - Выберите организацию Yandex Cloud Organization, в которой вы будете работать в Yandex Cloud.
- Создайте сообщество.
- Привяжите платежный аккаунт к сообществу DataSphere, в котором вы будете работать. Убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его в интерфейсе DataSphere.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры для реализации федеративных запросов из этого примера входит:
- плата за использование вычислительных ресурсов DataSphere;
- плата за хранение данных в бакете;
- плата за запущенный кластер Managed Service for ClickHouse®;
- плата за запущенный кластер Managed Service for PostgreSQL;
- плата за объем считанных данных при исполнении запросов Query.
Подготовьте инфраструктуру
Войдите в консоль управления
Если у вас есть активный платежный аккаунт, на странице облака
Примечание
Если вы работаете с Yandex Cloud через федерацию удостоверений, вам может быть недоступна платежная информация. В этом случае обратитесь к администратору вашей организации в Yandex Cloud.
Создайте каталог
- В консоли управления
выберите облако и нажмите кнопку Создать каталог. - Введите имя каталога, например
data-folder
. - Нажмите кнопку Создать.
Создайте сервисный аккаунт для проекта DataSphere
- В консоли управления
перейдите в каталогdata-folder
. - В списке сервисов выберите Identity and Access Management.
- Нажмите кнопку Создать сервисный аккаунт.
- Введите имя сервисного аккаунта, например
yq-sa
. - Нажмите Добавить роль и назначьте сервисному аккаунту роли:
datasphere.community-project.editor
— для запуска вычислений DataSphere.yq.editor
— для отправки запросов Query.storage.viewer
— для просмотра содержимого бакета и объектов Object Storage.managed-clickhouse.viewer
— для просмотра содержимого кластера Managed Service for ClickHouse®.managed-postgresql.viewer
— для просмотра содержимого кластера Managed Service for PostgreSQL.
- Нажмите кнопку Создать.
Добавьте сервисный аккаунт в проект
Чтобы сервисный аккаунт мог запускать проект DataSphere, добавьте его в список участников проекта.
-
Выберите нужный проект в своем сообществе или на главной странице
DataSphere во вкладке Недавние проекты. - На вкладке Участники нажмите Добавить участника.
- Выберите аккаунт
yq-sa
и нажмите Добавить.
Создайте авторизованный ключ для сервисного аккаунта
Чтобы сервисный аккаунт мог отправлять запросы Query, создайте авторизованный ключ.
Примечание
Срок жизни авторизованных ключей не ограничен, но вы всегда можете получить новые авторизованные ключи и повторить процедуру аутентификации, если что-то пошло не так.
- В консоли управления
перейдите в каталогdata-folder
. - В списке сервисов выберите Identity and Access Management.
- На панели слева выберите
Сервисные аккаунты. - В открывшемся списке выберите сервисный аккаунт
yq-sa
. - Нажмите кнопку Создать новый ключ на верхней панели и выберите пункт Создать авторизованный ключ.
- Выберите алгоритм шифрования и нажмите Создать.
- Нажмите Скачать файл с ключами.
Создайте секрет
Чтобы получить авторизованный ключ из ноутбука, создайте секрет с содержимым файла авторизованного ключа.
-
Выберите нужный проект в своем сообществе или на главной странице
DataSphere во вкладке Недавние проекты. - В блоке Ресурсы проекта нажмите
Секрет. - Нажмите Создать.
- В поле Имя задайте имя секрета —
yq_access_key
. - В поле Значение вставьте полное содержимое скачанного файла с авторизированным ключом.
- Нажмите Создать.
Создайте ноутбук
Запросы к базе данных Managed Service for PostgreSQL через Query будут отправляться из ноутбука.
-
Выберите нужный проект в своем сообществе или на главной странице
DataSphere во вкладке Недавние проекты. - Нажмите кнопку Открыть проект в JupyterLab и дождитесь окончания загрузки.
- На верхней панели нажмите File и выберите New ⟶ Notebook.
- Выберите ядро и нажмите Select.
Начните работу в Query
Пакет yandex_query_magic
предоставляет magic commands для работы в Jupyter. Установите его для отправки запросов в Query. Скопируйте код в ячейки ноутбука yq-storage.ipynb
:
-
Откройте проект DataSphere:
-
Выберите нужный проект в своем сообществе или на главной странице
DataSphere во вкладке Недавние проекты. - Нажмите кнопку Открыть проект в JupyterLab и дождитесь окончания загрузки.
- Откройте вкладку с ноутбуком.
-
-
Установите пакет
yandex_query_magic
:%pip install yandex_query_magic
-
После завершения установки на верхней панели выберите Kernel ⟶ Restart kernel....
-
Загрузите расширение:
%load_ext yandex_query_magic
-
Настройте подключение, указав идентификатор каталога
data-folder
и название секрета с авторизованным ключом:%yq_settings --folder-id <идентификатор_каталога> --env-auth yq_access_key
-
Выполните тестовый запрос к Query:
%yq select "Hello, world!"
Подключитесь к данным Object Storage
Для работы с данными Object Storage вам понадобится бакет с таблицей, подключение Query и привязка к данным.
Создайте бакет с данными
Бакет Object Storage будет содержать даты покупок.
-
В консоли управления
перейдите в каталогdata-folder
. -
В списке сервисов выберите Object Storage.
-
Справа сверху нажмите кнопку Создать бакет.
-
В поле Имя укажите имя бакета.
-
В полях Доступ на чтение объектов, Доступ к списку объектов и Доступ на чтение настроек выберите Ограниченный.
-
Нажмите кнопку Создать бакет.
-
Создайте файл
visits.csv
и поместите в него таблицу с датами покупок:date|persons_id|item_id 2024-05-14 12:12:00|1|2 2024-05-15 13:13:00|2|1
-
Перейдите в созданный бакет и нажмите Загрузить.
-
В появившемся окне выберите файл
visits.csv
и нажмите кнопку Открыть. -
Нажмите кнопку Загрузить.
Создайте подключение к Object Storage
-
В консоли управления
перейдите в каталогdata-folder
. -
В списке сервисов выберите Yandex Query.
-
На панели слева выберите Соединения.
-
Нажмите кнопку
Создать. -
Введите имя соединения, например
storage-connection
. -
Выберите тип соединения Object Storage и укажите Параметры типа соединения.
-
В поле Аутентификация бакета выберите
Приватный
и задайте параметры:- Облако и каталог —
data-folder
. - Бакет — выберите созданный бакет.
- Сервисный аккаунт —
yq-sa
.
- Облако и каталог —
-
Нажмите кнопку Создать.
Создайте привязку к данным
Привязка к данным содержит информацию о форматах и расположении файлов в бакете, а также о списке полей данных и их типах.
Чтобы создать привязку к данным:
-
В консоли управления
выберите каталогdata-folder
. -
В списке сервисов выберите Yandex Query.
-
На панели слева выберите Привязки.
-
Нажмите кнопку
Создать. -
В блоке Параметры соединения:
- Тип — выберите Object Storage.
- Соединение — выберите
storage-connection
.
-
В блоке Параметры привязки к данным:
- Введите имя привязки, например
visits
. - В поле Путь укажите путь к таблице в бакете —
/visits.csv
.
- Введите имя привязки, например
-
В блоке Настройки формата:
- Формат — выберите
csv_with_names
. - Разделитель {%secondary%}(необязательно){%secondary%} —
|
.
- Формат — выберите
-
В блоке Колонки добавьте три колонки со следующими именами и типами данных:
date
—DATETIME
.person_id
—INT32
.items_id
—INT32
.
-
Чтобы проверить корректность указанных данных, нажмите кнопку Предпросмотр. Внизу должна появиться ваша таблица.
-
Нажмите кнопку Создать.
Чтобы проверить подключение, получите данные таблицы из ячейки ноутбука:
%yq SELECT * FROM visits LIMIT 100;
Подключитесь к данным Managed Service for ClickHouse®
Для работы с данными Managed Service for ClickHouse® вам понадобится кластер с таблицей и подключение Query.
Создайте кластер Managed Service for ClickHouse®
Для отправки запросов подойдет любой рабочий кластер Managed Service for ClickHouse® со включенной опцией Доступ из Yandex Query.
-
В консоли управления
выберите каталогdata-folder
. -
Выберите сервис Managed Service for ClickHouse.
-
Нажмите кнопку Создать кластер.
-
Введите имя кластера в поле Имя кластера, например
clickhouse
. -
В блоке Настройки СУБД:
- В поле Управление пользователями через SQL выберите из выпадающего списка Включено.
- Укажите Имя пользователя и Пароль.
-
В блоке Сервисные настройки:
- Выберите сервисный аккаунт
yq-sa
. - Включите опции Доступ из Yandex Query и Доступ из консоли управления.
- Выберите сервисный аккаунт
-
Остальные настройки можно оставить по умолчанию.
-
Нажмите кнопку Создать кластер.
Создайте таблицу
Таблица Managed Service for ClickHouse® будет содержать названия товаров.
-
В консоли управления
, откройте страницу кластераclickhouse
и перейдите на вкладку SQL. -
Введите Имя пользователя и Пароль, указанные при создании кластера.
-
В окно ввода справа последовательно выполните SQL-запросы:
CREATE TABLE items(id INT, description VARCHAR) ENGINE=MergeTree ORDER BY id;
INSERT INTO items(id, description) VALUES(1, 'Refrigerator')
INSERT INTO items(id, description) VALUES(2, 'TV')
-
Нажмите Выполнить.
Создайте подключение к Managed Service for ClickHouse®
-
В консоли управления
выберите каталогdata-folder
. -
В списке сервисов выберите Yandex Query.
-
На панели слева выберите Соединения.
-
Нажмите кнопку
Создать. -
Введите имя соединения, например
clickhouse
. -
Выберите тип соединения Managed Service for ClickHouse.
-
В блоке Параметры типа соединения:
- Кластер — выберите ранее созданный кластер
clickhouse
. - Сервисный аккаунт — выберите сервисный аккаунт
yq-sa
. - Введите Логин и Пароль, указанные при создании кластера.
- Кластер — выберите ранее созданный кластер
-
Нажмите кнопку Создать.
Чтобы проверить подключение, выполните запрос в ячейке ноутбука. Например:
%yq SELECT * FROM clickhouse.items
Подключитесь к данным Managed Service for PostgreSQL
Для работы с данными Managed Service for PostgreSQL вам понадобится кластер с таблицей и подключение Query.
Создайте кластер Managed Service for PostgreSQL
Для отправки запросов подойдет любой рабочий кластер Managed Service for PostgreSQL со включенной опцией Доступ из Yandex Query.
- В консоли управления
выберите каталогdata-folder
. - Выберите сервис Managed Service for PostgreSQL.
- Нажмите кнопку Создать кластер.
- Введите имя кластера в поле Имя кластера, например
postgresql
. - В блоке База данных:
- Укажите Имя БД, например
db1
. - Укажите Имя пользователя и Пароль.
- Укажите Имя БД, например
- В блоке Сервисные настройки включите опции Доступ из Yandex Query и Доступ из консоли управления.
- Остальные настройки можно оставить по умолчанию.
- Нажмите кнопку Создать кластер.
Создайте таблицу
Таблица Managed Service for PostgreSQL будет содержать имена покупателей.
-
В консоли управления
, откройте страницу кластераpostgresql
и перейдите на вкладку SQL. -
Введите Имя пользователя и Пароль, указанные при создании кластера.
-
В окно ввода справа последовательно выполните SQL-запросы:
CREATE TABLE persons(person_id INT, name VARCHAR);
INSERT INTO persons(person_id, name) values(1, 'Ivan')
INSERT INTO persons(person_id, name) values(2, 'Peter')
Создайте подключение к Managed Service for PostgreSQL
-
В консоли управления
выберите каталогdata-folder
. -
В списке сервисов выберите Yandex Query.
-
На панели слева выберите Соединения.
-
Нажмите кнопку
Создать. -
Введите имя соединения, например
postgresql
. -
Выберите тип соединения Managed Service for PostgreSQL.
-
В блоке Параметры типа соединения:
- Кластер — выберите ранее созданный кластер
postgresql
. - Сервисный аккаунт —
yq-sa
. - База данных —
db1
. - Введите Логин и Пароль, указанные при создании кластера.
- Кластер — выберите ранее созданный кластер
-
Нажмите кнопку Создать.
Чтобы проверить подключение, выполните запрос в ячейке ноутбука. Например:
%yq SELECT * FROM postgresql.persons
Выполните федеративный запрос
Работа с федеративными источниками данных (межсервисная аналитика) ничем не отличается от работы с обычными источниками данных. К внешним источникам данных, таким как таблицы в БД и данные в Object Storage, можно одновременно обращаться из запроса и выполнять над ними любые допустимые языком YQL операции.
Чтобы совместить и получить данные из всех трех таблиц, выполните федеративный запрос в ячейке ноутбука:
%%yq SELECT
v.person_id,
date,
p.name,
c.description
FROM visits AS v
INNER JOIN postgresql.persons AS p ON
v.person_id = p.person_id
INNER JOIN clickhouse.items AS c ON
v.item_id = c.id
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- удалите бакет;
- удалите кластер Managed Service for ClickHouse®;
- удалите кластер Managed Service for PostgreSQL;
- удалите проект.
ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc