Skip to content

Add ExecuteMode to YQL plugin for YT. Support validate and explain modes #1219

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion ydb/library/yql/yt/bridge/interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,10 @@ using TFuncBridgeRun = TBridgeQueryResult*(
const char* impersonationUser,
const char* queryText,
const char* settings,
int settingsLength,
const TBridgeQueryFile* files,
int fileCount);
int fileCount,
int executeMode);
using TFuncBridgeGetProgress = TBridgeQueryResult*(TBridgeYqlPlugin* plugin, const char* queryId);
using TFuncBridgeAbort = TBridgeAbortResult*(TBridgeYqlPlugin* plugin, const char* queryId);
using TFuncBridgeFreeAbortResult = void(TBridgeAbortResult* result);
Expand Down
11 changes: 7 additions & 4 deletions ydb/library/yql/yt/dynamic/impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ extern "C" {

ssize_t BridgeGetAbiVersion()
{
return 1; // EYqlPluginAbiVersion::AbortQuery
return 2; // EYqlPluginAbiVersion
}

TBridgeYqlPlugin* BridgeCreateYqlPlugin(const TBridgeYqlPluginOptions* bridgeOptions)
Expand Down Expand Up @@ -74,8 +74,10 @@ TBridgeQueryResult* BridgeRun(
const char* impersonationUser,
const char* queryText,
const char* settings,
int settingsLength,
const TBridgeQueryFile* bridgeFiles,
int bridgeFileCount)
int bridgeFileCount,
int executeMode)
{
static const auto EmptyMap = TYsonString(TString("{}"));

Expand All @@ -96,8 +98,9 @@ TBridgeQueryResult* BridgeRun(
NYT::TGuid::FromString(queryId),
TString(impersonationUser),
TString(queryText),
settings ? TYsonString(TString(settings)) : EmptyMap,
files);
settings ? TYsonString(TString(settings, settingsLength)) : EmptyMap,
files,
executeMode);
FillString(bridgeResult->YsonResult, bridgeResult->YsonResultLength, result.YsonResult);
FillString(bridgeResult->Plan, bridgeResult->PlanLength, result.Plan);
FillString(bridgeResult->Statistics, bridgeResult->StatisticsLength, result.Statistics);
Expand Down
26 changes: 22 additions & 4 deletions ydb/library/yql/yt/native/plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,8 @@ class TYqlPlugin
TString impersonationUser,
TString queryText,
TYsonString settings,
std::vector<TQueryFile> files)
std::vector<TQueryFile> files,
int executeMode)
{
auto program = ProgramFactory_->Create("-memory-", queryText);
{
Expand Down Expand Up @@ -314,7 +315,23 @@ class TYqlPlugin
}

NYql::TProgram::TStatus status = NYql::TProgram::TStatus::Error;
status = program->RunWithConfig(impersonationUser, pipelineConfigurator);

// NYT::NYqlClient::EExecuteMode (yt/yt/ytlib/yql_client/public.h)
switch (executeMode) {
case 0: // Validate.
status = program->Validate(impersonationUser, nullptr);
break;
case 1: // Optimize.
status = program->OptimizeWithConfig(impersonationUser, pipelineConfigurator);
break;
case 2: // Run.
status = program->RunWithConfig(impersonationUser, pipelineConfigurator);
break;
default: // Unknown.
return TQueryResult{
.YsonError = MessageToYtErrorYson(Format("Unknown execution mode: %v", executeMode)),
};
}

if (status == NYql::TProgram::TStatus::Error) {
return TQueryResult{
Expand Down Expand Up @@ -354,10 +371,11 @@ class TYqlPlugin
TString impersonationUser,
TString queryText,
TYsonString settings,
std::vector<TQueryFile> files) noexcept override
std::vector<TQueryFile> files,
int executeMode) noexcept override
{
try {
return GuardedRun(queryId, impersonationUser, queryText, settings, files);
return GuardedRun(queryId, impersonationUser, queryText, settings, files, executeMode);
} catch (const std::exception& ex) {
{
auto guard = WriterGuard(ProgressSpinLock);
Expand Down
3 changes: 2 additions & 1 deletion ydb/library/yql/yt/plugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,8 @@ struct IYqlPlugin
TString impersonationUser,
TString queryText,
NYson::TYsonString settings,
std::vector<TQueryFile> files) noexcept = 0;
std::vector<TQueryFile> files,
int executeMode) noexcept = 0;
virtual TQueryResult GetProgress(TQueryId queryId) noexcept = 0;

virtual TAbortResult Abort(TQueryId queryId) noexcept = 0;
Expand Down