Skip to content

Commit c19918c

Browse files
authored
Merge 39423f0 into 1b51ba9
2 parents 1b51ba9 + 39423f0 commit c19918c

File tree

76 files changed

+537
-1293
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+537
-1293
lines changed

ydb/core/grpc_services/rpc_create_table.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,6 @@ class TCreateTableRPC : public TRpcSchemeRequestActor<TCreateTableRPC, TEvCreate
136136
return false;
137137
}
138138
}
139-
tableDesc->MutableTtlSettings()->SetUseTiering(req.tiering());
140139

141140
return true;
142141
}

ydb/core/grpc_services/rpc_log_store.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -435,8 +435,6 @@ class TCreateLogTableRPC : public TRpcSchemeRequestActor<TCreateLogTableRPC, TEv
435435
if (!FillTtlSettings(*create->MutableTtlSettings()->MutableEnabled(), req->ttl_settings(), status, error)) {
436436
return Reply(status, error, NKikimrIssues::TIssuesIds::DEFAULT_ERROR, ctx);
437437
}
438-
} else if (req->has_tiering_settings()) {
439-
create->MutableTtlSettings()->SetUseTiering(req->tiering_settings().tiering_id());
440438
}
441439

442440
create->SetColumnShardCount(req->shards_count());
@@ -600,12 +598,6 @@ class TAlterLogTableRPC : public TRpcSchemeRequestActor<TAlterLogTableRPC, TEvAl
600598
alter->MutableAlterTtlSettings()->MutableDisabled();
601599
}
602600

603-
if (req->has_set_tiering_settings()) {
604-
alter->MutableAlterTtlSettings()->SetUseTiering(req->set_tiering_settings().tiering_id());
605-
} else if (req->has_drop_tiering_settings()) {
606-
alter->MutableAlterTtlSettings()->SetUseTiering("");
607-
}
608-
609601
ctx.Send(MakeTxProxyID(), proposeRequest.release());
610602
}
611603
};

ydb/core/kqp/host/kqp_gateway_proxy.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -276,16 +276,6 @@ bool ConvertCreateTableSettingsToProto(NYql::TKikimrTableMetadataPtr metadata, Y
276276
}
277277
}
278278

