diff options
author | udovichenko-r <udovichenko-r@yandex-team.com> | 2025-02-11 21:02:56 +0300 |
---|---|---|
committer | udovichenko-r <udovichenko-r@yandex-team.com> | 2025-02-11 21:28:35 +0300 |
commit | cfdb74513d44f14e37c64b3202896a5768175900 (patch) | |
tree | ba5e5238f923ce0f3afde786e203899475050099 /yt | |
parent | 68f130528d23665ea395f02063b572479fec7765 (diff) | |
download | ydb-cfdb74513d44f14e37c64b3202896a5768175900.tar.gz |
Remove column_group settings after graph rewrites
commit_hash:c7d005211f2f70b8e4bac2135ab5118312ec8b27
Diffstat (limited to 'yt')
4 files changed, 40 insertions, 12 deletions
diff --git a/yt/yql/providers/yt/provider/yql_yt_physical_finalizing.cpp b/yt/yql/providers/yt/provider/yql_yt_physical_finalizing.cpp index 9f3fc40d6a..ac7a3cb79b 100644 --- a/yt/yql/providers/yt/provider/yql_yt_physical_finalizing.cpp +++ b/yt/yql/providers/yt/provider/yql_yt_physical_finalizing.cpp @@ -2721,14 +2721,24 @@ private: auto newOutput = origOutput; for (const auto& item: groupSpecs) { const auto table = op.Output().Item(item.first); - auto currentGroup = GetSetting(table.Settings().Ref(), EYtSettingType::ColumnGroups); - if (!currentGroup || currentGroup->Tail().Content() != item.second) { - auto newSettings = AddOrUpdateSettingValue(table.Settings().Ref(), - EYtSettingType::ColumnGroups, - ctx.NewAtom(table.Settings().Pos(), item.second, TNodeFlags::MultilineContent), - ctx); - auto newTable = ctx.ChangeChild(table.Ref(), TYtOutTable::idx_Settings, std::move(newSettings)); - newOutput = ctx.ChangeChild(*newOutput, item.first, std::move(newTable)); + if (item.second.empty()) { + if (NYql::HasSetting(table.Settings().Ref(), EYtSettingType::ColumnGroups)) { + newOutput = ctx.ChangeChild(*newOutput, item.first, + ctx.ChangeChild(table.Ref(), TYtOutTable::idx_Settings, + NYql::RemoveSetting(table.Settings().Ref(), EYtSettingType::ColumnGroups, ctx) + ) + ); + } + } else { + auto currentGroup = NYql::GetSetting(table.Settings().Ref(), EYtSettingType::ColumnGroups); + if (!currentGroup || currentGroup->Tail().Content() != item.second) { + auto newSettings = NYql::AddOrUpdateSettingValue(table.Settings().Ref(), + EYtSettingType::ColumnGroups, + ctx.NewAtom(table.Settings().Pos(), item.second, TNodeFlags::MultilineContent), + ctx); + auto newTable = ctx.ChangeChild(table.Ref(), TYtOutTable::idx_Settings, std::move(newSettings)); + newOutput = ctx.ChangeChild(*newOutput, item.first, std::move(newTable)); + } } } if (newOutput != origOutput) { @@ -2925,14 +2935,12 @@ private: auto writer = x.first; TColumnUsage& usage = x.second; if (usage.GenerateGroups) { - std::map<size_t, TString> groupSpecs; for (size_t i = 0; i < usage.OutTypes.size(); ++i) { + groupSpecs[i] = TString{}; if (!usage.PublishUsage[i].empty()) { if (usage.PublishUsage[i].size() == 1) { - if (auto spec = *usage.PublishUsage[i].cbegin(); !spec.empty()) { - groupSpecs[i] = spec; - } + groupSpecs[i] = *usage.PublishUsage[i].cbegin(); } continue; } diff --git a/yt/yql/tests/sql/suites/column_group/input2.txt b/yt/yql/tests/sql/suites/column_group/input2.txt new file mode 100644 index 0000000000..65949ea745 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/input2.txt @@ -0,0 +1,4 @@ +{"key"="075";"subkey"="1";"value"="abc"}; +{"key"="800";"subkey"="2";"value"="ddd"}; +{"key"="020";"subkey"="3";"value"="q"}; +{"key"="150";"subkey"="4";"value"="qzz"}; diff --git a/yt/yql/tests/sql/suites/column_group/respull.cfg b/yt/yql/tests/sql/suites/column_group/respull.cfg new file mode 100644 index 0000000000..c3fd8a0bcd --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/respull.cfg @@ -0,0 +1,2 @@ +in Input input2.txt +providers yt diff --git a/yt/yql/tests/sql/suites/column_group/respull.sql b/yt/yql/tests/sql/suites/column_group/respull.sql new file mode 100644 index 0000000000..7d3eef6808 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/respull.sql @@ -0,0 +1,14 @@ +-- YQL-19570 +-- Expected no column_group in YtMap outputs +USE plato; + +pragma yt.ColumnGroupMode="perusage"; +pragma yt.OptimizeFor="lookup"; + +SELECT + key as key, + "" as subkey, + "value:" || value as value +FROM Input +WHERE key < "050" +LIMIT 1; |