Skip to content

Commit 4a3f195

Browse files
committed
External data sources: describe in SDK (#14483)
1 parent d3317ca commit 4a3f195

File tree

6 files changed

+250
-1
lines changed

6 files changed

+250
-1
lines changed

include/ydb-cpp-sdk/client/table/table.h

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ class ColumnFamily;
2222
class CreateTableRequest;
2323
class Changefeed;
2424
class ChangefeedDescription;
25+
class DescribeExternalDataSourceResult;
26+
class DescribeExternalTableResult;
2527
class DescribeTableResult;
2628
class ExplicitPartitions;
2729
class GlobalIndexSettings;
@@ -1068,11 +1070,16 @@ class TRenameItem {
10681070

10691071
////////////////////////////////////////////////////////////////////////////////
10701072

1073+
class TDescribeExternalDataSourceResult;
1074+
class TDescribeExternalTableResult;
1075+
10711076
using TAsyncCreateSessionResult = NThreading::TFuture<TCreateSessionResult>;
10721077
using TAsyncDataQueryResult = NThreading::TFuture<TDataQueryResult>;
10731078
using TAsyncPrepareQueryResult = NThreading::TFuture<TPrepareQueryResult>;
10741079
using TAsyncExplainDataQueryResult = NThreading::TFuture<TExplainQueryResult>;
10751080
using TAsyncDescribeTableResult = NThreading::TFuture<TDescribeTableResult>;
1081+
using TAsyncDescribeExternalDataSourceResult = NThreading::TFuture<TDescribeExternalDataSourceResult>;
1082+
using TAsyncDescribeExternalTableResult = NThreading::TFuture<TDescribeExternalTableResult>;
10761083
using TAsyncBeginTransactionResult = NThreading::TFuture<TBeginTransactionResult>;
10771084
using TAsyncCommitTransactionResult = NThreading::TFuture<TCommitTransactionResult>;
10781085
using TAsyncTablePartIterator = NThreading::TFuture<TTablePartIterator>;
@@ -1694,6 +1701,10 @@ struct TDescribeTableSettings : public TOperationRequestSettings<TDescribeTableS
16941701
FLUENT_SETTING_DEFAULT(bool, WithShardNodesInfo, false);
16951702
};
16961703

1704+
struct TDescribeExternalDataSourceSettings : public TOperationRequestSettings<TDescribeExternalDataSourceSettings> {};
1705+
1706+
struct TDescribeExternalTableSettings : public TOperationRequestSettings<TDescribeExternalTableSettings> {};
1707+
16971708
struct TExplainDataQuerySettings : public TOperationRequestSettings<TExplainDataQuerySettings> {
16981709
FLUENT_SETTING_DEFAULT(bool, WithCollectFullDiagnostics, false);
16991710
};
@@ -1778,6 +1789,12 @@ class TSession {
17781789
TAsyncDescribeTableResult DescribeTable(const std::string& path,
17791790
const TDescribeTableSettings& settings = TDescribeTableSettings());
17801791

1792+
TAsyncDescribeExternalDataSourceResult DescribeExternalDataSource(const std::string& path,
1793+
const TDescribeExternalDataSourceSettings& settings = {});
1794+
1795+
TAsyncDescribeExternalTableResult DescribeExternalTable(const std::string& path,
1796+
const TDescribeExternalTableSettings& settings = {});
1797+
17811798
TAsyncBeginTransactionResult BeginTransaction(const TTxSettings& txSettings = TTxSettings(),
17821799
const TBeginTxSettings& settings = TBeginTxSettings());
17831800

@@ -2194,5 +2211,57 @@ class TReadRowsResult : public TStatus {
21942211
}
21952212
};
21962213

2214+
class TExternalDataSourceDescription {
2215+
public:
2216+
TExternalDataSourceDescription(Ydb::Table::DescribeExternalDataSourceResult&& description);
2217+
2218+
private:
2219+
class TImpl;
2220+
std::shared_ptr<TImpl> Impl_;
2221+
2222+
friend class NYdb::V3::TProtoAccessor;
2223+
const Ydb::Table::DescribeExternalDataSourceResult& GetProto() const;
2224+
};
2225+
2226+
//! Represents the result of a DescribeExternalDataSource call.
2227+
class TDescribeExternalDataSourceResult : public NScheme::TDescribePathResult {
2228+
public:
2229+
TDescribeExternalDataSourceResult(
2230+
TStatus&& status,
2231+
Ydb::Table::DescribeExternalDataSourceResult&& description
2232+
);
2233+
2234+
TExternalDataSourceDescription GetExternalDataSourceDescription() const;
2235+
2236+
private:
2237+
TExternalDataSourceDescription ExternalDataSourceDescription_;
2238+
};
2239+
2240+
class TExternalTableDescription {
2241+
public:
2242+
TExternalTableDescription(Ydb::Table::DescribeExternalTableResult&& description);
2243+
2244+
private:
2245+
class TImpl;
2246+
std::shared_ptr<TImpl> Impl_;
2247+
2248+
friend class NYdb::V3::TProtoAccessor;
2249+
const Ydb::Table::DescribeExternalTableResult& GetProto() const;
2250+
};
2251+
2252+
//! Represents the result of a DescribeExternalTable call.
2253+
class TDescribeExternalTableResult : public NScheme::TDescribePathResult {
2254+
public:
2255+
TDescribeExternalTableResult(
2256+
TStatus&& status,
2257+
Ydb::Table::DescribeExternalTableResult&& description
2258+
);
2259+
2260+
TExternalTableDescription GetExternalTableDescription() const;
2261+
2262+
private:
2263+
TExternalTableDescription ExternalTableDescription_;
2264+
};
2265+
21972266
} // namespace NTable
21982267
} // namespace NYdb

