Skip to content

Commit 9253f6a

Browse files
authored
add query explainer (#14480)
1 parent faf1d1a commit 9253f6a

File tree

3 files changed

+49
-35
lines changed

3 files changed

+49
-35
lines changed

ydb/tools/query_replay_yt/main.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,18 @@ int main(int argc, const char** argv) {
251251
NJson::ReadJsonTree(&in, &readConfig, &queryJson, false);
252252
}
253253

254+
Cerr << "Running local replay of the query:" << Endl
255+
<< "Database: " << queryJson["query_database"].GetStringSafe() << Endl
256+
<< UnescapeC(queryJson["query_text"].GetStringSafe()) << Endl;
257+
auto TableMetadata = ExtractStaticMetadata(queryJson);
258+
Cerr << "Tables: " << Endl;
259+
for(auto& [name, meta]: TableMetadata) {
260+
Cerr << "TableName: " << name << Endl;
261+
NKikimrKqp::TKqpTableMetadataProto protoDescription;
262+
meta->ToMessage(&protoDescription);
263+
Cerr << protoDescription.Utf8DebugString() << Endl;
264+
}
265+
254266
auto result = fakeMapper.RunReplay(std::move(queryJson));
255267

256268
auto status = result.Get()->Status;

ydb/tools/query_replay_yt/query_compiler.cpp

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,40 @@ struct TMetadataInfoHolder {
138138
}
139139
};
140140

141+
THashMap<TString, NYql::TKikimrTableMetadataPtr> ExtractStaticMetadata(const NJson::TJsonValue& data) {
142+
EMetaSerializationType metaType = EMetaSerializationType::EncodedProto;
143+
if (data.Has("table_meta_serialization_type")) {
144+
metaType = static_cast<EMetaSerializationType>(data["table_meta_serialization_type"].GetUIntegerSafe());
145+
}
146+
THashMap<TString, NYql::TKikimrTableMetadataPtr> meta;
147+
148+
if (metaType == EMetaSerializationType::EncodedProto) {
149+
static NJson::TJsonReaderConfig readerConfig;
150+
NJson::TJsonValue tablemetajson;
151+
TStringInput in(data["table_metadata"].GetStringSafe());
152+
NJson::ReadJsonTree(&in, &readerConfig, &tablemetajson, false);
153+
Y_ENSURE(tablemetajson.IsArray());
154+
for (auto& node : tablemetajson.GetArray()) {
155+
NKikimrKqp::TKqpTableMetadataProto proto;
156+
157+
TString decoded = Base64Decode(node.GetStringRobust());
158+
Y_ENSURE(proto.ParseFromString(decoded));
159+
160+
NYql::TKikimrTableMetadataPtr ptr = MakeIntrusive<NYql::TKikimrTableMetadata>(&proto);
161+
meta.emplace(proto.GetName(), ptr);
162+
}
163+
} else {
164+
Y_ENSURE(data["table_metadata"].IsArray());
165+
for (auto& node : data["table_metadata"].GetArray()) {
166+
NKikimrKqp::TKqpTableMetadataProto proto;
167+
NProtobufJson::Json2Proto(node.GetStringRobust(), proto);
168+
NYql::TKikimrTableMetadataPtr ptr = MakeIntrusive<NYql::TKikimrTableMetadata>(&proto);
169+
meta.emplace(proto.GetName(), ptr);
170+
}
171+
}
172+
return meta;
173+
}
174+
141175

142176
class TStaticTableMetadataLoader: public NYql::IKikimrGateway::IKqpTableMetadataLoader, public NYql::IDbSchemeResolver {
143177
TActorSystem* ActorSystem;
@@ -534,46 +568,12 @@ class TReplayCompileActor: public TActorBootstrapped<TReplayCompileActor> {
534568
PassAway();
535569
}
536570

537-
static THashMap<TString, NYql::TKikimrTableMetadataPtr> ExtractStaticMetadata(const NJson::TJsonValue& data, EMetaSerializationType metaType) {
538-
THashMap<TString, NYql::TKikimrTableMetadataPtr> meta;
539-
540-
if (metaType == EMetaSerializationType::EncodedProto) {
541-
static NJson::TJsonReaderConfig readerConfig;
542-
NJson::TJsonValue tablemetajson;
543-
TStringInput in(data.GetStringSafe());
544-
NJson::ReadJsonTree(&in, &readerConfig, &tablemetajson, false);
545-
Y_ENSURE(tablemetajson.IsArray());
546-
for (auto& node : tablemetajson.GetArray()) {
547-
NKikimrKqp::TKqpTableMetadataProto proto;
548-
549-
TString decoded = Base64Decode(node.GetStringRobust());
550-
Y_ENSURE(proto.ParseFromString(decoded));
551-
552-
NYql::TKikimrTableMetadataPtr ptr = MakeIntrusive<NYql::TKikimrTableMetadata>(&proto);
553-
meta.emplace(proto.GetName(), ptr);
554-
}
555-
} else {
556-
Y_ENSURE(data.IsArray());
557-
for (auto& node : data.GetArray()) {
558-
NKikimrKqp::TKqpTableMetadataProto proto;
559-
NProtobufJson::Json2Proto(node.GetStringRobust(), proto);
560-
NYql::TKikimrTableMetadataPtr ptr = MakeIntrusive<NYql::TKikimrTableMetadata>(&proto);
561-
meta.emplace(proto.GetName(), ptr);
562-
}
563-
}
564-
return meta;
565-
}
566-
567571
void Handle(TQueryReplayEvents::TEvCompileRequest::TPtr& ev) {
568572
Owner = ev->Sender;
569573

570574
ReplayDetails = std::move(ev->Get()->ReplayDetails);
571575

572-
EMetaSerializationType metaType = EMetaSerializationType::EncodedProto;
573-
if (ReplayDetails.Has("table_meta_serialization_type")) {
574-
metaType = static_cast<EMetaSerializationType>(ReplayDetails["table_meta_serialization_type"].GetUIntegerSafe());
575-
}
576-
TableMetadata = std::make_shared<TMetadataInfoHolder>(std::move(ExtractStaticMetadata(ReplayDetails["table_metadata"], metaType)));
576+
TableMetadata = std::make_shared<TMetadataInfoHolder>(std::move(ExtractStaticMetadata(ReplayDetails)));
577577
TString queryText = UnescapeC(ReplayDetails["query_text"].GetStringSafe());
578578

579579
std::map<TString, Ydb::Type> queryParameterTypes;

ydb/tools/query_replay_yt/query_replay.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,5 +81,7 @@ struct TQueryReplayEvents {
8181
};
8282
};
8383

84+
THashMap<TString, NYql::TKikimrTableMetadataPtr> ExtractStaticMetadata(const NJson::TJsonValue& data);
85+
8486
NActors::IActor* CreateQueryCompiler(TIntrusivePtr<NKikimr::NKqp::TModuleResolverState> moduleResolverState,
8587
const NKikimr::NMiniKQL::IFunctionRegistry* functionRegistry, std::shared_ptr<NYql::IHTTPGateway> httpGateway, bool enableAntlr4Parser);

0 commit comments

Comments
 (0)