aboutsummaryrefslogtreecommitdiffstats
path: root/yt
diff options
context:
space:
mode:
authorudovichenko-r <udovichenko-r@yandex-team.com>2025-01-21 17:36:47 +0300
committerudovichenko-r <udovichenko-r@yandex-team.com>2025-01-21 18:07:02 +0300
commita63534400292164c9ef8402b92af9b1b786f5b4c (patch)
treef328ab3fda8e6dd02c2cf700fb7f41ddab0314e5 /yt
parent515918df7d7ae221748222e86e6eb85b98cee4e0 (diff)
downloadydb-a63534400292164c9ef8402b92af9b1b786f5b4c.tar.gz
Remove empty column groups
commit_hash:6acbcc5492b78c6f8716669a42353da7b605e8a0
Diffstat (limited to 'yt')
-rw-r--r--yt/yql/providers/yt/provider/yql_yt_datasink.cpp16
-rw-r--r--yt/yql/providers/yt/provider/yql_yt_op_settings.cpp3
-rw-r--r--yt/yql/tests/sql/suites/column_group/hint-disable.cfg1
-rw-r--r--yt/yql/tests/sql/suites/column_group/hint-perusage.cfg1
-rw-r--r--yt/yql/tests/sql/suites/column_group/hint-single.cfg1
-rw-r--r--yt/yql/tests/sql/suites/column_group/hint.sql3
6 files changed, 19 insertions, 6 deletions
diff --git a/yt/yql/providers/yt/provider/yql_yt_datasink.cpp b/yt/yql/providers/yt/provider/yql_yt_datasink.cpp
index ca309ebf34..4738a5f5a7 100644
--- a/yt/yql/providers/yt/provider/yql_yt_datasink.cpp
+++ b/yt/yql/providers/yt/provider/yql_yt_datasink.cpp
@@ -266,12 +266,16 @@ public:
}
if (auto columnGroup = NYql::GetSetting(*res->Child(TYtWriteTable::idx_Settings), EYtSettingType::ColumnGroups)) {
const TString normalized = NormalizeColumnGroupSpec(columnGroup->Tail().Content());
- res = ctx.ChangeChild(*res, TYtWriteTable::idx_Settings,
- NYql::UpdateSettingValue(*res->Child(TYtWriteTable::idx_Settings),
- EYtSettingType::ColumnGroups,
- ctx.NewAtom(res->Child(TYtWriteTable::idx_Settings)->Pos(), normalized, TNodeFlags::MultilineContent),
- ctx)
- );
+ if (normalized) {
+ res = ctx.ChangeChild(*res, TYtWriteTable::idx_Settings,
+ NYql::UpdateSettingValue(*res->Child(TYtWriteTable::idx_Settings),
+ EYtSettingType::ColumnGroups,
+ ctx.NewAtom(res->Child(TYtWriteTable::idx_Settings)->Pos(), normalized, TNodeFlags::MultilineContent),
+ ctx)
+ );
+ } else {
+ res = ctx.ChangeChild(*res, TYtWriteTable::idx_Settings, NYql::RemoveSetting(*res->Child(TYtWriteTable::idx_Settings), EYtSettingType::ColumnGroups, ctx));
+ }
} else if (NYql::HasSetting(*res->Child(TYtWriteTable::idx_Table)->Child(TYtTable::idx_Settings), EYtSettingType::Anonymous)) {
if (const auto mode = State_->Configuration->ColumnGroupMode.Get().GetOrElse(EColumnGroupMode::Disable); mode != EColumnGroupMode::Disable) {
res = ctx.ChangeChild(*res, TYtWriteTable::idx_Settings,
diff --git a/yt/yql/providers/yt/provider/yql_yt_op_settings.cpp b/yt/yql/providers/yt/provider/yql_yt_op_settings.cpp
index 2d1ebbc502..5ef1da9eb0 100644
--- a/yt/yql/providers/yt/provider/yql_yt_op_settings.cpp
+++ b/yt/yql/providers/yt/provider/yql_yt_op_settings.cpp
@@ -1005,6 +1005,9 @@ bool ValidateColumnGroups(const TExprNode& setting, const TStructExprType& rowTy
TString NormalizeColumnGroupSpec(const TStringBuf spec) {
try {
auto columnGroups = NYT::NodeFromYsonString(spec);
+ if (columnGroups.AsMap().empty()) {
+ return {};
+ }
for (auto& grp: columnGroups.AsMap()) {
if (!grp.second.IsEntity()) {
std::stable_sort(grp.second.AsList().begin(), grp.second.AsList().end(), [](const auto& l, const auto& r) { return l.AsString() < r.AsString(); });
diff --git a/yt/yql/tests/sql/suites/column_group/hint-disable.cfg b/yt/yql/tests/sql/suites/column_group/hint-disable.cfg
index eb97f5b81d..97707c9e37 100644
--- a/yt/yql/tests/sql/suites/column_group/hint-disable.cfg
+++ b/yt/yql/tests/sql/suites/column_group/hint-disable.cfg
@@ -3,6 +3,7 @@ out Output1 output1.txt
out Output2 output2.txt
out Output3 output3.txt
out Output4 output4.txt
+out Output5 output5.txt
providers yt
pragma yt.ColumnGroupMode="disable"
pragma yt.OptimizeFor="scan"
diff --git a/yt/yql/tests/sql/suites/column_group/hint-perusage.cfg b/yt/yql/tests/sql/suites/column_group/hint-perusage.cfg
index c426193038..9a3a2daa2c 100644
--- a/yt/yql/tests/sql/suites/column_group/hint-perusage.cfg
+++ b/yt/yql/tests/sql/suites/column_group/hint-perusage.cfg
@@ -3,6 +3,7 @@ out Output1 output1.txt
out Output2 output2.txt
out Output3 output3.txt
out Output4 output4.txt
+out Output5 output5.txt
providers yt
pragma yt.ColumnGroupMode="perusage"
pragma yt.OptimizeFor="scan"
diff --git a/yt/yql/tests/sql/suites/column_group/hint-single.cfg b/yt/yql/tests/sql/suites/column_group/hint-single.cfg
index 2aab65b91e..e58a2ccde3 100644
--- a/yt/yql/tests/sql/suites/column_group/hint-single.cfg
+++ b/yt/yql/tests/sql/suites/column_group/hint-single.cfg
@@ -3,6 +3,7 @@ out Output1 output1.txt
out Output2 output2.txt
out Output3 output3.txt
out Output4 output4.txt
+out Output5 output5.txt
providers yt
pragma yt.ColumnGroupMode="single"
pragma yt.OptimizeFor="scan"
diff --git a/yt/yql/tests/sql/suites/column_group/hint.sql b/yt/yql/tests/sql/suites/column_group/hint.sql
index 5a04cc74f0..3e21451fbb 100644
--- a/yt/yql/tests/sql/suites/column_group/hint.sql
+++ b/yt/yql/tests/sql/suites/column_group/hint.sql
@@ -4,6 +4,7 @@ $i1 = select * from Input where a > "a"; -- several publish consumers with same
$i2 = select * from Input where a > "a1"; -- several publish consumers with different groups
$i3 = select * from Input where a < "a2"; -- several consumers including publish
$i4 = select * from Input where a != "a"; -- several publish consumers with and without groups
+$i5 = select * from Input where a != "b"; -- single publish consumer with with no groups (special case)
-- test column group spec normalization
insert into Output1 with column_groups="{g1=[a;b;c];def=#}" select * from $i1;
@@ -17,4 +18,6 @@ insert into Output3 with column_groups="{g1=[a;b;c];def=#}" select * from $i4;
insert into Output4 select * from $i4;
+insert into Output5 with column_groups="{}" select * from $i5;
+
select a,b,c,d from $i3;