Skip to content

Commit 7a1e697

Browse files
author
Vladislav Gogov
authored
New field COMPRESSION_LEVEL in Column Family (#10645)
1 parent 08196b8 commit 7a1e697

File tree

16 files changed

+219
-6
lines changed

16 files changed

+219
-6
lines changed

ydb/core/kqp/host/kqp_gateway_proxy.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,9 @@ bool ConvertCreateTableSettingsToProto(NYql::TKikimrTableMetadataPtr metadata, Y
136136
return false;
137137
}
138138
}
139+
if (family.CompressionLevel) {
140+
familyProto->set_compression_level(family.CompressionLevel.GetRef());
141+
}
139142
}
140143

141144
if (metadata->TableSettings.CompactionPolicy) {

ydb/core/kqp/provider/yql_kikimr_exec.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1556,6 +1556,9 @@ class TKiSinkCallableExecutionTransformer : public TAsyncCallbackTransformer<TKi
15561556
return SyncError();
15571557
}
15581558

1559+
} else if (name == "compression_level") {
1560+
auto level = FromString<i32>(familySetting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value());
1561+
f->set_compression_level(level);
15591562
} else {
15601563
ctx.AddError(TIssue(ctx.GetPosition(familySetting.Name().Pos()),
15611564
TStringBuilder() << "Unknown column family setting name: " << name));

ydb/core/kqp/provider/yql_kikimr_gateway.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ struct TColumnFamily {
210210
TString Name;
211211
TMaybe<TString> Data;
212212
TMaybe<TString> Compression;
213+
TMaybe<i32> CompressionLevel;
213214
};
214215

215216
struct TTtlSettings {

ydb/core/kqp/provider/yql_kikimr_type_ann.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,6 +1038,8 @@ virtual TStatus HandleCreateTable(TKiCreateTable create, TExprContext& ctx) over
10381038
family.Compression = TString(
10391039
familySetting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value()
10401040
);
1041+
} else if (name == "compression_level") {
1042+
family.CompressionLevel = FromString<i32>(familySetting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value());
10411043
} else {
10421044
ctx.AddError(TIssue(ctx.GetPosition(familySetting.Name().Pos()),
10431045
TStringBuilder() << "Unknown column family setting name: " << name));

ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2057,6 +2057,94 @@ Y_UNIT_TEST_SUITE(KqpScheme) {
20572057
}
20582058
}
20592059

2060+
Y_UNIT_TEST(CreateFamilyWithCompressionLevel) {
2061+
TKikimrRunner kikimr;
2062+
auto db = kikimr.GetTableClient();
2063+
auto session = db.CreateSession().GetValueSync().GetSession();
2064+
TString tableName = "/Root/TableWithCompressionLevel";
2065+
auto query = TStringBuilder() << R"(
2066+
--!syntax_v1
2067+
CREATE TABLE `)" << tableName
2068+
<< R"(` (
2069+
Key Uint64,
2070+
Value1 String,
2071+
Value2 Uint32,
2072+
PRIMARY KEY (Key),
2073+
FAMILY Family1 (
2074+
DATA = "test",
2075+
COMPRESSION = "lz4",
2076+
COMPRESSION_LEVEL = 5
2077+
),
2078+
);)";
2079+
auto result = session.ExecuteSchemeQuery(query).GetValueSync();
2080+
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::GENERIC_ERROR, result.GetIssues().ToString());
2081+
UNIT_ASSERT_STRING_CONTAINS(result.GetIssues().ToString(), "Field `COMPRESSION_LEVEL` is not supported for OLTP tables");
2082+
}
2083+
2084+
Y_UNIT_TEST(AlterCompressionLevelInColumnFamily) {
2085+
TKikimrRunner kikimr;
2086+
auto db = kikimr.GetTableClient();
2087+
auto session = db.CreateSession().GetValueSync().GetSession();
2088+
TString tableName = "/Root/TableWithCompressionLevel";
2089+
auto query = TStringBuilder() << R"(
2090+
--!syntax_v1
2091+
CREATE TABLE `)" << tableName
2092+
<< R"(` (
2093+
Key Uint64,
2094+
Value1 String FAMILY Family1,
2095+
Value2 Uint32,
2096+
PRIMARY KEY (Key),
2097+
FAMILY Family1 (
2098+
DATA = "test",
2099+
COMPRESSION = "lz4"
2100+
),
2101+
);)";
2102+
auto result = session.ExecuteSchemeQuery(query).GetValueSync();
2103+
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
2104+
2105+
auto queryAlter = TStringBuilder() << R"(
2106+
--!syntax_v1
2107+
ALTER TABLE `)" << tableName << R"(`
2108+
ALTER FAMILY Family1 SET COMPRESSION_LEVEL 5;)";
2109+
auto resultAlter = session.ExecuteSchemeQuery(queryAlter).GetValueSync();
2110+
UNIT_ASSERT_VALUES_EQUAL_C(resultAlter.GetStatus(), EStatus::BAD_REQUEST, resultAlter.GetIssues().ToString());
2111+
UNIT_ASSERT_STRING_CONTAINS(resultAlter.GetIssues().ToString(), "Field `COMPRESSION_LEVEL` is not supported for OLTP tables");
2112+
}
2113+
2114+
Y_UNIT_TEST(AddColumnFamilyWithCompressionLevel) {
2115+
TKikimrRunner kikimr;
2116+
auto db = kikimr.GetTableClient();
2117+
auto session = db.CreateSession().GetValueSync().GetSession();
2118+
TString tableName = "/Root/TableWithCompressionLevel";
2119+
auto query = TStringBuilder() << R"(
2120+
--!syntax_v1
2121+
CREATE TABLE `)" << tableName
2122+
<< R"(` (
2123+
Key Uint64,
2124+
Value1 String FAMILY Family1,
2125+
Value2 Uint32,
2126+
PRIMARY KEY (Key),
2127+
FAMILY Family1 (
2128+
DATA = "test",
2129+
COMPRESSION = "lz4"
2130+
),
2131+
);)";
2132+
auto result = session.ExecuteSchemeQuery(query).GetValueSync();
2133+
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
2134+
2135+
auto queryAlter = TStringBuilder() << R"(
2136+
--!syntax_v1
2137+
ALTER TABLE `)" << tableName << R"(`
2138+
ADD FAMILY Family2 (
2139+
DATA = "test",
2140+
COMPRESSION = "lz4",
2141+
COMPRESSION_LEVEL = 5
2142+
);)";
2143+
auto resultAlter = session.ExecuteSchemeQuery(queryAlter).GetValueSync();
2144+
UNIT_ASSERT_VALUES_EQUAL_C(resultAlter.GetStatus(), EStatus::BAD_REQUEST, resultAlter.GetIssues().ToString());
2145+
UNIT_ASSERT_STRING_CONTAINS(resultAlter.GetIssues().ToString(), "Field `COMPRESSION_LEVEL` is not supported for OLTP tables");
2146+
}
2147+
20602148
Y_UNIT_TEST(CreateTableWithDefaultFamily) {
20612149
TKikimrRunner kikimr;
20622150
auto db = kikimr.GetTableClient();

ydb/core/protos/flat_scheme_op.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ message TFamilyDescription {
130130
optional EColumnCache ColumnCache = 7;
131131
optional EColumnStorage Storage = 8; // DEPRECATED: use StorageConfig
132132
optional TStorageConfig StorageConfig = 9;
133+
optional int32 ColumnCodecLevel = 10;
133134
}
134135

135136
message TFastSplitSettings {

ydb/core/ydb_convert/column_families.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,12 @@ namespace NKikimr {
147147
return false;
148148
}
149149

150+
if (familySettings.has_compression_level()) {
151+
*code = Ydb::StatusIds::BAD_REQUEST;
152+
*error = "Field `COMPRESSION_LEVEL` is not supported for OLTP tables";
153+
return false;
154+
}
155+
150156
auto* family = MutableNamedFamily(familySettings.name());
151157

152158
if (familySettings.has_data()) {
@@ -214,6 +220,15 @@ namespace NKikimr {
214220
return false;
215221
}
216222

223+
for (size_t index = 0; index < PartitionConfig->ColumnFamiliesSize(); ++index) {
224+
auto columnFamily = PartitionConfig->GetColumnFamilies(index);
225+
if (columnFamily.HasColumnCodecLevel()) {
226+
*code = Ydb::StatusIds::BAD_REQUEST;
227+
*error = "Field `COMPRESSION_LEVEL` is not supported for OLTP tables";
228+
return false;
229+
}
230+
}
231+
217232
if (!defaultFamily->HasStorageConfig() ||
218233
!defaultFamily->GetStorageConfig().HasSysLog() ||
219234
!defaultFamily->GetStorageConfig().HasLog())

ydb/library/yql/sql/v1/SQLv1.g.in

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -798,7 +798,10 @@ table_setting_value:
798798
family_entry: FAMILY an_id family_settings;
799799
family_settings: LPAREN (family_settings_entry (COMMA family_settings_entry)*)? RPAREN;
800800
family_settings_entry: an_id EQUALS family_setting_value;
801-
family_setting_value: STRING_VALUE;
801+
family_setting_value:
802+
STRING_VALUE
803+
| integer
804+
;
802805

803806
split_boundaries:
804807
LPAREN literal_value_list (COMMA literal_value_list)* RPAREN

ydb/library/yql/sql/v1/SQLv1Antlr4.g.in

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -797,7 +797,10 @@ table_setting_value:
797797
family_entry: FAMILY an_id family_settings;
798798
family_settings: LPAREN (family_settings_entry (COMMA family_settings_entry)*)? RPAREN;
799799
family_settings_entry: an_id EQUALS family_setting_value;
800-
family_setting_value: STRING_VALUE;
800+
family_setting_value:
801+
STRING_VALUE
802+
| integer
803+
;
801804

802805
split_boundaries:
803806
LPAREN literal_value_list (COMMA literal_value_list)* RPAREN

ydb/library/yql/sql/v1/node.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1157,6 +1157,7 @@ namespace NSQLTranslationV1 {
11571157
TIdentifier Name;
11581158
TNodePtr Data;
11591159
TNodePtr Compression;
1160+
TNodePtr CompressionLevel;
11601161
};
11611162

11621163
struct TVectorIndexSettings {

0 commit comments

Comments
 (0)