Yandex Cloud
Поиск
Связаться с экспертомПопробовать бесплатно
  • Кейсы
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
  • Marketplace
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Искусственный интеллект
    • Безопасность
    • Инструменты DevOps
    • Бессерверные вычисления
    • Управление ресурсами
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
    • Акции и free tier
  • Кейсы
  • Документация
  • Блог
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ООО «Яндекс.Облако»
Yandex Query
  • Управление доступом
  • Правила тарификации
    • Terraform
    • SDK
    • Apache Airflow™
  • Интеграции
  • Аудитные логи Audit Trails
  • Вопросы и ответы
  • Публичные материалы
  • Обучающие курсы

В этой статье:

  • Аутентификация
  • Подключение
  • Выполнение запроса
  • Получение результатов запроса
  • Полный пример
  1. Справочник
  2. SDK

SDK

Статья создана
Yandex Cloud
Обновлена 7 марта 2025 г.
  • Аутентификация
  • Подключение
  • Выполнение запроса
  • Получение результатов запроса
  • Полный пример

Yandex Query построен на основе внешних таблиц YDB, поэтому для взаимодействия с сервисом используется YDB SDK.

C помощью YDB SDK возможно использование Yandex Query в различных языках программирования:

  • Java SDK.
  • Python SDK.
  • Go SDK.
  • C++ SDK.
  • .NET SDK.
  • Rust SDK.

Полный перечень SDK платформы YDB см. на странице ydb-platform на GitHub.

Все примеры ниже приведены для Python SDK. SDK для других языков разработки устроены аналогично, и все подходы применимы и к ним с точностью до реализации каждого конкретного SDK.

АутентификацияАутентификация

Yandex Query является полностью управляемым сервисом и для аутентификации использует механизмы IAM.

Аутентификация может быть выполнена с помощью:

  • Авторизованных ключей.
  • Статических ключей.
  • IAM-токена.
  • Метаданных виртуальной машины.

Для аутентификации любым перечисленным методом можно использовать существующие методы SDK.

В данном примере для аутентификации будет использоваться авторизованный ключ. Для создания авторизованного ключа выполните следующие шаги:

  1. Создайте сервисный аккаунт с ролью yq.editor.
  2. Создайте авторизованный ключ доступа для сервисного аккаунта, созданного ранее. Сохраните авторизованный ключ доступа в файл в формате JSON.

ПодключениеПодключение

Для подключения к Yandex Query необходимо создать объект ydb.Driver с указанием параметров подключения и данных для аутентификации:

auth_key_file = "<path_to_auth_key_file>"

with ydb.Driver(endpoint="grpcs://grpc.yandex-query.cloud.yandex.net:2135",
                database="/<folder_id>",
                credentials=ydb.iam.ServiceAccountCredentials.from_file(auth_key_file)) as driver:
        driver.wait(timeout=5, fail_fast=True)

Где:

  • endpoint — эндпоинт для подключения к источнику данных. Yandex Query использует фиксированный адрес grpcs://grpc.yandex-query.cloud.yandex.net:2135.
  • database — идентификатор каталога, в котором вы хотите запускать запросы. Перед идентификатором каталога должен содержаться префикс /.
  • credentials — реквизиты для аутентификации в Yandex Cloud.

Выполнение запросаВыполнение запроса

Для выполнения запроса необходимо открыть сессию к Yandex Query и в рамках нее выполнить SQL-запрос:

with ydb.SessionPool(driver) as pool:

    def callee(session):
        result_sets = session.transaction(ydb.SerializableReadWrite()).execute(
            """
            SELECT 'Hello, world!' AS message;
            """,
            commit_tx=True,
        )
        ...

    return pool.retry_operation_sync(callee)

YDB поддерживает несколько способов выполнения запроса: обычный, scripting-запрос, скан-запрос и query-запрос.

Примечание

Yandex Query на данный момент поддерживает только scripting-запросы.

Получение результатов запросаПолучение результатов запроса

Получить возвращаемые значения можно следующим образом:

for row in result_sets[0].rows:
    print(row.message)

return result_sets[0]

Примечание

Yandex Query поддерживает многократное получение результатов запроса по его идентификатору. При работе через YDB SDK такая возможность в данный момент отсутствует.

Полный примерПолный пример

Ниже приведен пример работы с Yandex Query с помощью YDB Python SDK.

Полный пример

Установите необходимые Python-модули:

python3 -m pip install ydb
python3 -m pip install requests
python3 -m pip install "ydb[yc]"

Выполните следующий пример, указав необходимые для работы параметры:

import ydb
import ydb.iam

auth_key_file = "<path_to_auth_key_file>"

def main():
    with ydb.Driver(endpoint="grpcs://grpc.yandex-query.cloud.yandex.net:2135",
                    database="/<folder_id>",
                    credentials=ydb.iam.ServiceAccountCredentials.from_file(auth_key_file)) as driver:
            driver.wait(timeout=5, fail_fast=True)

            with ydb.SessionPool(driver) as pool:

                def callee(session):
                    # New transaction in serializable read write mode.
                    # If query successfully completed you will get result sets.
                    # Otherwise exception will be raised.
                    result_sets = session.transaction(ydb.SerializableReadWrite()).execute(
                        """
                        select 'Hello, world!' as message
                        """,
                        commit_tx=True,
                    )
                    for row in result_sets[0].rows:
                        print(row.message)

                pool.retry_operation_sync(callee)


if __name__ == "__main__":
     main()

Была ли статья полезна?

Предыдущая
Terraform
Следующая
Обзор
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ООО «Яндекс.Облако»