Skip to content

Commit 247bf65

Browse files
authored
Support cache modes in KQP (#23936)
1 parent 33c43a0 commit 247bf65

File tree

14 files changed

+423
-11
lines changed

14 files changed

+423
-11
lines changed

ydb/core/kqp/host/kqp_gateway_proxy.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,17 @@ bool ConvertCreateTableSettingsToProto(NYql::TKikimrTableMetadataPtr metadata, Y
143143
if (family.CompressionLevel) {
144144
familyProto->set_compression_level(family.CompressionLevel.GetRef());
145145
}
146+
if (family.CacheMode) {
147+
if (to_lower(family.CacheMode.GetRef()) == "regular") {
148+
familyProto->set_cache_mode(Ydb::Table::ColumnFamily::CACHE_MODE_REGULAR);
149+
} else if (to_lower(family.CacheMode.GetRef()) == "in_memory") {
150+
familyProto->set_cache_mode(Ydb::Table::ColumnFamily::CACHE_MODE_IN_MEMORY);
151+
} else {
152+
code = Ydb::StatusIds::BAD_REQUEST;
153+
error = TStringBuilder() << "Unknown cache mode '" << family.CacheMode.GetRef() << "' for a column family";
154+
return false;
155+
}
156+
}
146157
}
147158

148159
if (metadata->TableSettings.CompactionPolicy) {
@@ -390,6 +401,11 @@ bool FillColumnTableSchema(NKikimrSchemeOp::TColumnTableSchema& schema, const T&
390401
error = TStringBuilder() << "Field `DATA` is not supported for OLAP tables in column family '" << family.Name << "'";
391402
return false;
392403
}
404+
if (family.CacheMode.Defined()) {
405+
code = Ydb::StatusIds::BAD_REQUEST;
406+
error = TStringBuilder() << "Field `CACHE_MODE` is not supported for OLAP tables in column family '" << family.Name << "'";
407+
return false;
408+
}
393409
auto columnFamilyIt = columnFamiliesByName.find(family.Name);
394410
if (!columnFamilyIt.IsEnd()) {
395411
code = Ydb::StatusIds::BAD_REQUEST;

ydb/core/kqp/provider/yql_kikimr_exec.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1790,6 +1790,25 @@ class TKiSinkCallableExecutionTransformer : public TAsyncCallbackTransformer<TKi
17901790
} else if (name == "compression_level") {
17911791
auto level = FromString<i32>(familySetting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value());
17921792
f->set_compression_level(level);
1793+
} else if (name == "cache_mode") {
1794+
if (!SessionCtx->Config().FeatureFlags.GetEnableTableCacheModes()) {
1795+
ctx.AddError(TIssue(ctx.GetPosition(familySetting.Name().Pos()),
1796+
TStringBuilder() << "Setting cache_mode is not allowed"));
1797+
return SyncError();
1798+
}
1799+
auto cacheMode = TString(
1800+
familySetting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value()
1801+
);
1802+
if (to_lower(cacheMode) == "regular") {
1803+
f->set_cache_mode(Ydb::Table::ColumnFamily::CACHE_MODE_REGULAR);
1804+
} else if (to_lower(cacheMode) == "in_memory") {
1805+
f->set_cache_mode(Ydb::Table::ColumnFamily::CACHE_MODE_IN_MEMORY);
1806+
} else {
1807+
ctx.AddError(TIssue(ctx.GetPosition(familySetting.Name().Pos()),
1808+
TStringBuilder() << "Unknown cache mode '" << cacheMode
1809+
<< "' for a column family"));
1810+
return SyncError();
1811+
}
17931812
} else {
17941813
ctx.AddError(TIssue(ctx.GetPosition(familySetting.Name().Pos()),
17951814
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
@@ -220,6 +220,7 @@ struct TColumnFamily {
220220
TMaybe<TString> Data;
221221
TMaybe<TString> Compression;
222222
TMaybe<i32> CompressionLevel;
223+
TMaybe<TString> CacheMode;
223224
};
224225

225226
struct TTtlSettings {

ydb/core/kqp/provider/yql_kikimr_type_ann.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,6 +1088,10 @@ virtual TStatus HandleCreateTable(TKiCreateTable create, TExprContext& ctx) over
10881088
);
10891089
} else if (name == "compression_level") {
10901090
family.CompressionLevel = FromString<i32>(familySetting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value());
1091+
} else if (name == "cache_mode") {
1092+
family.CacheMode = TString(
1093+
familySetting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value()
1094+
);
10911095
} else {
10921096
ctx.AddError(TIssue(ctx.GetPosition(familySetting.Name().Pos()),
10931097
TStringBuilder() << "Unknown column family setting name: " << name));

0 commit comments

Comments
 (0)