33#include < ydb/core/base/appdata.h>
44#include < yql/essentials/parser/pg_catalog/catalog.h>
55
6+ namespace {
7+ using NKikimrSysView::ESysViewType;
8+ }
9+
610namespace NKikimr {
711namespace NSysView {
812
@@ -170,6 +174,11 @@ class TSystemViewResolver : public ISystemViewResolver {
170174 return view ? TMaybe<TSchema>(*view) : Nothing ();
171175 }
172176
177+ TMaybe<TSchema> GetSystemViewSchema (ESysViewType viewType) const override final {
178+ const TSchema* view = SystemViews.FindPtr (viewType);
179+ return view ? TMaybe<TSchema>(*view) : Nothing ();
180+ }
181+
173182 TVector<TString> GetSystemViewNames (ETarget target) const override {
174183 TVector<TString> result;
175184 switch (target) {
@@ -210,41 +219,50 @@ class TSystemViewResolver : public ISystemViewResolver {
210219
211220private:
212221 void RegisterPgTablesSystemViews () {
213- auto registerView = [&](TStringBuf tableName, const TVector<Schema::PgColumn>& columns) {
222+ auto registerView = [&](TStringBuf tableName, ESysViewType type, const TVector<Schema::PgColumn>& columns) {
214223 auto & dsv = DomainSystemViews[tableName];
215224 auto & sdsv = SubDomainSystemViews[tableName];
225+ auto & sv = SystemViews[type];
216226 for (const auto & column : columns) {
217227 dsv.Columns [column._ColumnId + 1 ] = TSysTables::TTableColumnInfo (
218228 column._ColumnName , column._ColumnId + 1 , column._ColumnTypeInfo , " " , -1
219229 );
220230 sdsv.Columns [column._ColumnId + 1 ] = TSysTables::TTableColumnInfo (
221231 column._ColumnName , column._ColumnId + 1 , column._ColumnTypeInfo , " " , -1
222232 );
233+ sv.Columns [column._ColumnId + 1 ] = TSysTables::TTableColumnInfo (
234+ column._ColumnName , column._ColumnId + 1 , column._ColumnTypeInfo , " " , -1
235+ );
223236 }
224237 };
225238 registerView (
226239 PgTablesName,
240+ ESysViewType::EPgTables,
227241 Singleton<Schema::PgTablesSchemaProvider>()->GetColumns (PgTablesName)
228242 );
229243 registerView (
230244 InformationSchemaTablesName,
245+ ESysViewType::EInformationSchemaTables,
231246 Singleton<Schema::PgTablesSchemaProvider>()->GetColumns (InformationSchemaTablesName)
232247 );
233248 registerView (
234249 PgClassName,
250+ ESysViewType::EPgClass,
235251 Singleton<Schema::PgTablesSchemaProvider>()->GetColumns (PgClassName)
236252 );
237253 }
238254
239255 template <typename Table>
240- void RegisterSystemView (const TStringBuf& name) {
256+ void RegisterSystemView (const TStringBuf& name, ESysViewType type ) {
241257 TSchemaFiller<Table>::Fill (DomainSystemViews[name]);
242258 TSchemaFiller<Table>::Fill (SubDomainSystemViews[name]);
259+ TSchemaFiller<Table>::Fill (SystemViews[type]);
243260 }
244261
245262 template <typename Table>
246- void RegisterDomainSystemView (const TStringBuf& name) {
263+ void RegisterDomainSystemView (const TStringBuf& name, ESysViewType type ) {
247264 TSchemaFiller<Table>::Fill (DomainSystemViews[name]);
265+ TSchemaFiller<Table>::Fill (SystemViews[type]);
248266 }
249267
250268 template <typename Table>
@@ -258,29 +276,29 @@ class TSystemViewResolver : public ISystemViewResolver {
258276 }
259277
260278 void RegisterSystemViews () {
261- RegisterSystemView<Schema::PartitionStats>(PartitionStatsName);
279+ RegisterSystemView<Schema::PartitionStats>(PartitionStatsName, ESysViewType::EPartitionStats );
262280
263- RegisterSystemView<Schema::Nodes>(NodesName);
281+ RegisterSystemView<Schema::Nodes>(NodesName, ESysViewType::ENodes );
264282
265- RegisterSystemView<Schema::QueryStats>(TopQueriesByDuration1MinuteName);
266- RegisterSystemView<Schema::QueryStats>(TopQueriesByDuration1HourName);
267- RegisterSystemView<Schema::QueryStats>(TopQueriesByReadBytes1MinuteName);
268- RegisterSystemView<Schema::QueryStats>(TopQueriesByReadBytes1HourName);
269- RegisterSystemView<Schema::QueryStats>(TopQueriesByCpuTime1MinuteName);
270- RegisterSystemView<Schema::QueryStats>(TopQueriesByCpuTime1HourName);
271- RegisterSystemView<Schema::QueryStats>(TopQueriesByRequestUnits1MinuteName);
272- RegisterSystemView<Schema::QueryStats>(TopQueriesByRequestUnits1HourName);
273- RegisterSystemView<Schema::QuerySessions>(QuerySessions);
283+ RegisterSystemView<Schema::QueryStats>(TopQueriesByDuration1MinuteName, ESysViewType::ETopQueriesByDurationOneMinute );
284+ RegisterSystemView<Schema::QueryStats>(TopQueriesByDuration1HourName, ESysViewType::ETopQueriesByDurationOneHour );
285+ RegisterSystemView<Schema::QueryStats>(TopQueriesByReadBytes1MinuteName, ESysViewType::ETopQueriesByReadBytesOneMinute );
286+ RegisterSystemView<Schema::QueryStats>(TopQueriesByReadBytes1HourName, ESysViewType::ETopQueriesByReadBytesOneHour );
287+ RegisterSystemView<Schema::QueryStats>(TopQueriesByCpuTime1MinuteName, ESysViewType::ETopQueriesByCpuTimeOneMinute );
288+ RegisterSystemView<Schema::QueryStats>(TopQueriesByCpuTime1HourName, ESysViewType::ETopQueriesByCpuTimeOneHour );
289+ RegisterSystemView<Schema::QueryStats>(TopQueriesByRequestUnits1MinuteName, ESysViewType::ETopQueriesByRequestUnitsOneMinute );
290+ RegisterSystemView<Schema::QueryStats>(TopQueriesByRequestUnits1HourName, ESysViewType::ETopQueriesByRequestUnitsOneHour );
291+ RegisterSystemView<Schema::QuerySessions>(QuerySessions, ESysViewType::EQuerySessions );
274292
275- RegisterDomainSystemView<Schema::PDisks>(PDisksName);
276- RegisterDomainSystemView<Schema::VSlots>(VSlotsName);
277- RegisterDomainSystemView<Schema::Groups>(GroupsName);
278- RegisterDomainSystemView<Schema::StoragePools>(StoragePoolsName);
279- RegisterDomainSystemView<Schema::StorageStats>(StorageStatsName);
293+ RegisterDomainSystemView<Schema::PDisks>(PDisksName, ESysViewType::EPDisks );
294+ RegisterDomainSystemView<Schema::VSlots>(VSlotsName, ESysViewType::EVSlots );
295+ RegisterDomainSystemView<Schema::Groups>(GroupsName, ESysViewType::EGroups );
296+ RegisterDomainSystemView<Schema::StoragePools>(StoragePoolsName, ESysViewType::EStoragePools );
297+ RegisterDomainSystemView<Schema::StorageStats>(StorageStatsName, ESysViewType::EStorageStats );
280298
281- RegisterDomainSystemView<Schema::Tablets>(TabletsName);
299+ RegisterDomainSystemView<Schema::Tablets>(TabletsName, ESysViewType::ETablets );
282300
283- RegisterSystemView<Schema::QueryMetrics>(QueryMetricsName);
301+ RegisterSystemView<Schema::QueryMetrics>(QueryMetricsName, ESysViewType::EQueryMetricsOneMinute );
284302
285303 RegisterOlapStoreSystemView<Schema::PrimaryIndexStats>(StorePrimaryIndexStatsName);
286304 RegisterOlapStoreSystemView<Schema::PrimaryIndexPortionStats>(StorePrimaryIndexPortionStatsName);
@@ -291,24 +309,24 @@ class TSystemViewResolver : public ISystemViewResolver {
291309 RegisterColumnTableSystemView<Schema::PrimaryIndexGranuleStats>(TablePrimaryIndexGranuleStatsName);
292310 RegisterColumnTableSystemView<Schema::PrimaryIndexOptimizerStats>(TablePrimaryIndexOptimizerStatsName);
293311
294- RegisterSystemView<Schema::TopPartitions>(TopPartitionsByCpu1MinuteName);
295- RegisterSystemView<Schema::TopPartitions>(TopPartitionsByCpu1HourName);
296- RegisterSystemView<Schema::TopPartitionsTli>(TopPartitionsByTli1MinuteName);
297- RegisterSystemView<Schema::TopPartitionsTli>(TopPartitionsByTli1HourName);
312+ RegisterSystemView<Schema::TopPartitions>(TopPartitionsByCpu1MinuteName, ESysViewType::ETopPartitionsByCpuOneMinute );
313+ RegisterSystemView<Schema::TopPartitions>(TopPartitionsByCpu1HourName, ESysViewType::ETopPartitionsByCpuOneHour );
314+ RegisterSystemView<Schema::TopPartitionsTli>(TopPartitionsByTli1MinuteName, ESysViewType::ETopPartitionsByTliOneMinute );
315+ RegisterSystemView<Schema::TopPartitionsTli>(TopPartitionsByTli1HourName, ESysViewType::ETopPartitionsByTliOneHour );
298316
299317 RegisterPgTablesSystemViews ();
300318
301- RegisterSystemView<Schema::ResourcePoolClassifiers>(ResourcePoolClassifiersName);
302- RegisterSystemView<Schema::ResourcePools>(ResourcePoolsName);
319+ RegisterSystemView<Schema::ResourcePoolClassifiers>(ResourcePoolClassifiersName, ESysViewType::EResourcePoolClassifiers );
320+ RegisterSystemView<Schema::ResourcePools>(ResourcePoolsName, ESysViewType::EResourcePools );
303321
304322 {
305323 using namespace NAuth ;
306- RegisterSystemView<Schema::AuthUsers>(UsersName);
307- RegisterSystemView<Schema::AuthGroups>(NAuth::GroupsName);
308- RegisterSystemView<Schema::AuthGroupMembers>(GroupMembersName);
309- RegisterSystemView<Schema::AuthOwners>(OwnersName);
310- RegisterSystemView<Schema::AuthPermissions>(PermissionsName);
311- RegisterSystemView<Schema::AuthPermissions>(EffectivePermissionsName);
324+ RegisterSystemView<Schema::AuthUsers>(UsersName, ESysViewType::EAuthUsers );
325+ RegisterSystemView<Schema::AuthGroups>(NAuth::GroupsName, ESysViewType::EAuthGroups );
326+ RegisterSystemView<Schema::AuthGroupMembers>(GroupMembersName, ESysViewType::EAuthGroupMembers );
327+ RegisterSystemView<Schema::AuthOwners>(OwnersName, ESysViewType::EAuthOwners );
328+ RegisterSystemView<Schema::AuthPermissions>(PermissionsName, ESysViewType::EAuthPermissions );
329+ RegisterSystemView<Schema::AuthPermissions>(EffectivePermissionsName, ESysViewType::EAuthEffectivePermissions );
312330 }
313331 }
314332
@@ -317,6 +335,7 @@ class TSystemViewResolver : public ISystemViewResolver {
317335 THashMap<TString, TSchema> SubDomainSystemViews;
318336 THashMap<TString, TSchema> OlapStoreSystemViews;
319337 THashMap<TString, TSchema> ColumnTableSystemViews;
338+ THashMap<ESysViewType, TSchema> SystemViews;
320339};
321340
322341class TSystemViewRewrittenResolver : public ISystemViewResolver {
@@ -346,6 +365,11 @@ class TSystemViewRewrittenResolver : public ISystemViewResolver {
346365 return view ? TMaybe<TSchema>(*view) : Nothing ();
347366 }
348367
368+ TMaybe<TSchema> GetSystemViewSchema (ESysViewType sysViewType) const override final {
369+ Y_UNUSED (sysViewType);
370+ return Nothing ();
371+ }
372+
349373 TVector<TString> GetSystemViewNames (ETarget target) const override {
350374 Y_UNUSED (target);
351375 return {};
0 commit comments