aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornsofya <nsofya@yandex-team.com>2023-07-06 14:52:01 +0300
committernsofya <nsofya@yandex-team.com>2023-07-06 14:52:01 +0300
commitecee0af8aa2ae702aae742aacbb12fab5e3512d7 (patch)
treed0af3ea9d137209c0d0a8f034207c3b9e3ea0dfa
parenta7b48042dd4d955b69ba9cb6af03b7111849e64c (diff)
downloadydb-ecee0af8aa2ae702aae742aacbb12fab5e3512d7.tar.gz
KIKIMR-17138 Sparate Ttl and Tiering in alter table request
-rw-r--r--ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp102
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_alter_olap_table.cpp20
2 files changed, 114 insertions, 8 deletions
diff --git a/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp b/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp
index b4b7a52c38..2a31d403a8 100644
--- a/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp
+++ b/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp
@@ -4928,6 +4928,102 @@ Y_UNIT_TEST_SUITE(KqpOlapScheme) {
}
}
+ Y_UNIT_TEST(AddColumnWithTtl) {
+ TKikimrSettings runnerSettings;
+ runnerSettings.WithSampleTables = false;
+ TTestHelper testHelper(runnerSettings);
+
+ TVector<TTestHelper::TColumnSchema> schema = {
+ TTestHelper::TColumnSchema().SetName("id").SetType(NScheme::NTypeIds::Int32).SetNullable(false),
+ TTestHelper::TColumnSchema().SetName("id_second").SetType(NScheme::NTypeIds::Int32).SetNullable(false),
+ TTestHelper::TColumnSchema().SetName("level").SetType(NScheme::NTypeIds::Int32),
+ TTestHelper::TColumnSchema().SetName("created_at").SetType(NScheme::NTypeIds::Timestamp).SetNullable(false)
+ };
+
+ TTestHelper::TColumnTable testTable;
+ testTable.SetName("/Root/ColumnTableTest").SetPrimaryKey({"id", "id_second"}).SetSharding({"id"}).SetSchema(schema);
+ testHelper.CreateTable(testTable);
+
+ {
+ auto alterQuery = TStringBuilder() << "ALTER TABLE `" << testTable.GetName() << "`SET (TTL = Interval(\"PT1H\") ON created_at);";
+ auto alterResult = testHelper.GetSession().ExecuteSchemeQuery(alterQuery).GetValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(alterResult.GetStatus(), EStatus::SUCCESS, alterResult.GetIssues().ToString());
+ }
+ {
+ auto settings = TDescribeTableSettings().WithTableStatistics(true);
+ auto describeResult = testHelper.GetSession().DescribeTable("/Root/ColumnTableTest", settings).GetValueSync();
+ UNIT_ASSERT_C(describeResult.IsSuccess(), describeResult.GetIssues().ToString());
+
+ const auto& description = describeResult.GetTableDescription();
+ auto columns = description.GetTableColumns();
+ UNIT_ASSERT_VALUES_EQUAL(columns.size(), 4);
+ UNIT_ASSERT_VALUES_EQUAL(description.GetTtlSettings()->GetDateTypeColumn().GetExpireAfter(), TDuration::Hours(1));
+ }
+ {
+ schema.push_back(TTestHelper::TColumnSchema().SetName("new_column").SetType(NScheme::NTypeIds::Uint64));
+ auto alterQuery = TStringBuilder() << "ALTER TABLE `" << testTable.GetName() << "` ADD COLUMN new_column Uint64;";
+ auto alterResult = testHelper.GetSession().ExecuteSchemeQuery(alterQuery).GetValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(alterResult.GetStatus(), EStatus::SUCCESS, alterResult.GetIssues().ToString());
+ }
+ {
+ auto settings = TDescribeTableSettings().WithTableStatistics(true);
+ auto describeResult = testHelper.GetSession().DescribeTable("/Root/ColumnTableTest", settings).GetValueSync();
+ UNIT_ASSERT_C(describeResult.IsSuccess(), describeResult.GetIssues().ToString());
+
+ const auto& description = describeResult.GetTableDescription();
+ auto columns = description.GetTableColumns();
+ UNIT_ASSERT_VALUES_EQUAL(columns.size(), 5);
+ UNIT_ASSERT_VALUES_EQUAL(description.GetTtlSettings()->GetDateTypeColumn().GetExpireAfter(), TDuration::Hours(1));
+ }
+ {
+ schema.push_back(TTestHelper::TColumnSchema().SetName("new_column").SetType(NScheme::NTypeIds::Uint64));
+ auto alterQuery = TStringBuilder() << "ALTER TABLE `" << testTable.GetName() << R"(` SET(TIERING = 'tiering1');)";
+ auto alterResult = testHelper.GetSession().ExecuteSchemeQuery(alterQuery).GetValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(alterResult.GetStatus(), EStatus::SUCCESS, alterResult.GetIssues().ToString());
+ }
+ {
+ auto settings = TDescribeTableSettings().WithTableStatistics(true);
+ auto describeResult = testHelper.GetSession().DescribeTable("/Root/ColumnTableTest", settings).GetValueSync();
+ UNIT_ASSERT_C(describeResult.IsSuccess(), describeResult.GetIssues().ToString());
+
+ const auto& description = describeResult.GetTableDescription();
+ UNIT_ASSERT(description.GetTiering());
+ UNIT_ASSERT_VALUES_EQUAL(*description.GetTiering(), "tiering1");
+ UNIT_ASSERT_VALUES_EQUAL(description.GetTtlSettings()->GetDateTypeColumn().GetExpireAfter(), TDuration::Hours(1));
+ }
+ {
+ schema.push_back(TTestHelper::TColumnSchema().SetName("new_column").SetType(NScheme::NTypeIds::Uint64));
+ auto alterQuery = TStringBuilder() << "ALTER TABLE `" << testTable.GetName() << R"(` RESET (TTL);)";
+ auto alterResult = testHelper.GetSession().ExecuteSchemeQuery(alterQuery).GetValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(alterResult.GetStatus(), EStatus::SUCCESS, alterResult.GetIssues().ToString());
+ }
+ {
+ auto settings = TDescribeTableSettings().WithTableStatistics(true);
+ auto describeResult = testHelper.GetSession().DescribeTable("/Root/ColumnTableTest", settings).GetValueSync();
+ UNIT_ASSERT_C(describeResult.IsSuccess(), describeResult.GetIssues().ToString());
+
+ const auto& description = describeResult.GetTableDescription();
+ UNIT_ASSERT(description.GetTiering());
+ UNIT_ASSERT_VALUES_EQUAL(*description.GetTiering(), "tiering1");
+ UNIT_ASSERT(!description.GetTtlSettings());
+ }
+ {
+ schema.push_back(TTestHelper::TColumnSchema().SetName("new_column").SetType(NScheme::NTypeIds::Uint64));
+ auto alterQuery = TStringBuilder() << "ALTER TABLE `" << testTable.GetName() << R"(` RESET (TIERING);)";
+ auto alterResult = testHelper.GetSession().ExecuteSchemeQuery(alterQuery).GetValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(alterResult.GetStatus(), EStatus::SUCCESS, alterResult.GetIssues().ToString());
+ }
+ {
+ auto settings = TDescribeTableSettings().WithTableStatistics(true);
+ auto describeResult = testHelper.GetSession().DescribeTable("/Root/ColumnTableTest", settings).GetValueSync();
+ UNIT_ASSERT_C(describeResult.IsSuccess(), describeResult.GetIssues().ToString());
+
+ const auto& description = describeResult.GetTableDescription();
+ UNIT_ASSERT(!description.GetTiering());
+ UNIT_ASSERT(!description.GetTtlSettings());
+ }
+ }
+
Y_UNIT_TEST(AddColumn) {
TKikimrSettings runnerSettings;
runnerSettings.WithSampleTables = false;
@@ -5098,7 +5194,7 @@ Y_UNIT_TEST_SUITE(KqpOlapScheme) {
{
schema.push_back(TTestHelper::TColumnSchema().SetName("new_column").SetType(NScheme::NTypeIds::Uint64));
auto alterQuery = TStringBuilder() << "ALTER TABLESTORE `" << testTableStore.GetName() << "` ADD COLUMN new_column Uint64;";
-
+
auto alterResult = testHelper.GetSession().ExecuteSchemeQuery(alterQuery).GetValueSync();
UNIT_ASSERT_VALUES_EQUAL_C(alterResult.GetStatus(), EStatus::SUCCESS, alterResult.GetIssues().ToString());
}
@@ -5367,7 +5463,7 @@ Y_UNIT_TEST_SUITE(KqpOlapTypes) {
Y_UNIT_TEST(Timestamp) {
TKikimrSettings runnerSettings;
runnerSettings.WithSampleTables = false;
-
+
TTestHelper testHelper(runnerSettings);
TVector<TTestHelper::TColumnSchema> schema = {
@@ -5392,7 +5488,7 @@ Y_UNIT_TEST_SUITE(KqpOlapTypes) {
Y_UNIT_TEST(TimestampCmpErr) {
TKikimrSettings runnerSettings;
runnerSettings.WithSampleTables = false;
-
+
TTestHelper testHelper(runnerSettings);
TVector<TTestHelper::TColumnSchema> schema = {
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_alter_olap_table.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_alter_olap_table.cpp
index 26f0479ac6..6a3308a3b7 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_alter_olap_table.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_alter_olap_table.cpp
@@ -102,13 +102,23 @@ public:
currentSchema.Serialize(schemaUdpateProto);
*alterData->Description.MutableSchema() = schemaUdpateProto;
}
-
+
+ const ui64 currentTtlVersion = tableInfo->Description.HasTtlSettings() ? tableInfo->Description.GetTtlSettings().GetVersion() : 0;
if (AlterRequest.HasAlterTtlSettings()) {
- if (!currentSchema.ValidateTtlSettings(AlterRequest.GetAlterTtlSettings(), errors)) {
- return nullptr;
+ const auto& ttlUpdate = AlterRequest.GetAlterTtlSettings();
+ if (ttlUpdate.HasUseTiering()) {
+ alterData->Description.MutableTtlSettings()->SetUseTiering(ttlUpdate.GetUseTiering());
+ }
+
+ if (ttlUpdate.HasEnabled()) {
+ if (!currentSchema.ValidateTtlSettings(ttlUpdate, errors)) {
+ return nullptr;
+ }
+ *alterData->Description.MutableTtlSettings()->MutableEnabled() = ttlUpdate.GetEnabled();
+ }
+ if (ttlUpdate.HasDisabled()) {
+ *alterData->Description.MutableTtlSettings()->MutableDisabled() = ttlUpdate.GetDisabled();
}
- const ui64 currentTtlVersion = alterData->Description.HasTtlSettings() ? alterData->Description.GetTtlSettings().GetVersion() : 0;
- *alterData->Description.MutableTtlSettings() = AlterRequest.GetAlterTtlSettings();
alterData->Description.MutableTtlSettings()->SetVersion(currentTtlVersion + 1);
}
return alterData;