diff options
author | nsofya <nsofya@yandex-team.com> | 2023-07-06 14:52:01 +0300 |
---|---|---|
committer | nsofya <nsofya@yandex-team.com> | 2023-07-06 14:52:01 +0300 |
commit | ecee0af8aa2ae702aae742aacbb12fab5e3512d7 (patch) | |
tree | d0af3ea9d137209c0d0a8f034207c3b9e3ea0dfa | |
parent | a7b48042dd4d955b69ba9cb6af03b7111849e64c (diff) | |
download | ydb-ecee0af8aa2ae702aae742aacbb12fab5e3512d7.tar.gz |
KIKIMR-17138 Sparate Ttl and Tiering in alter table request
-rw-r--r-- | ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp | 102 | ||||
-rw-r--r-- | ydb/core/tx/schemeshard/schemeshard__operation_alter_olap_table.cpp | 20 |
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; |