279-
if (const auto& tiering = metadata->TableSettings.Tiering) {
280-
if (tiering.IsSet()) {
281-
proto.set_tiering(tiering.GetValueSet());
282-
} else {
283-
code = Ydb::StatusIds::BAD_REQUEST;
284-
error = "Can't reset TIERING";
285-
return false;
286-
}
287-
}
288-
289279
if (metadata->TableSettings.StoreExternalBlobs) {
290280
auto& storageSettings = *proto.mutable_storage_settings();
291281
TString value = to_lower(metadata->TableSettings.StoreExternalBlobs.GetRef());
@@ -520,7 +510,15 @@ bool FillCreateColumnTableDesc(NYql::TKikimrTableMetadataPtr metadata,
520510
const auto& inputSettings = metadata->TableSettings.TtlSettings.GetValueSet();
521511
auto& resultSettings = *tableDesc.MutableTtlSettings();
522512
resultSettings.MutableEnabled()->SetColumnName(inputSettings.ColumnName);
523-
resultSettings.MutableEnabled()->SetExpireAfterSeconds(inputSettings.ExpireAfter.Seconds());
513+
for (const auto& tier : inputSettings.Tiers) {
514+
auto* tierProto = resultSettings.MutableEnabled()->AddTiers();
515+
tierProto->SetApplyAfterSeconds(tier.ApplyAfter.Seconds());
516+
if (tier.StorageName) {
517+
tierProto->MutableEvictToExternalStorage()->SetStorageName(*tier.StorageName);
518+
} else {
519+
tierProto->MutableDelete();
520+
}
521+
}
524522
if (inputSettings.ColumnUnit) {
525523
resultSettings.MutableEnabled()->SetColumnUnit(static_cast<NKikimrSchemeOp::TTTLSettings::EUnit>(*inputSettings.ColumnUnit));
526524
}

ydb/core/kqp/provider/yql_kikimr_exec.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1657,13 +1657,6 @@ class TKiSinkCallableExecutionTransformer : public TAsyncCallbackTransformer<TKi
16571657
ConvertTtlSettingsToProto(ttlSettings, *alterTableRequest.mutable_set_ttl_settings());
16581658
} else if (name == "resetTtlSettings") {
16591659
alterTableRequest.mutable_drop_ttl_settings();
1660-
} else if (name == "setTiering") {
1661-
const auto tieringName = TString(
1662-
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value()
1663-
);
1664-
alterTableRequest.set_set_tiering(tieringName);
1665-
} else if (name == "resetTiering") {
1666-
alterTableRequest.mutable_drop_tiering();
16671660
} else {
16681661
ctx.AddError(TIssue(ctx.GetPosition(setting.Name().Pos()),
16691662
TStringBuilder() << "Unknown table profile setting: " << name));

ydb/core/kqp/provider/yql_kikimr_gateway.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -101,42 +101,36 @@ bool TTtlSettings::TryParse(const NNodes::TCoNameValueTupleList& node, TTtlSetti
101101
if (name == "columnName") {
102102
YQL_ENSURE(field.Value().Maybe<TCoAtom>());
103103
settings.ColumnName = field.Value().Cast<TCoAtom>().StringValue();
104-
} else if (name == "expireAfter") {
105-
// TODO (yentsovsemyon): remove this clause after extending TTL syntax in YQL
106-
YQL_ENSURE(field.Value().Maybe<TCoInterval>());
107-
auto value = FromString<i64>(field.Value().Cast<TCoInterval>().Literal().Value());
108-
if (value < 0) {
109-
error = "Interval value cannot be negative";
110-
return false;
111-
}
112-
113-
settings.ExpireAfter = TDuration::FromValue(value);
114104
} else if (name == "tiers") {
115105
YQL_ENSURE(field.Value().Maybe<TExprList>());
116106
auto listNode = field.Value().Cast<TExprList>();
117107

118108
for (size_t i = 0; i < listNode.Size(); ++i) {
119109
auto tierNode = listNode.Item(i);
120110

111+
std::optional<TString> storageName;
112+
TDuration evictionDelay;
121113
YQL_ENSURE(tierNode.Maybe<TCoNameValueTupleList>());
122114
for (const auto& tierField : tierNode.Cast<TCoNameValueTupleList>()) {
123115
auto tierFieldName = tierField.Name().Value();
124116
if (tierFieldName == "storageName") {
125-
error = "TTL cannot contain tiered storage: tiering in TTL syntax is not supported";
126-
return false;
117+
YQL_ENSURE(tierField.Value().Maybe<TCoAtom>());
118+
storageName = tierField.Value().Cast<TCoAtom>().StringValue();
127119
} else if (tierFieldName == "evictionDelay") {
128120
YQL_ENSURE(tierField.Value().Maybe<TCoInterval>());
129121
auto value = FromString<i64>(tierField.Value().Cast<TCoInterval>().Literal().Value());
130122
if (value < 0) {
131123
error = "Interval value cannot be negative";
132124
return false;
133125
}
134-
settings.ExpireAfter = TDuration::FromValue(value);
126+
evictionDelay = TDuration::FromValue(value);
135127
} else {
136128
error = TStringBuilder() << "Unknown field: " << tierFieldName;
137129
return false;
138130
}
139131
}
132+
133+
settings.Tiers.emplace_back(evictionDelay, storageName);
140134
}
141135
} else if (name == "columnUnit") {
142136
YQL_ENSURE(field.Value().Maybe<TCoAtom>());
@@ -318,9 +312,15 @@ void ConvertTtlSettingsToProto(const NYql::TTtlSettings& settings, Ydb::Table::T
318312
opts.set_column_name(settings.ColumnName);
319313
opts.set_column_unit(static_cast<Ydb::Table::ValueSinceUnixEpochModeSettings::Unit>(*settings.ColumnUnit));
320314
}
321-
auto* deleteTier = proto.add_tiers();
322-
deleteTier->set_apply_after_seconds(settings.ExpireAfter.Seconds());
323-
deleteTier->mutable_delete_();
315+
for (const auto& tier : settings.Tiers) {
316+
auto* tierProto = proto.add_tiers();
317+
tierProto->set_apply_after_seconds(tier.ApplyAfter.Seconds());
318+
if (tier.StorageName) {
319+
tierProto->mutable_evict_to_external_storage()->set_storage_name(*tier.StorageName);
320+
} else {
321+
tierProto->mutable_delete_();
322+
}
323+
}
324324
}
325325

326326
Ydb::FeatureFlag::Status GetFlagValue(const TMaybe<bool>& value) {

ydb/core/kqp/provider/yql_kikimr_gateway.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,14 @@ struct TTtlSettings {
221221
Nanoseconds = 4,
222222
};
223223

224+
struct TTier {
225+
TDuration ApplyAfter;
226+
std::optional<TString> StorageName;
227+
};
228+
224229
TString ColumnName;
225-
TDuration ExpireAfter;
226230
TMaybe<EUnit> ColumnUnit;
231+
std::vector<TTier> Tiers;
227232

228233
static bool TryParse(const NNodes::TCoNameValueTupleList& node, TTtlSettings& settings, TString& error);
229234
};
@@ -241,7 +246,6 @@ struct TTableSettings {
241246
TMaybe<TString> KeyBloomFilter;
242247
TMaybe<TString> ReadReplicasSettings;
243248
TResetableSetting<TTtlSettings, void> TtlSettings;
244-
TResetableSetting<TString, void> Tiering;
245249
TMaybe<TString> PartitionByHashFunction;
246250
TMaybe<TString> StoreExternalBlobs;
247251

ydb/core/kqp/provider/yql_kikimr_type_ann.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1251,14 +1251,6 @@ virtual TStatus HandleCreateTable(TKiCreateTable create, TExprContext& ctx) over
12511251
ctx.AddError(TIssue(ctx.GetPosition(setting.Name().Pos()),
12521252
"Can't reset TTL settings"));
12531253
return TStatus::Error;
1254-
} else if (name == "setTiering") {
1255-
meta->TableSettings.Tiering.Set(TString(
1256-
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value()
1257-
));
1258-
} else if (name == "resetTiering") {
1259-
ctx.AddError(TIssue(ctx.GetPosition(setting.Name().Pos()),
1260-
"Can't reset TIERING"));
1261-
return TStatus::Error;
12621254
} else if (name == "storeType") {
12631255
TMaybe<TString> storeType = TString(setting.Value().Cast<TCoAtom>().Value());
12641256
if (storeType && to_lower(storeType.GetRef()) == "column") {

ydb/core/kqp/ut/common/columnshard.cpp

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -68,29 +68,14 @@ namespace NKqp {
6868
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
6969
}
7070

71-
TString TTestHelper::CreateTieringRule(const TString& tierName, const TString& columnName) {
72-
const TString ruleName = tierName + "_" + columnName;
73-
const TString configTieringStr = TStringBuilder() << R"({
74-
"rules" : [
75-
{
76-
"tierName" : ")" << tierName << R"(",
77-
"durationForEvict" : "10d"
78-
}
79-
]
80-
})";
81-
auto result = GetSession().ExecuteSchemeQuery("CREATE OBJECT IF NOT EXISTS " + ruleName + " (TYPE TIERING_RULE) WITH (defaultColumn = " + columnName + ", description = `" + configTieringStr + "`)").GetValueSync();
82-
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
83-
return ruleName;
84-
}
85-
86-
void TTestHelper::SetTiering(const TString& tableName, const TString& ruleName) {
87-
auto alterQuery = TStringBuilder() << "ALTER TABLE `" << tableName << "` SET (TIERING = '" << ruleName << "')";
71+
void TTestHelper::SetTiering(const TString& tableName, const TString& tierName, const TString& columnName) {
72+
auto alterQuery = TStringBuilder() << "ALTER TABLE `" << tableName << "` SET TTL Interval(\"P10D\") TO EXTERNAL DATA SOURCE `" << tierName << "` ON `" << columnName << "`;";
8873
auto result = GetSession().ExecuteSchemeQuery(alterQuery).GetValueSync();
8974
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
9075
}
9176

9277
void TTestHelper::ResetTiering(const TString& tableName) {
93-
auto alterQuery = TStringBuilder() << "ALTER TABLE `" << tableName << "` RESET (TIERING)";
78+
auto alterQuery = TStringBuilder() << "ALTER TABLE `" << tableName << "` RESET (TTL)";
9479
auto result = GetSession().ExecuteSchemeQuery(alterQuery).GetValueSync();
9580
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
9681
}

ydb/core/kqp/ut/common/columnshard.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,10 @@ class TTestHelper {
109109
NYdb::NTable::TSession& GetSession();
110110
void CreateTable(const TColumnTableBase& table, const NYdb::EStatus expectedStatus = NYdb::EStatus::SUCCESS);
111111
void DropTable(const TString& tableName);
112+
void EnsureSecret(const TString& name, const TString& value);
112113
void CreateTier(const TString& tierName);
113114
TString CreateTieringRule(const TString& tierName, const TString& columnName);
114-
void SetTiering(const TString& tableName, const TString& ruleName);
115+
void SetTiering(const TString& tableName, const TString& tierName, const TString& columnName);
115116
void ResetTiering(const TString& tableName);
116117
void BulkUpsert(
117118
const TColumnTable& table, TTestHelper::TUpdatesBuilder& updates, const Ydb::StatusIds_StatusCode& opStatus = Ydb::StatusIds::SUCCESS);

0 commit comments

Comments
 (0)