diff options
author | Anton Romanov <[email protected]> | 2025-08-22 17:14:11 +0300 |
---|---|---|
committer | robot-piglet <[email protected]> | 2025-08-22 17:36:11 +0300 |
commit | a2caee2426b884f5f71512d59f69a284759397cd (patch) | |
tree | f55ef0d14e7fe485542b21f862d20e0e71e33e1c | |
parent | 5c41dc204afed4149a10517c7f1ac7a234ceed8c (diff) |
Add external_data_channels_count create table feature (SQL part)
Can I use your `soroka` for push YQL part of a new feature for YDB, please?
[There](https://github.com/ydb-platform/ydb/pull/21672) is the original PR approved by Fomichev an Puchin which can't be committed directly to YDB github.
Type: feature
Component: yql
---
Co-authored-by: Tony-Romanov [[email protected]]
Pull Request resolved: https://github.com/ytsaurus/ytsaurus/pull/1414
commit_hash:c98a7b656a050b09976f22f1470ba0ab5bbb52c2
-rw-r--r-- | yql/essentials/sql/v1/node.h | 3 | ||||
-rw-r--r-- | yql/essentials/sql/v1/query.cpp | 3 | ||||
-rw-r--r-- | yql/essentials/sql/v1/sql_translation.cpp | 9 | ||||
-rw-r--r-- | yql/essentials/sql/v1/sql_ut_common.h | 21 |
4 files changed, 35 insertions, 1 deletions
diff --git a/yql/essentials/sql/v1/node.h b/yql/essentials/sql/v1/node.h index 4399847da89..10c2afcabe5 100644 --- a/yql/essentials/sql/v1/node.h +++ b/yql/essentials/sql/v1/node.h @@ -1161,6 +1161,7 @@ namespace NSQLTranslationV1 { TMaybe<TIdentifier> StoreType; TNodePtr PartitionByHashFunction; TMaybe<TIdentifier> StoreExternalBlobs; + TNodePtr ExternalDataChannelsCount; TNodePtr DataSourcePath; NYql::TResetableSetting<TNodePtr, void> Location; @@ -1170,7 +1171,7 @@ namespace NSQLTranslationV1 { return CompactionPolicy || AutoPartitioningBySize || PartitionSizeMb || AutoPartitioningByLoad || MinPartitions || MaxPartitions || UniformPartitions || PartitionAtKeys || KeyBloomFilter || ReadReplicasSettings || TtlSettings || Tiering || StoreType || PartitionByHashFunction - || StoreExternalBlobs || DataSourcePath || Location || ExternalSourceParameters; + || StoreExternalBlobs || DataSourcePath || Location || ExternalSourceParameters || ExternalDataChannelsCount; } }; diff --git a/yql/essentials/sql/v1/query.cpp b/yql/essentials/sql/v1/query.cpp index af78efc0ab8..5937ab680e0 100644 --- a/yql/essentials/sql/v1/query.cpp +++ b/yql/essentials/sql/v1/query.cpp @@ -281,6 +281,9 @@ static INode::TPtr CreateTableSettings(const TTableSettings& tableSettings, ETab if (tableSettings.PartitionByHashFunction && parsingMode == ETableSettingsParsingMode::Create) { settings = L(settings, Q(Y(Q("partitionByHashFunction"), tableSettings.PartitionByHashFunction))); } + if (tableSettings.ExternalDataChannelsCount) { + settings = L(settings, Q(Y(Q("externalDataChannelsCount"), tableSettings.ExternalDataChannelsCount))); + } return settings; } diff --git a/yql/essentials/sql/v1/sql_translation.cpp b/yql/essentials/sql/v1/sql_translation.cpp index 4814f336eff..d6a420949c3 100644 --- a/yql/essentials/sql/v1/sql_translation.cpp +++ b/yql/essentials/sql/v1/sql_translation.cpp @@ -2394,6 +2394,15 @@ bool TSqlTranslation::StoreTableSettingsEntry(const TIdentifier& id, const TRule Ctx_.Error() << to_upper(id.Name) << " value should be an identifier"; return false; } + } else if (to_lower(id.Name) == "external_data_channels_count") { + if (reset) { + Ctx_.Error() << to_upper(id.Name) << " reset is not supported"; + return false; + } + if (!StoreInt(*value, settings.ExternalDataChannelsCount, Ctx_)) { + Ctx_.Error() << to_upper(id.Name) << " value should be an integer"; + return false; + } } else { Ctx_.Error() << "Unknown table setting: " << id.Name; return false; diff --git a/yql/essentials/sql/v1/sql_ut_common.h b/yql/essentials/sql/v1/sql_ut_common.h index 8877f64735a..518331289f5 100644 --- a/yql/essentials/sql/v1/sql_ut_common.h +++ b/yql/essentials/sql/v1/sql_ut_common.h @@ -2812,6 +2812,27 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) { UNIT_ASSERT_VALUES_EQUAL(1, elementStat["Write"]); } + Y_UNIT_TEST(ExternalDataChannelsCountParseCorrect) { + NYql::TAstParseResult res = SqlToYql( + R"( USE plato; + CREATE TABLE tableName (Key Uint32, Value String, PRIMARY KEY (Key)) + WITH ( EXTERNAL_DATA_CHANNELS_COUNT = 7 );)" + ); + UNIT_ASSERT(res.Root); + + TVerifyLineFunc verifyLine = [](const TString& word, const TString& line) { + if (word == "Write") { + UNIT_ASSERT_VALUES_UNEQUAL(TString::npos, line.find("externalDataChannelsCount")); + UNIT_ASSERT_VALUES_UNEQUAL(TString::npos, line.find("7")); + } + }; + + TWordCountHive elementStat = { {TString("Write"), 0} }; + VerifyProgram(res, elementStat, verifyLine); + + UNIT_ASSERT_VALUES_EQUAL(1, elementStat["Write"]); + } + Y_UNIT_TEST(DefaultValueColumn2) { auto res = SqlToYql(R"( use plato; $lambda = () -> { |