Skip to content

Commit 37cf155

Browse files
authored
[yt provider] Add ForceTransform optimizer (#8874)
1 parent de1d90b commit 37cf155

File tree

6 files changed

+40
-16
lines changed

6 files changed

+40
-16
lines changed

ydb/library/yql/providers/yt/gateway/native/yql_yt_native.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3207,16 +3207,6 @@ class TYtNativeGateway : public IYtGateway {
32073207
bool combineChunks = NYql::HasSetting(merge.Settings().Ref(), EYtSettingType::CombineChunks);
32083208
TMaybe<ui64> limit = GetLimit(merge.Settings().Ref());
32093209

3210-
const auto cluster = merge.DataSink().Cluster().StringValue();
3211-
const bool hasOutGroup = !execCtx->OutTables_.front().ColumnGroups.IsUndefined();
3212-
const bool lookup = execCtx->Options_.Config()->OptimizeFor.Get(cluster).GetOrElse(NYT::OF_LOOKUP_ATTR) == NYT::OF_LOOKUP_ATTR;
3213-
const bool enabledColGroup = execCtx->Options_.Config()->ColumnGroupMode.Get().GetOrElse(EColumnGroupMode::Disable) != EColumnGroupMode::Disable;
3214-
const bool hasNonTmpInput = !AllOf(execCtx->InputTables_, [](const auto& table) { return table.Temp; });
3215-
3216-
forceTransform = forceTransform
3217-
|| (!lookup && enabledColGroup != hasOutGroup)
3218-
|| (!lookup && hasOutGroup && hasNonTmpInput);
3219-
32203210
return execCtx->Session_->Queue_->Async([forceTransform, combineChunks, limit, execCtx]() {
32213211
return execCtx->LookupQueryCacheAsync().Apply([forceTransform, combineChunks, limit, execCtx] (const auto& f) {
32223212
YQL_LOG_CTX_ROOT_SESSION_SCOPE(execCtx->LogCtx_);

ydb/library/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ TYtPhysicalOptProposalTransformer::TYtPhysicalOptProposalTransformer(TYtState::T
7777
AddHandler(2, &TYtPublish::Match, HNDL(UnorderedPublishTarget));
7878
AddHandler(2, &TYtMap::Match, HNDL(PushDownYtMapOverSortedMerge));
7979
AddHandler(2, &TYtMerge::Match, HNDL(MergeToCopy));
80+
AddHandler(2, &TYtMerge::Match, HNDL(ForceTransform));
8081
#undef HNDL
8182
}
8283

ydb/library/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ class TYtPhysicalOptProposalTransformer : public TOptimizeTransformerBase {
132132

133133
NNodes::TMaybeNode<NNodes::TExprBase> MergeToCopy(NNodes::TExprBase node, TExprContext& ctx) const;
134134

135+
NNodes::TMaybeNode<NNodes::TExprBase> ForceTransform(NNodes::TExprBase node, TExprContext& ctx) const;
136+
135137
template <typename TLMapType>
136138
NNodes::TMaybeNode<NNodes::TExprBase> LMap(NNodes::TExprBase node, TExprContext& ctx) const;
137139

ydb/library/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_merge.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,4 +468,35 @@ TMaybeNode<TExprBase> TYtPhysicalOptProposalTransformer::MergeToCopy(TExprBase n
468468
.Done();
469469
}
470470

471+
TMaybeNode<TExprBase> TYtPhysicalOptProposalTransformer::ForceTransform(TExprBase node, TExprContext& ctx) const {
472+
auto merge = node.Cast<TYtMerge>();
473+
474+
if (merge.Ref().HasResult()) {
475+
return node;
476+
}
477+
478+
if (NYql::HasSetting(merge.Settings().Ref(), EYtSettingType::ForceTransform)) {
479+
return node;
480+
}
481+
482+
const auto cluster = merge.DataSink().Cluster().StringValue();
483+
const bool hasOutGroup = NYql::HasSetting(merge.Output().Item(0).Settings().Ref(), EYtSettingType::ColumnGroups);
484+
const bool lookup = State_->Configuration->OptimizeFor.Get(cluster).GetOrElse(NYT::OF_LOOKUP_ATTR) == NYT::OF_LOOKUP_ATTR;
485+
const bool enabledColGroup = State_->Configuration->ColumnGroupMode.Get().GetOrElse(EColumnGroupMode::Disable) != EColumnGroupMode::Disable;
486+
const bool hasNonTmpInput = AnyOf(merge.Input().Item(0).Paths(), [](const TYtPath& path) {
487+
return path.Table().Maybe<TYtTable>() && !NYql::HasSetting(path.Table().Cast<TYtTable>().Settings().Ref(), EYtSettingType::Anonymous);
488+
});
489+
const bool hasSampling = NYql::HasSetting(merge.Input().Item(0).Settings().Ref(), EYtSettingType::Sample);
490+
491+
const bool addForceTransform = hasSampling
492+
|| (!lookup && enabledColGroup != hasOutGroup)
493+
|| (!lookup && hasOutGroup && hasNonTmpInput)
494+
;
495+
496+
if (addForceTransform) {
497+
return TExprBase(ctx.ChangeChild(merge.Ref(), TYtMerge::idx_Settings, NYql::AddSetting(merge.Settings().Ref(), EYtSettingType::ForceTransform, {}, ctx)));
498+
}
499+
return node;
500+
}
501+
471502
} // namespace NYql

ydb/library/yql/tests/sql/yt_native_file/part13/canondata/result.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2607,9 +2607,9 @@
26072607
],
26082608
"test.test[sampling-map-keyfilter-Debug]": [
26092609
{
2610-
"checksum": "6c131543166d58f45f026cc0cc278256",
2611-
"size": 1450,
2612-
"uri": "https://{canondata_backend}/1923547/38a836c67ec3650a7755f75c235e64558a2634bf/resource.tar.gz#test.test_sampling-map-keyfilter-Debug_/opt.yql"
2610+
"checksum": "a5b19c8a8fb474cd970ff612f068651c",
2611+
"size": 1470,
2612+
"uri": "https://{canondata_backend}/1889210/7f4d1cfb08cbb8e5d57565ff98a6e424f57d7280/resource.tar.gz#test.test_sampling-map-keyfilter-Debug_/opt.yql"
26132613
}
26142614
],
26152615
"test.test[sampling-map-keyfilter-Plan]": [

ydb/library/yql/tests/sql/yt_native_file/part14/canondata/result.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -854,9 +854,9 @@
854854
],
855855
"test.test[column_group-min_group-default.txt-Debug]": [
856856
{
857-
"checksum": "1aaf16e9c5132c0572386fd4d56c7277",
858-
"size": 2735,
859-
"uri": "https://{canondata_backend}/1924537/b951bd7340443ed2b617ca5ca2a4a02ac6a08281/resource.tar.gz#test.test_column_group-min_group-default.txt-Debug_/opt.yql"
857+
"checksum": "e773cf7052b0fc660a18e8315628900d",
858+
"size": 2755,
859+
"uri": "https://{canondata_backend}/1814674/38d85c1805c6536b3e75cfe9e8d9b3260b17f2bc/resource.tar.gz#test.test_column_group-min_group-default.txt-Debug_/opt.yql"
860860
}
861861
],
862862
"test.test[column_group-min_group-default.txt-Plan]": [

0 commit comments

Comments
 (0)