src/api/grpc/ydb_table_v1.proto

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ service TableService {
1010
// Create new session. Implicit session creation is forbidden,
1111
// so user must create new session before execute any query,
1212
// otherwise BAD_SESSION status will be returned.
13-
// Simultaneous execution of requests are forbiden.
13+
// Simultaneous execution of requests are forbidden.
1414
// Sessions are volatile, can be invalidated by server, for example in case
1515
// of fatal errors. All requests with this session will fail with BAD_SESSION status.
1616
// So, client must be able to handle BAD_SESSION status.
@@ -85,4 +85,10 @@ service TableService {
8585

8686
// Executes scan query with streaming result.
8787
rpc StreamExecuteScanQuery(Table.ExecuteScanQueryRequest) returns (stream Table.ExecuteScanQueryPartialResponse);
88+
89+
// Returns information about a given external data source.
90+
rpc DescribeExternalDataSource(Table.DescribeExternalDataSourceRequest) returns (Table.DescribeExternalDataSourceResponse);
91+
92+
// Returns information about a given external table.
93+
rpc DescribeExternalTable(Table.DescribeExternalTableRequest) returns (Table.DescribeExternalTableResponse);
8894
}

src/api/protos/ydb_table.proto

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1294,3 +1294,43 @@ message ExecuteScanQueryPartialResult {
12941294
// collects additional diagnostics about query compilation, including query plan and scheme
12951295
string query_full_diagnostics = 7;
12961296
}
1297+
1298+
// Returns information about an external data source with a given path.
1299+
message DescribeExternalDataSourceRequest {
1300+
Ydb.Operations.OperationParams operation_params = 1;
1301+
string path = 2;
1302+
}
1303+
1304+
message DescribeExternalDataSourceResponse {
1305+
// Holds DescribeExternalDataSourceResult in case of a successful call.
1306+
Ydb.Operations.Operation operation = 1;
1307+
}
1308+
1309+
message DescribeExternalDataSourceResult {
1310+
// Description of a generic scheme object.
1311+
Ydb.Scheme.Entry self = 1;
1312+
optional string source_type = 2;
1313+
optional string location = 3;
1314+
map<string, string> properties = 4;
1315+
}
1316+
1317+
// Returns information about an external table with a given path.
1318+
message DescribeExternalTableRequest {
1319+
Ydb.Operations.OperationParams operation_params = 1;
1320+
string path = 2;
1321+
}
1322+
1323+
message DescribeExternalTableResponse {
1324+
// Holds DescribeExternalTableResult in case of a successful call.
1325+
Ydb.Operations.Operation operation = 1;
1326+
}
1327+
1328+
message DescribeExternalTableResult {
1329+
// Description of a generic scheme object.
1330+
Ydb.Scheme.Entry self = 1;
1331+
optional string source_type = 2;
1332+
optional string data_source_path = 3;
1333+
optional string location = 4;
1334+
repeated ColumnMeta columns = 5;
1335+
map<string, string> content = 6;
1336+
}

src/client/table/impl/table_client.cpp

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,62 @@ TAsyncDescribeTableResult TTableClient::TImpl::DescribeTable(const std::string&
557557
return promise.GetFuture();
558558
}
559559

560+
TAsyncDescribeExternalDataSourceResult TTableClient::TImpl::DescribeExternalDataSource(const std::string& path, const TDescribeExternalDataSourceSettings& settings) {
561+
auto request = MakeOperationRequest<Ydb::Table::DescribeExternalDataSourceRequest>(settings);
562+
request.set_path(path);
563+
564+
auto promise = NewPromise<TDescribeExternalDataSourceResult>();
565+
566+
auto extractor = [promise, settings](google::protobuf::Any* any, TPlainStatus status) mutable {
567+
Ydb::Table::DescribeExternalDataSourceResult proto;
568+
if (any) {
569+
any->UnpackTo(&proto);
570+
}
571+
promise.SetValue(TDescribeExternalDataSourceResult(TStatus(std::move(status)), std::move(proto)));
572+
};
573+
574+
Connections_->RunDeferred<Ydb::Table::V1::TableService,
575+
Ydb::Table::DescribeExternalDataSourceRequest,
576+
Ydb::Table::DescribeExternalDataSourceResponse>(
577+
std::move(request),
578+
extractor,
579+
&Ydb::Table::V1::TableService::Stub::AsyncDescribeExternalDataSource,
580+
DbDriverState_,
581+
INITIAL_DEFERRED_CALL_DELAY,
582+
TRpcRequestSettings::Make(settings)
583+
);
584+
585+
return promise.GetFuture();
586+
}
587+
588+
TAsyncDescribeExternalTableResult TTableClient::TImpl::DescribeExternalTable(const std::string& path, const TDescribeExternalTableSettings& settings) {
589+
auto request = MakeOperationRequest<Ydb::Table::DescribeExternalTableRequest>(settings);
590+
request.set_path(path);
591+
592+
auto promise = NewPromise<TDescribeExternalTableResult>();
593+
594+
auto extractor = [promise, settings](google::protobuf::Any* any, TPlainStatus status) mutable {
595+
Ydb::Table::DescribeExternalTableResult proto;
596+
if (any) {
597+
any->UnpackTo(&proto);
598+
}
599+
promise.SetValue(TDescribeExternalTableResult(TStatus(std::move(status)), std::move(proto)));
600+
};
601+
602+
Connections_->RunDeferred<Ydb::Table::V1::TableService,
603+
Ydb::Table::DescribeExternalTableRequest,
604+
Ydb::Table::DescribeExternalTableResponse>(
605+
std::move(request),
606+
extractor,
607+
&Ydb::Table::V1::TableService::Stub::AsyncDescribeExternalTable,
608+
DbDriverState_,
609+
INITIAL_DEFERRED_CALL_DELAY,
610+
TRpcRequestSettings::Make(settings)
611+
);
612+
613+
return promise.GetFuture();
614+
}
615+
560616
TAsyncPrepareQueryResult TTableClient::TImpl::PrepareDataQuery(const TSession& session, const std::string& query,
561617
const TPrepareDataQuerySettings& settings)
562618
{

src/client/table/impl/table_client.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ class TTableClient::TImpl: public TClientImplCommon<TTableClient::TImpl>, public
6666
TFuture<TStatus> RenameTables(Ydb::Table::RenameTablesRequest&& request, const TRenameTablesSettings& settings);
6767
TFuture<TStatus> DropTable(const std::string& sessionId, const std::string& path, const TDropTableSettings& settings);
6868
TAsyncDescribeTableResult DescribeTable(const std::string& sessionId, const std::string& path, const TDescribeTableSettings& settings);
69+
TAsyncDescribeExternalDataSourceResult DescribeExternalDataSource(const std::string& path, const TDescribeExternalDataSourceSettings& settings);
70+
TAsyncDescribeExternalTableResult DescribeExternalTable(const std::string& path, const TDescribeExternalTableSettings& settings);
6971

7072
template<typename TParamsType>
7173
TAsyncDataQueryResult ExecuteDataQuery(TSession& session, const std::string& query, const TTxControl& txControl,

src/client/table/table.cpp

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1830,6 +1830,14 @@ TAsyncDescribeTableResult TSession::DescribeTable(const std::string& path, const
18301830
return Client_->DescribeTable(SessionImpl_->GetId(), path, settings);
18311831
}
18321832

1833+
TAsyncDescribeExternalDataSourceResult TSession::DescribeExternalDataSource(const std::string& path, const TDescribeExternalDataSourceSettings& settings) {
1834+
return Client_->DescribeExternalDataSource(path, settings);
1835+
}
1836+
1837+
TAsyncDescribeExternalTableResult TSession::DescribeExternalTable(const std::string& path, const TDescribeExternalTableSettings& settings) {
1838+
return Client_->DescribeExternalTable(path, settings);
1839+
}
1840+
18331841
TAsyncDataQueryResult TSession::ExecuteDataQuery(const std::string& query, const TTxControl& txControl,
18341842
const TExecDataQuerySettings& settings)
18351843
{
@@ -3308,5 +3316,73 @@ TReadRowsResult::TReadRowsResult(TStatus&& status, TResultSet&& resultSet)
33083316
, ResultSet(std::move(resultSet))
33093317
{}
33103318

3319+
////////////////////////////////////////////////////////////////////////////////
3320+
3321+
class TExternalDataSourceDescription::TImpl {
3322+
Ydb::Table::DescribeExternalDataSourceResult Proto_;
3323+
3324+
public:
3325+
TImpl(Ydb::Table::DescribeExternalDataSourceResult&& description)
3326+
: Proto_(std::move(description))
3327+
{}
3328+
3329+
const Ydb::Table::DescribeExternalDataSourceResult& GetProto() const {
3330+
return Proto_;
3331+
}
3332+
};
3333+
3334+
TExternalDataSourceDescription::TExternalDataSourceDescription(Ydb::Table::DescribeExternalDataSourceResult&& description)
3335+
: Impl_(std::make_shared<TImpl>(std::move(description)))
3336+
{
3337+
}
3338+
3339+
const Ydb::Table::DescribeExternalDataSourceResult& TExternalDataSourceDescription::GetProto() const {
3340+
return Impl_->GetProto();
3341+
}
3342+
3343+
TDescribeExternalDataSourceResult::TDescribeExternalDataSourceResult(TStatus&& status, Ydb::Table::DescribeExternalDataSourceResult&& description)
3344+
: NScheme::TDescribePathResult(std::move(status), description.self())
3345+
, ExternalDataSourceDescription_(std::move(description))
3346+
{}
3347+
3348+
TExternalDataSourceDescription TDescribeExternalDataSourceResult::GetExternalDataSourceDescription() const {
3349+
CheckStatusOk("TDescribeExternalDataSourceResult::GetExternalDataSourceDescription");
3350+
return ExternalDataSourceDescription_;
3351+
}
3352+
3353+
////////////////////////////////////////////////////////////////////////////////
3354+
3355+
class TExternalTableDescription::TImpl {
3356+
Ydb::Table::DescribeExternalTableResult Proto_;
3357+
3358+
public:
3359+
TImpl(Ydb::Table::DescribeExternalTableResult&& description)
3360+
: Proto_(std::move(description))
3361+
{}
3362+
3363+
const Ydb::Table::DescribeExternalTableResult& GetProto() const {
3364+
return Proto_;
3365+
}
3366+
};
3367+
3368+
TExternalTableDescription::TExternalTableDescription(Ydb::Table::DescribeExternalTableResult&& description)
3369+
: Impl_(std::make_shared<TImpl>(std::move(description)))
3370+
{
3371+
}
3372+
3373+
const Ydb::Table::DescribeExternalTableResult& TExternalTableDescription::GetProto() const {
3374+
return Impl_->GetProto();
3375+
}
3376+
3377+
TDescribeExternalTableResult::TDescribeExternalTableResult(TStatus&& status, Ydb::Table::DescribeExternalTableResult&& description)
3378+
: NScheme::TDescribePathResult(std::move(status), description.self())
3379+
, ExternalTableDescription_(std::move(description))
3380+
{}
3381+
3382+
TExternalTableDescription TDescribeExternalTableResult::GetExternalTableDescription() const {
3383+
CheckStatusOk("TDescribeExternalTableResult::GetExternalTableDescription");
3384+
return ExternalTableDescription_;
3385+
}
3386+
33113387
} // namespace NTable
33123388
} // namespace NYdb

0 commit comments

Comments
 (0)