Формат Protobuf (Value)
Формат по умолчанию. Данные возвращаются построчно в формате Protobuf: каждая строка представляет собой сериализованный набор именованных значений с их YQL-типами. SDK автоматически преобразует полученные значения в нативные типы выбранного языка программирования, предоставляя типобезопасный интерфейс для работы с данными.
Этот формат рекомендуется для:
- Транзакционных (OLTP) задач, где требуется точечное чтение отдельных строк таблицы;
- Приложений, которые обрабатывают небольшие фрагменты таблицы в полном размере;
- Случаев, когда важна нативная интеграция с типами выбранного языка программирования.
Конвертация YQL-типов
Конвертация YQL-типов выполняется в нативные типы языка программирования на стороне SDK и зависит от конкретной его реализации. Подробнее о маппинге типов смотрите в документации используемого SDK.
Схема возвращаемых данных
Схема содержит список столбцов с их YQL-типами. Эта информация достаточна для интерпретации значений на стороне SDK: зная тип столбца, SDK преобразует каждое значение в нативный тип языка программирования.
Примеры использования в SDK
Данный формат соответствует NYdb::TResultSet::EFormat::Value. Он используется по умолчанию на стороне сервиса, если формат не задан; ниже — явное указание, как в примере на Python. Сессию NYdb::NQuery::TSession обычно получают в колбэке TQueryClient::RetryQuerySync / RetryQuery.
#include <ydb-cpp-sdk/client/query/client.h>
#include <ydb-cpp-sdk/client/types/status/status.h>
NYdb::TStatus ExampleValue(NYdb::NQuery::TSession session) {
constexpr std::string_view query = "SELECT * FROM example ORDER BY Key LIMIT 100;";
auto settings = NYdb::NQuery::TExecuteQuerySettings()
.Format(NYdb::TResultSet::EFormat::Value)
.SchemaInclusionMode(NYdb::NQuery::ESchemaInclusionMode::FirstOnly);
auto queryResult = session.ExecuteQuery(
query,
NYdb::NQuery::TTxControl::BeginTx().CommitTx(),
settings).GetValueSync();
NYdb::NStatusHelpers::ThrowOnError(queryResult);
for (const NYdb::TResultSet& resultSet : queryResult.GetResultSets()) {
std::cout << "Rows: " << resultSet.RowsCount() << ", columns: " << resultSet.ColumnsCount() << std::endl;
}
}
Данный формат используется по умолчанию при выполнении запроса через QueryService. Ниже приведён пример явного указания формата возвращаемых данных.
pool = ydb.QuerySessionPool(driver)
query = """
SELECT * FROM example ORDER BY Key LIMIT 100;
"""
result = pool.execute_with_retries(
query,
result_set_format=ydb.QueryResultSetFormat.VALUE,
schema_inclusion_mode=ydb.QuerySchemaInclusionMode.FIRST_ONLY,
)
for result_set in result:
print(f"Record batch with {len(result_set.rows)} rows and {len(result_set.columns)} columns")
Данный формат используется по умолчанию при выполнении запроса через QueryService.
Данный формат используется по умолчанию.