diff options
author | aakulaga <aakulaga@ydb.tech> | 2022-10-21 19:22:29 +0300 |
---|---|---|
committer | aakulaga <aakulaga@ydb.tech> | 2022-10-21 19:22:29 +0300 |
commit | a9173166e8bb28590933a3bbc3d1e934c5905f6e (patch) | |
tree | e52548e2438212a7a346f818350847f21e5465a6 | |
parent | f7ff93581c0f7574ab4ca73d231cc2c1990ec6c1 (diff) | |
download | ydb-a9173166e8bb28590933a3bbc3d1e934c5905f6e.tar.gz |
Fix TDqCnUnionAll
Fix TDqCnUnionall
-rw-r--r-- | ydb/library/yql/dq/opt/dq_opt_join.cpp | 29 | ||||
-rw-r--r-- | ydb/library/yql/dq/opt/dq_opt_phy.cpp | 6 |
2 files changed, 13 insertions, 22 deletions
diff --git a/ydb/library/yql/dq/opt/dq_opt_join.cpp b/ydb/library/yql/dq/opt/dq_opt_join.cpp index 31603195f56..7e0b9f7100c 100644 --- a/ydb/library/yql/dq/opt/dq_opt_join.cpp +++ b/ydb/library/yql/dq/opt/dq_opt_join.cpp @@ -863,23 +863,9 @@ TExprBase DqBuildGraceJoin(const TDqJoin& join, TExprContext& ctx) { return join; } - auto buildShuffle = [&ctx, &join](const TExprBase& input, const TVector<TCoAtom>& keys) { - auto stage = Build<TDqStage>(ctx, join.Pos()) - .Inputs() - .Add(input) - .Build() - .Program() - .Args({"stream"}) - .Body("stream") - .Build() - .Settings(TDqStageSettings().BuildNode(ctx, join.Pos())) - .Done(); - - return Build<TDqCnHashShuffle>(ctx, join.Pos()) - .Output() - .Stage(stage) - .Index().Build("0") - .Build() + auto buildShuffle = [&ctx, &join](const TDqOutput& input, const TVector<TCoAtom>& keys) { + return Build<TDqCnHashShuffle>(ctx, join.Pos()) + .Output(input) .KeyColumns() .Add(keys) .Build() @@ -888,8 +874,9 @@ TExprBase DqBuildGraceJoin(const TDqJoin& join, TExprContext& ctx) { TMaybeNode<TDqStage> joinStage; - auto leftCn = join.LeftInput().Cast<TDqCnUnionAll>(); - auto rightCn = join.RightInput().Cast<TDqCnUnionAll>(); + + TDqOutput leftCn = join.LeftInput().Cast<TDqCnUnionAll>().Output(); + TDqOutput rightCn = join.RightInput().Cast<TDqCnUnionAll>().Output(); const TStructExprType* leftStructType = nullptr; auto leftSeqType = GetSequenceItemType(leftCn, false, ctx); @@ -926,7 +913,7 @@ TExprBase DqBuildGraceJoin(const TDqJoin& join, TExprContext& ctx) { TCoArgument leftInputArg{ctx.NewArgument(join.Pos(), "_dq_join_left")}; TCoArgument rightInputArg{ctx.NewArgument(join.Pos(), "_dq_join_right")}; - auto leftWideFlow = ctx.Builder(join.Pos()) + TExprNode::TPtr leftWideFlow = ctx.Builder(join.Pos()) .Callable("ExpandMap") .Add(0, leftInputArg.Ptr()) .Lambda(1) @@ -944,7 +931,7 @@ TExprBase DqBuildGraceJoin(const TDqJoin& join, TExprContext& ctx) { .Seal() .Build(); - auto rightWideFlow = ctx.Builder(join.Pos()) + TExprNode::TPtr rightWideFlow = ctx.Builder(join.Pos()) .Callable("ExpandMap") .Add(0, rightInputArg.Ptr()) .Lambda(1) diff --git a/ydb/library/yql/dq/opt/dq_opt_phy.cpp b/ydb/library/yql/dq/opt/dq_opt_phy.cpp index e8eefd77e6d..4bff46ae6b3 100644 --- a/ydb/library/yql/dq/opt/dq_opt_phy.cpp +++ b/ydb/library/yql/dq/opt/dq_opt_phy.cpp @@ -2298,8 +2298,12 @@ TExprBase DqBuildJoin(const TExprBase& node, TExprContext& ctx, IOptimizationCon } auto joinType = join.JoinType().Value(); + bool leftIsUnionAll = join.LeftInput().Maybe<TDqCnUnionAll>().IsValid(); + bool rightIsUnionAll = join.RightInput().Maybe<TDqCnUnionAll>().IsValid(); - if (useGraceJoin) { + + + if (useGraceJoin && joinType != "Cross"sv && leftIsUnionAll && rightIsUnionAll) { return DqBuildGraceJoin(join, ctx); } |