This is an automated email from the ASF dual-hosted git repository. maxyang pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/cloudberry.git
commit 811d64e6591aa5dc9106e52437452f7fac2af945 Author: Chris Hajas <[email protected]> AuthorDate: Thu May 11 15:04:32 2023 -0700 Re-support Dynamic Partition Elimination with semi joins in Orca (#15506) This is a follow-up to 18710643c4a, which re-added DPE support for right joins after the the partitioning refactor. Using similar logic, this adds DPE support for semi joins. We can now produce plans such as: ``` Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..862.01 rows=29 width=32) -> Hash Semi Join (cost=0.00..862.00 rows=10 width=32) Hash Cond: (pt.ptid = t.tid) -> Dynamic Seq Scan on pt (cost=0.00..431.00 rows=10 width=32) Number of partitions to scan: 6 (out of 6) Filter: (NOT (ptid IS NULL)) -> Hash (cost=431.00..431.00 rows=2 width=4) -> Partition Selector (selector id: $0) (cost=0.00..431.00 rows=2 width=4) -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=2 width=4) -> Seq Scan on t (cost=0.00..431.00 rows=1 width=4) Filter: (t1 = ('hello'::text || (tid)::text)) Optimizer: Pivotal Optimizer (GPORCA) (12 rows) ``` --- .../data/dxl/minidump/EffectOfLocalPredOnJoin2.mdp | 170 +-- .../data/dxl/minidump/PartTbl-DPE-GroupBy.mdp | 102 +- .../gporca/data/dxl/minidump/SemiJoinDPE.mdp | 1333 ++++++++++++++++++++ .../gpopt/operators/CPhysicalLeftSemiHashJoin.h | 8 + .../src/operators/CPhysicalLeftSemiHashJoin.cpp | 21 + src/backend/gporca/server/CMakeLists.txt | 3 +- src/test/regress/expected/dpe_optimizer.out | 46 +- 7 files changed, 1536 insertions(+), 147 deletions(-) diff --git a/src/backend/gporca/data/dxl/minidump/EffectOfLocalPredOnJoin2.mdp b/src/backend/gporca/data/dxl/minidump/EffectOfLocalPredOnJoin2.mdp index c7e375df4d..ac821b9a5c 100644 --- a/src/backend/gporca/data/dxl/minidump/EffectOfLocalPredOnJoin2.mdp +++ b/src/backend/gporca/data/dxl/minidump/EffectOfLocalPredOnJoin2.mdp @@ -11318,10 +11318,10 @@ </dxl:LogicalGet> </dxl:LogicalSelect> </dxl:Query> - <dxl:Plan Id="0" SpaceSize="22"> - <dxl:HashJoin JoinType="In"> + <dxl:Plan Id="0" SpaceSize="19"> + <dxl:HashJoin JoinType="Inner"> <dxl:Properties> - <dxl:Cost StartupCost="0" TotalCost="862.039775" Rows="26.689686" Width="116"/> + <dxl:Cost StartupCost="0" TotalCost="862.043090" Rows="26.689686" Width="116"/> </dxl:Properties> <dxl:ProjList> <dxl:ProjElem ColId="0" Alias="sr_returned_date_sk"> @@ -11389,10 +11389,103 @@ <dxl:JoinFilter/> <dxl:HashCondList> <dxl:Comparison ComparisonOperator="=" OperatorMdid="0.96.1.0"> - <dxl:Ident ColId="0" ColName="sr_returned_date_sk" TypeMdid="0.23.1.0"/> <dxl:Ident ColId="27" ColName="d_date_sk" TypeMdid="0.23.1.0"/> + <dxl:Ident ColId="0" ColName="sr_returned_date_sk" TypeMdid="0.23.1.0"/> </dxl:Comparison> </dxl:HashCondList> + <dxl:GatherMotion InputSegments="0,1" OutputSegments="-1"> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="431.024148" Rows="26.689686" Width="4"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="27" Alias="d_date_sk"> + <dxl:Ident ColId="27" ColName="d_date_sk" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:Filter/> + <dxl:SortingColumnList/> + <dxl:Aggregate AggregationStrategy="Sorted" StreamSafe="false"> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="431.023669" Rows="26.689686" Width="4"/> + </dxl:Properties> + <dxl:GroupingColumns> + <dxl:GroupingColumn ColId="27"/> + </dxl:GroupingColumns> + <dxl:ProjList> + <dxl:ProjElem ColId="27" Alias="d_date_sk"> + <dxl:Ident ColId="27" ColName="d_date_sk" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:Filter/> + <dxl:Sort SortDiscardDuplicates="false"> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="431.023585" Rows="26.689686" Width="4"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="27" Alias="d_date_sk"> + <dxl:Ident ColId="27" ColName="d_date_sk" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="33" Alias="d_year"> + <dxl:Ident ColId="33" ColName="d_year" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="35" Alias="d_moy"> + <dxl:Ident ColId="35" ColName="d_moy" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:Filter/> + <dxl:SortingColumnList> + <dxl:SortingColumn ColId="27" SortOperatorMdid="0.97.1.0" SortOperatorName="<" SortNullsFirst="false"/> + </dxl:SortingColumnList> + <dxl:LimitCount/> + <dxl:LimitOffset/> + <dxl:DynamicTableScan SelectorIds=""> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="431.022454" Rows="26.689686" Width="12"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="27" Alias="d_date_sk"> + <dxl:Ident ColId="27" ColName="d_date_sk" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="33" Alias="d_year"> + <dxl:Ident ColId="33" ColName="d_year" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="35" Alias="d_moy"> + <dxl:Ident ColId="35" ColName="d_moy" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:Filter> + <dxl:And> + <dxl:Comparison ComparisonOperator="=" OperatorMdid="0.96.1.0"> + <dxl:Ident ColId="33" ColName="d_year" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="2001"/> + </dxl:Comparison> + <dxl:Comparison ComparisonOperator="=" OperatorMdid="0.96.1.0"> + <dxl:Ident ColId="35" ColName="d_moy" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="8"/> + </dxl:Comparison> + </dxl:And> + </dxl:Filter> + <dxl:Partitions> + <dxl:Partition Mdid="6.1962503002.1.1"/> + </dxl:Partitions> + <dxl:TableDescriptor Mdid="6.1962503.1.1" TableName="date_dim"> + <dxl:Columns> + <dxl:Column ColId="27" Attno="1" ColName="d_date_sk" TypeMdid="0.23.1.0"/> + <dxl:Column ColId="33" Attno="7" ColName="d_year" TypeMdid="0.23.1.0"/> + <dxl:Column ColId="35" Attno="9" ColName="d_moy" TypeMdid="0.23.1.0"/> + <dxl:Column ColId="55" Attno="-1" ColName="ctid" TypeMdid="0.27.1.0"/> + <dxl:Column ColId="56" Attno="-3" ColName="xmin" TypeMdid="0.28.1.0"/> + <dxl:Column ColId="57" Attno="-4" ColName="cmin" TypeMdid="0.29.1.0"/> + <dxl:Column ColId="58" Attno="-5" ColName="xmax" TypeMdid="0.28.1.0"/> + <dxl:Column ColId="59" Attno="-6" ColName="cmax" TypeMdid="0.29.1.0"/> + <dxl:Column ColId="60" Attno="-7" ColName="tableoid" TypeMdid="0.26.1.0"/> + <dxl:Column ColId="61" Attno="-8" ColName="gp_segment_id" TypeMdid="0.23.1.0"/> + </dxl:Columns> + </dxl:TableDescriptor> + </dxl:DynamicTableScan> + </dxl:Sort> + </dxl:Aggregate> + </dxl:GatherMotion> <dxl:GatherMotion InputSegments="0,1" OutputSegments="-1"> <dxl:Properties> <dxl:Cost StartupCost="0" TotalCost="431.000669" Rows="1.000000" Width="116"/> @@ -11568,75 +11661,6 @@ </dxl:TableDescriptor> </dxl:DynamicTableScan> </dxl:GatherMotion> - <dxl:GatherMotion InputSegments="0,1" OutputSegments="-1"> - <dxl:Properties> - <dxl:Cost StartupCost="0" TotalCost="431.022933" Rows="26.689686" Width="4"/> - </dxl:Properties> - <dxl:ProjList> - <dxl:ProjElem ColId="27" Alias="d_date_sk"> - <dxl:Ident ColId="27" ColName="d_date_sk" TypeMdid="0.23.1.0"/> - </dxl:ProjElem> - </dxl:ProjList> - <dxl:Filter/> - <dxl:SortingColumnList/> - <dxl:Result> - <dxl:Properties> - <dxl:Cost StartupCost="0" TotalCost="431.022454" Rows="26.689686" Width="4"/> - </dxl:Properties> - <dxl:ProjList> - <dxl:ProjElem ColId="27" Alias="d_date_sk"> - <dxl:Ident ColId="27" ColName="d_date_sk" TypeMdid="0.23.1.0"/> - </dxl:ProjElem> - </dxl:ProjList> - <dxl:Filter/> - <dxl:OneTimeFilter/> - <dxl:DynamicTableScan SelectorIds=""> - <dxl:Properties> - <dxl:Cost StartupCost="0" TotalCost="431.022454" Rows="26.689686" Width="12"/> - </dxl:Properties> - <dxl:ProjList> - <dxl:ProjElem ColId="27" Alias="d_date_sk"> - <dxl:Ident ColId="27" ColName="d_date_sk" TypeMdid="0.23.1.0"/> - </dxl:ProjElem> - <dxl:ProjElem ColId="33" Alias="d_year"> - <dxl:Ident ColId="33" ColName="d_year" TypeMdid="0.23.1.0"/> - </dxl:ProjElem> - <dxl:ProjElem ColId="35" Alias="d_moy"> - <dxl:Ident ColId="35" ColName="d_moy" TypeMdid="0.23.1.0"/> - </dxl:ProjElem> - </dxl:ProjList> - <dxl:Filter> - <dxl:And> - <dxl:Comparison ComparisonOperator="=" OperatorMdid="0.96.1.0"> - <dxl:Ident ColId="33" ColName="d_year" TypeMdid="0.23.1.0"/> - <dxl:ConstValue TypeMdid="0.23.1.0" Value="2001"/> - </dxl:Comparison> - <dxl:Comparison ComparisonOperator="=" OperatorMdid="0.96.1.0"> - <dxl:Ident ColId="35" ColName="d_moy" TypeMdid="0.23.1.0"/> - <dxl:ConstValue TypeMdid="0.23.1.0" Value="8"/> - </dxl:Comparison> - </dxl:And> - </dxl:Filter> - <dxl:Partitions> - <dxl:Partition Mdid="6.1962503002.1.1"/> - </dxl:Partitions> - <dxl:TableDescriptor Mdid="6.1962503.1.1" TableName="date_dim"> - <dxl:Columns> - <dxl:Column ColId="27" Attno="1" ColName="d_date_sk" TypeMdid="0.23.1.0"/> - <dxl:Column ColId="33" Attno="7" ColName="d_year" TypeMdid="0.23.1.0"/> - <dxl:Column ColId="35" Attno="9" ColName="d_moy" TypeMdid="0.23.1.0"/> - <dxl:Column ColId="55" Attno="-1" ColName="ctid" TypeMdid="0.27.1.0"/> - <dxl:Column ColId="56" Attno="-3" ColName="xmin" TypeMdid="0.28.1.0"/> - <dxl:Column ColId="57" Attno="-4" ColName="cmin" TypeMdid="0.29.1.0"/> - <dxl:Column ColId="58" Attno="-5" ColName="xmax" TypeMdid="0.28.1.0"/> - <dxl:Column ColId="59" Attno="-6" ColName="cmax" TypeMdid="0.29.1.0"/> - <dxl:Column ColId="60" Attno="-7" ColName="tableoid" TypeMdid="0.26.1.0"/> - <dxl:Column ColId="61" Attno="-8" ColName="gp_segment_id" TypeMdid="0.23.1.0"/> - </dxl:Columns> - </dxl:TableDescriptor> - </dxl:DynamicTableScan> - </dxl:Result> - </dxl:GatherMotion> </dxl:HashJoin> </dxl:Plan> </dxl:Thread> diff --git a/src/backend/gporca/data/dxl/minidump/PartTbl-DPE-GroupBy.mdp b/src/backend/gporca/data/dxl/minidump/PartTbl-DPE-GroupBy.mdp index 1720753943..da90ff26a0 100644 --- a/src/backend/gporca/data/dxl/minidump/PartTbl-DPE-GroupBy.mdp +++ b/src/backend/gporca/data/dxl/minidump/PartTbl-DPE-GroupBy.mdp @@ -821,10 +821,10 @@ </dxl:LogicalGet> </dxl:LogicalSelect> </dxl:Query> - <dxl:Plan Id="0" SpaceSize="740"> + <dxl:Plan Id="0" SpaceSize="730"> <dxl:GatherMotion InputSegments="0,1" OutputSegments="-1"> <dxl:Properties> - <dxl:Cost StartupCost="0" TotalCost="862.022545" Rows="99.900000" Width="14"/> + <dxl:Cost StartupCost="0" TotalCost="862.022553" Rows="99.900000" Width="14"/> </dxl:Properties> <dxl:ProjList> <dxl:ProjElem ColId="0" Alias="dist"> @@ -847,7 +847,7 @@ <dxl:SortingColumnList/> <dxl:HashJoin JoinType="In"> <dxl:Properties> - <dxl:Cost StartupCost="0" TotalCost="862.016265" Rows="99.900000" Width="14"/> + <dxl:Cost StartupCost="0" TotalCost="862.016273" Rows="99.900000" Width="14"/> </dxl:Properties> <dxl:ProjList> <dxl:ProjElem ColId="0" Alias="dist"> @@ -874,7 +874,7 @@ <dxl:Ident ColId="13" ColName="tid" TypeMdid="0.23.1.0"/> </dxl:Comparison> </dxl:HashCondList> - <dxl:DynamicTableScan SelectorIds=""> + <dxl:DynamicTableScan SelectorIds="0"> <dxl:Properties> <dxl:Cost StartupCost="0" TotalCost="431.004153" Rows="99.900000" Width="14"/> </dxl:Properties> @@ -926,7 +926,7 @@ </dxl:Columns> </dxl:TableDescriptor> </dxl:DynamicTableScan> - <dxl:BroadcastMotion InputSegments="0,1" OutputSegments="0,1"> + <dxl:PartitionSelector RelationMdid="6.290141.1.1" SelectorId="0" ScanId="1" Partitions="0,1,2,3,4"> <dxl:Properties> <dxl:Cost StartupCost="0" TotalCost="431.000276" Rows="2.000000" Width="8"/> </dxl:Properties> @@ -935,11 +935,15 @@ <dxl:Ident ColId="13" ColName="tid" TypeMdid="0.23.1.0"/> </dxl:ProjElem> </dxl:ProjList> - <dxl:Filter/> - <dxl:SortingColumnList/> - <dxl:Result> + <dxl:PartFilterExpr> + <dxl:Comparison ComparisonOperator="=" OperatorMdid="0.96.1.0"> + <dxl:Ident ColId="4" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:Ident ColId="13" ColName="tid" TypeMdid="0.23.1.0"/> + </dxl:Comparison> + </dxl:PartFilterExpr> + <dxl:BroadcastMotion InputSegments="0,1" OutputSegments="0,1"> <dxl:Properties> - <dxl:Cost StartupCost="0" TotalCost="431.000067" Rows="1.000000" Width="8"/> + <dxl:Cost StartupCost="0" TotalCost="431.000276" Rows="2.000000" Width="8"/> </dxl:Properties> <dxl:ProjList> <dxl:ProjElem ColId="13" Alias="tid"> @@ -947,59 +951,71 @@ </dxl:ProjElem> </dxl:ProjList> <dxl:Filter/> - <dxl:OneTimeFilter/> + <dxl:SortingColumnList/> <dxl:Result> <dxl:Properties> <dxl:Cost StartupCost="0" TotalCost="431.000067" Rows="1.000000" Width="8"/> </dxl:Properties> <dxl:ProjList> - <dxl:ProjElem ColId="23" Alias="?column?"> - <dxl:ConstValue TypeMdid="0.23.1.0" Value="1"/> - </dxl:ProjElem> <dxl:ProjElem ColId="13" Alias="tid"> <dxl:Ident ColId="13" ColName="tid" TypeMdid="0.23.1.0"/> </dxl:ProjElem> </dxl:ProjList> <dxl:Filter/> <dxl:OneTimeFilter/> - <dxl:TableScan> + <dxl:Result> <dxl:Properties> - <dxl:Cost StartupCost="0" TotalCost="431.000063" Rows="1.000000" Width="8"/> + <dxl:Cost StartupCost="0" TotalCost="431.000067" Rows="1.000000" Width="8"/> </dxl:Properties> <dxl:ProjList> + <dxl:ProjElem ColId="23" Alias="?column?"> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="1"/> + </dxl:ProjElem> <dxl:ProjElem ColId="13" Alias="tid"> <dxl:Ident ColId="13" ColName="tid" TypeMdid="0.23.1.0"/> </dxl:ProjElem> </dxl:ProjList> - <dxl:Filter> - <dxl:Comparison ComparisonOperator="=" OperatorMdid="0.98.1.0"> - <dxl:Ident ColId="14" ColName="t1" TypeMdid="0.25.1.0"/> - <dxl:OpExpr OperatorName="||" OperatorMdid="0.654.1.0" OperatorType="0.25.1.0"> - <dxl:ConstValue TypeMdid="0.25.1.0" Value="AAAACWhlbGxv" LintValue="589947684"/> - <dxl:FuncExpr FuncId="0.112.1.0" FuncRetSet="false" TypeMdid="0.25.1.0"> - <dxl:Ident ColId="13" ColName="tid" TypeMdid="0.23.1.0"/> - </dxl:FuncExpr> - </dxl:OpExpr> - </dxl:Comparison> - </dxl:Filter> - <dxl:TableDescriptor Mdid="6.290415.1.1" TableName="t"> - <dxl:Columns> - <dxl:Column ColId="12" Attno="1" ColName="dist" TypeMdid="0.23.1.0"/> - <dxl:Column ColId="13" Attno="2" ColName="tid" TypeMdid="0.23.1.0"/> - <dxl:Column ColId="14" Attno="3" ColName="t1" TypeMdid="0.25.1.0"/> - <dxl:Column ColId="16" Attno="-1" ColName="ctid" TypeMdid="0.27.1.0"/> - <dxl:Column ColId="17" Attno="-3" ColName="xmin" TypeMdid="0.28.1.0"/> - <dxl:Column ColId="18" Attno="-4" ColName="cmin" TypeMdid="0.29.1.0"/> - <dxl:Column ColId="19" Attno="-5" ColName="xmax" TypeMdid="0.28.1.0"/> - <dxl:Column ColId="20" Attno="-6" ColName="cmax" TypeMdid="0.29.1.0"/> - <dxl:Column ColId="21" Attno="-7" ColName="tableoid" TypeMdid="0.26.1.0"/> - <dxl:Column ColId="22" Attno="-8" ColName="gp_segment_id" TypeMdid="0.23.1.0"/> - </dxl:Columns> - </dxl:TableDescriptor> - </dxl:TableScan> + <dxl:Filter/> + <dxl:OneTimeFilter/> + <dxl:TableScan> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="431.000063" Rows="1.000000" Width="8"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="13" Alias="tid"> + <dxl:Ident ColId="13" ColName="tid" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:Filter> + <dxl:Comparison ComparisonOperator="=" OperatorMdid="0.98.1.0"> + <dxl:Ident ColId="14" ColName="t1" TypeMdid="0.25.1.0"/> + <dxl:OpExpr OperatorName="||" OperatorMdid="0.654.1.0" OperatorType="0.25.1.0"> + <dxl:ConstValue TypeMdid="0.25.1.0" Value="AAAACWhlbGxv" LintValue="589947684"/> + <dxl:FuncExpr FuncId="0.112.1.0" FuncRetSet="false" TypeMdid="0.25.1.0" FuncVariadic="false"> + <dxl:Ident ColId="13" ColName="tid" TypeMdid="0.23.1.0"/> + </dxl:FuncExpr> + </dxl:OpExpr> + </dxl:Comparison> + </dxl:Filter> + <dxl:TableDescriptor Mdid="6.290415.1.1" TableName="t"> + <dxl:Columns> + <dxl:Column ColId="12" Attno="1" ColName="dist" TypeMdid="0.23.1.0"/> + <dxl:Column ColId="13" Attno="2" ColName="tid" TypeMdid="0.23.1.0"/> + <dxl:Column ColId="14" Attno="3" ColName="t1" TypeMdid="0.25.1.0"/> + <dxl:Column ColId="16" Attno="-1" ColName="ctid" TypeMdid="0.27.1.0"/> + <dxl:Column ColId="17" Attno="-3" ColName="xmin" TypeMdid="0.28.1.0"/> + <dxl:Column ColId="18" Attno="-4" ColName="cmin" TypeMdid="0.29.1.0"/> + <dxl:Column ColId="19" Attno="-5" ColName="xmax" TypeMdid="0.28.1.0"/> + <dxl:Column ColId="20" Attno="-6" ColName="cmax" TypeMdid="0.29.1.0"/> + <dxl:Column ColId="21" Attno="-7" ColName="tableoid" TypeMdid="0.26.1.0"/> + <dxl:Column ColId="22" Attno="-8" ColName="gp_segment_id" TypeMdid="0.23.1.0"/> + </dxl:Columns> + </dxl:TableDescriptor> + </dxl:TableScan> + </dxl:Result> </dxl:Result> - </dxl:Result> - </dxl:BroadcastMotion> + </dxl:BroadcastMotion> + </dxl:PartitionSelector> </dxl:HashJoin> </dxl:GatherMotion> </dxl:Plan> diff --git a/src/backend/gporca/data/dxl/minidump/SemiJoinDPE.mdp b/src/backend/gporca/data/dxl/minidump/SemiJoinDPE.mdp new file mode 100644 index 0000000000..6d54e06319 --- /dev/null +++ b/src/backend/gporca/data/dxl/minidump/SemiJoinDPE.mdp @@ -0,0 +1,1333 @@ +<?xml version="1.0" encoding="UTF-8"?> +<dxl:DXLMessage xmlns:dxl="http://greenplum.com/dxl/2010/12/"> + <dxl:Thread Id="0"> + <dxl:Comment><![CDATA[ + Objective: Orca should generate a semi-join plan with DPE. There should be a partition selector on the inner side. + + create table pt(dist int, pt1 text, pt2 text, pt3 text, ptid int) + DISTRIBUTED BY (dist) + PARTITION BY RANGE(ptid) + ( + START (0) END (5) EVERY (1), + DEFAULT PARTITION junk_data + ); + + create table t(dist int, tid int, t1 text, t2 text); + insert into pt select i, 'hello' || i, 'world', 'drop this', i % 6 from generate_series(0,53) i; + insert into t select i, i % 6, 'hello' || i, 'bar' from generate_series(0,1) i; + analyze pt; + analyze t; + + explain select * from pt where exists (select 1 from t where tid = ptid and t1 = 'hello' || tid); + + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..862.01 rows=29 width=32) + -> Hash Semi Join (cost=0.00..862.00 rows=10 width=32) + Hash Cond: (pt.ptid = t.tid) + -> Dynamic Seq Scan on pt (cost=0.00..431.00 rows=10 width=32) + Number of partitions to scan: 6 (out of 6) + Filter: (NOT (ptid IS NULL)) + -> Hash (cost=431.00..431.00 rows=2 width=4) + -> Partition Selector (selector id: $0) (cost=0.00..431.00 rows=2 width=4) + -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=2 width=4) + -> Seq Scan on t (cost=0.00..431.00 rows=1 width=4) + Filter: (t1 = ('hello'::text || (tid)::text)) + Optimizer: Pivotal Optimizer (GPORCA) + (12 rows) + ]]> + </dxl:Comment> + <dxl:OptimizerConfig> + <dxl:EnumeratorConfig Id="0" PlanSamples="0" CostThreshold="0"/> + <dxl:StatisticsConfig DampingFactorFilter="0.750000" DampingFactorJoin="0.000000" DampingFactorGroupBy="0.750000" MaxStatsBuckets="100"/> + <dxl:CTEConfig CTEInliningCutoff="0"/> + <dxl:WindowOids RowNumber="3100" Rank="3101"/> + <dxl:CostModelConfig CostModelType="1" SegmentsForCosting="3"> + <dxl:CostParams> + <dxl:CostParam Name="NLJFactor" Value="1024.000000" LowerBound="1023.500000" UpperBound="1024.500000"/> + </dxl:CostParams> + </dxl:CostModelConfig> + <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="20" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="100000" EnforceConstraintsOnDML="false" PushGroupByBelowSetopThreshold="10" XformBindThreshold="0" SkewFactor="0"/> + <dxl:TraceFlags Value="102001,102002,102003,102043,102074,102120,102144,103001,103014,103022,103026,103027,103029,103033,103038,103040,104002,104003,104004,104005,105000,106000"/> + </dxl:OptimizerConfig> + <dxl:Metadata SystemIds="0.GPDB"> + <dxl:Relation Mdid="6.41013.1.0" Name="pt_1_prt_5" IsTemporary="false" StorageType="Heap" DistributionPolicy="Hash" DistributionColumns="0" Keys="11,5"> + <dxl:Columns> + <dxl:Column Name="dist" Attno="1" Mdid="0.23.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt1" Attno="2" Mdid="0.25.1.0" Nullable="true" ColWidth="7"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt2" Attno="3" Mdid="0.25.1.0" Nullable="true" ColWidth="6"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt3" Attno="4" Mdid="0.25.1.0" Nullable="true" ColWidth="10"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="ptid" Attno="5" Mdid="0.23.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="ctid" Attno="-1" Mdid="0.27.1.0" Nullable="false" ColWidth="6"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="xmin" Attno="-2" Mdid="0.28.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="cmin" Attno="-3" Mdid="0.29.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="xmax" Attno="-4" Mdid="0.28.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="cmax" Attno="-5" Mdid="0.29.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="tableoid" Attno="-6" Mdid="0.26.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="gp_segment_id" Attno="-7" Mdid="0.23.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + </dxl:Columns> + <dxl:IndexInfoList/> + <dxl:CheckConstraints/> + <dxl:DistrOpfamilies> + <dxl:DistrOpfamily Mdid="0.1977.1.0"/> + </dxl:DistrOpfamilies> + <dxl:PartConstraint> + <dxl:And> + <dxl:IsNotNull> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + </dxl:IsNotNull> + <dxl:Comparison ComparisonOperator=">=" OperatorMdid="0.525.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="3"/> + </dxl:Comparison> + <dxl:Comparison ComparisonOperator="<" OperatorMdid="0.97.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="4"/> + </dxl:Comparison> + </dxl:And> + </dxl:PartConstraint> + </dxl:Relation> + <dxl:ColumnStatistics Mdid="1.41025.1.0.2" Name="t1" Width="7.000000" NullFreq="0.000000" NdvRemain="0.000000" FreqRemain="0.000000" ColStatsMissing="false"> + <dxl:StatsBucket Frequency="0.500000" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.25.1.0" Value="AAAACmhlbGxvMQ==" LintValue="304040219"/> + <dxl:UpperBound Closed="true" TypeMdid="0.25.1.0" Value="AAAACmhlbGxvMQ==" LintValue="304040219"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.500000" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.25.1.0" Value="AAAACmhlbGxvMA==" LintValue="516237992"/> + <dxl:UpperBound Closed="true" TypeMdid="0.25.1.0" Value="AAAACmhlbGxvMA==" LintValue="516237992"/> + </dxl:StatsBucket> + </dxl:ColumnStatistics> + <dxl:GPDBScalarOp Mdid="0.525.1.0" Name=">=" ComparisonType="GEq" ReturnsNullOnNullInput="true" IsNDVPreserving="false"> + <dxl:LeftType Mdid="0.23.1.0"/> + <dxl:RightType Mdid="0.23.1.0"/> + <dxl:ResultType Mdid="0.16.1.0"/> + <dxl:OpFunc Mdid="0.150.1.0"/> + <dxl:Commutator Mdid="0.523.1.0"/> + <dxl:InverseOp Mdid="0.97.1.0"/> + <dxl:Opfamilies> + <dxl:Opfamily Mdid="0.1976.1.0"/> + <dxl:Opfamily Mdid="0.4054.1.0"/> + <dxl:Opfamily Mdid="0.10009.1.0"/> + </dxl:Opfamilies> + </dxl:GPDBScalarOp> + <dxl:Relation Mdid="6.41019.1.0" Name="pt_1_prt_6" IsTemporary="false" StorageType="Heap" DistributionPolicy="Hash" DistributionColumns="0" Keys="11,5"> + <dxl:Columns> + <dxl:Column Name="dist" Attno="1" Mdid="0.23.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt1" Attno="2" Mdid="0.25.1.0" Nullable="true" ColWidth="7"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt2" Attno="3" Mdid="0.25.1.0" Nullable="true" ColWidth="6"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt3" Attno="4" Mdid="0.25.1.0" Nullable="true" ColWidth="10"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="ptid" Attno="5" Mdid="0.23.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="ctid" Attno="-1" Mdid="0.27.1.0" Nullable="false" ColWidth="6"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="xmin" Attno="-2" Mdid="0.28.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="cmin" Attno="-3" Mdid="0.29.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="xmax" Attno="-4" Mdid="0.28.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="cmax" Attno="-5" Mdid="0.29.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="tableoid" Attno="-6" Mdid="0.26.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="gp_segment_id" Attno="-7" Mdid="0.23.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + </dxl:Columns> + <dxl:IndexInfoList/> + <dxl:CheckConstraints/> + <dxl:DistrOpfamilies> + <dxl:DistrOpfamily Mdid="0.1977.1.0"/> + </dxl:DistrOpfamilies> + <dxl:PartConstraint> + <dxl:And> + <dxl:IsNotNull> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + </dxl:IsNotNull> + <dxl:Comparison ComparisonOperator=">=" OperatorMdid="0.525.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="4"/> + </dxl:Comparison> + <dxl:Comparison ComparisonOperator="<" OperatorMdid="0.97.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="5"/> + </dxl:Comparison> + </dxl:And> + </dxl:PartConstraint> + </dxl:Relation> + <dxl:GPDBScalarOp Mdid="0.654.1.0" Name="||" ComparisonType="Other" ReturnsNullOnNullInput="true" IsNDVPreserving="true"> + <dxl:LeftType Mdid="0.25.1.0"/> + <dxl:RightType Mdid="0.25.1.0"/> + <dxl:ResultType Mdid="0.25.1.0"/> + <dxl:OpFunc Mdid="0.1258.1.0"/> + </dxl:GPDBScalarOp> + <dxl:Type Mdid="0.16.1.0" Name="bool" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsTextRelated="false" IsFixedLength="true" Length="1" PassByValue="true"> + <dxl:DistrOpfamily Mdid="0.2222.1.0"/> + <dxl:LegacyDistrOpfamily Mdid="0.7124.1.0"/> + <dxl:PartOpfamily Mdid="0.424.1.0"/> + <dxl:EqualityOp Mdid="0.91.1.0"/> + <dxl:InequalityOp Mdid="0.85.1.0"/> + <dxl:LessThanOp Mdid="0.58.1.0"/> + <dxl:LessThanEqualsOp Mdid="0.1694.1.0"/> + <dxl:GreaterThanOp Mdid="0.59.1.0"/> + <dxl:GreaterThanEqualsOp Mdid="0.1695.1.0"/> + <dxl:ComparisonOp Mdid="0.1693.1.0"/> + <dxl:ArrayType Mdid="0.1000.1.0"/> + <dxl:MinAgg Mdid="0.0.0.0"/> + <dxl:MaxAgg Mdid="0.0.0.0"/> + <dxl:AvgAgg Mdid="0.0.0.0"/> + <dxl:SumAgg Mdid="0.0.0.0"/> + <dxl:CountAgg Mdid="0.2147.1.0"/> + </dxl:Type> + <dxl:RelationExtendedStatistics Mdid="10.41025.1.0" Name="t"/> + <dxl:Type Mdid="0.20.1.0" Name="Int8" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsTextRelated="false" IsFixedLength="true" Length="8" PassByValue="true"> + <dxl:DistrOpfamily Mdid="0.1977.1.0"/> + <dxl:LegacyDistrOpfamily Mdid="0.7100.1.0"/> + <dxl:PartOpfamily Mdid="0.1976.1.0"/> + <dxl:EqualityOp Mdid="0.410.1.0"/> + <dxl:InequalityOp Mdid="0.411.1.0"/> + <dxl:LessThanOp Mdid="0.412.1.0"/> + <dxl:LessThanEqualsOp Mdid="0.414.1.0"/> + <dxl:GreaterThanOp Mdid="0.413.1.0"/> + <dxl:GreaterThanEqualsOp Mdid="0.415.1.0"/> + <dxl:ComparisonOp Mdid="0.351.1.0"/> + <dxl:ArrayType Mdid="0.1016.1.0"/> + <dxl:MinAgg Mdid="0.2131.1.0"/> + <dxl:MaxAgg Mdid="0.2115.1.0"/> + <dxl:AvgAgg Mdid="0.2100.1.0"/> + <dxl:SumAgg Mdid="0.2107.1.0"/> + <dxl:CountAgg Mdid="0.2147.1.0"/> + </dxl:Type> + <dxl:Relation Mdid="6.40995.1.0" Name="pt_1_prt_2" IsTemporary="false" StorageType="Heap" DistributionPolicy="Hash" DistributionColumns="0" Keys="11,5"> + <dxl:Columns> + <dxl:Column Name="dist" Attno="1" Mdid="0.23.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt1" Attno="2" Mdid="0.25.1.0" Nullable="true" ColWidth="7"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt2" Attno="3" Mdid="0.25.1.0" Nullable="true" ColWidth="6"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt3" Attno="4" Mdid="0.25.1.0" Nullable="true" ColWidth="10"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="ptid" Attno="5" Mdid="0.23.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="ctid" Attno="-1" Mdid="0.27.1.0" Nullable="false" ColWidth="6"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="xmin" Attno="-2" Mdid="0.28.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="cmin" Attno="-3" Mdid="0.29.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="xmax" Attno="-4" Mdid="0.28.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="cmax" Attno="-5" Mdid="0.29.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="tableoid" Attno="-6" Mdid="0.26.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="gp_segment_id" Attno="-7" Mdid="0.23.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + </dxl:Columns> + <dxl:IndexInfoList/> + <dxl:CheckConstraints/> + <dxl:DistrOpfamilies> + <dxl:DistrOpfamily Mdid="0.1977.1.0"/> + </dxl:DistrOpfamilies> + <dxl:PartConstraint> + <dxl:And> + <dxl:IsNotNull> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + </dxl:IsNotNull> + <dxl:Comparison ComparisonOperator=">=" OperatorMdid="0.525.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="0"/> + </dxl:Comparison> + <dxl:Comparison ComparisonOperator="<" OperatorMdid="0.97.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="1"/> + </dxl:Comparison> + </dxl:And> + </dxl:PartConstraint> + </dxl:Relation> + <dxl:Type Mdid="0.23.1.0" Name="int4" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsTextRelated="false" IsFixedLength="true" Length="4" PassByValue="true"> + <dxl:DistrOpfamily Mdid="0.1977.1.0"/> + <dxl:LegacyDistrOpfamily Mdid="0.7100.1.0"/> + <dxl:PartOpfamily Mdid="0.1976.1.0"/> + <dxl:EqualityOp Mdid="0.96.1.0"/> + <dxl:InequalityOp Mdid="0.518.1.0"/> + <dxl:LessThanOp Mdid="0.97.1.0"/> + <dxl:LessThanEqualsOp Mdid="0.523.1.0"/> + <dxl:GreaterThanOp Mdid="0.521.1.0"/> + <dxl:GreaterThanEqualsOp Mdid="0.525.1.0"/> + <dxl:ComparisonOp Mdid="0.351.1.0"/> + <dxl:ArrayType Mdid="0.1007.1.0"/> + <dxl:MinAgg Mdid="0.2132.1.0"/> + <dxl:MaxAgg Mdid="0.2116.1.0"/> + <dxl:AvgAgg Mdid="0.2101.1.0"/> + <dxl:SumAgg Mdid="0.2108.1.0"/> + <dxl:CountAgg Mdid="0.2147.1.0"/> + </dxl:Type> + <dxl:Type Mdid="0.25.1.0" Name="text" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsTextRelated="true" IsFixedLength="false" Length="-1" PassByValue="false"> + <dxl:DistrOpfamily Mdid="0.1995.1.0"/> + <dxl:LegacyDistrOpfamily Mdid="0.7105.1.0"/> + <dxl:PartOpfamily Mdid="0.1994.1.0"/> + <dxl:EqualityOp Mdid="0.98.1.0"/> + <dxl:InequalityOp Mdid="0.531.1.0"/> + <dxl:LessThanOp Mdid="0.664.1.0"/> + <dxl:LessThanEqualsOp Mdid="0.665.1.0"/> + <dxl:GreaterThanOp Mdid="0.666.1.0"/> + <dxl:GreaterThanEqualsOp Mdid="0.667.1.0"/> + <dxl:ComparisonOp Mdid="0.360.1.0"/> + <dxl:ArrayType Mdid="0.1009.1.0"/> + <dxl:MinAgg Mdid="0.2145.1.0"/> + <dxl:MaxAgg Mdid="0.2129.1.0"/> + <dxl:AvgAgg Mdid="0.0.0.0"/> + <dxl:SumAgg Mdid="0.0.0.0"/> + <dxl:CountAgg Mdid="0.2147.1.0"/> + </dxl:Type> + <dxl:Relation Mdid="6.41007.1.0" Name="pt_1_prt_4" IsTemporary="false" StorageType="Heap" DistributionPolicy="Hash" DistributionColumns="0" Keys="11,5"> + <dxl:Columns> + <dxl:Column Name="dist" Attno="1" Mdid="0.23.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt1" Attno="2" Mdid="0.25.1.0" Nullable="true" ColWidth="7"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt2" Attno="3" Mdid="0.25.1.0" Nullable="true" ColWidth="6"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt3" Attno="4" Mdid="0.25.1.0" Nullable="true" ColWidth="10"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="ptid" Attno="5" Mdid="0.23.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="ctid" Attno="-1" Mdid="0.27.1.0" Nullable="false" ColWidth="6"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="xmin" Attno="-2" Mdid="0.28.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="cmin" Attno="-3" Mdid="0.29.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="xmax" Attno="-4" Mdid="0.28.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="cmax" Attno="-5" Mdid="0.29.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="tableoid" Attno="-6" Mdid="0.26.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="gp_segment_id" Attno="-7" Mdid="0.23.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + </dxl:Columns> + <dxl:IndexInfoList/> + <dxl:CheckConstraints/> + <dxl:DistrOpfamilies> + <dxl:DistrOpfamily Mdid="0.1977.1.0"/> + </dxl:DistrOpfamilies> + <dxl:PartConstraint> + <dxl:And> + <dxl:IsNotNull> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + </dxl:IsNotNull> + <dxl:Comparison ComparisonOperator=">=" OperatorMdid="0.525.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="2"/> + </dxl:Comparison> + <dxl:Comparison ComparisonOperator="<" OperatorMdid="0.97.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="3"/> + </dxl:Comparison> + </dxl:And> + </dxl:PartConstraint> + </dxl:Relation> + <dxl:Type Mdid="0.26.1.0" Name="oid" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsTextRelated="false" IsFixedLength="true" Length="4" PassByValue="true"> + <dxl:DistrOpfamily Mdid="0.1990.1.0"/> + <dxl:LegacyDistrOpfamily Mdid="0.7109.1.0"/> + <dxl:PartOpfamily Mdid="0.1989.1.0"/> + <dxl:EqualityOp Mdid="0.607.1.0"/> + <dxl:InequalityOp Mdid="0.608.1.0"/> + <dxl:LessThanOp Mdid="0.609.1.0"/> + <dxl:LessThanEqualsOp Mdid="0.611.1.0"/> + <dxl:GreaterThanOp Mdid="0.610.1.0"/> + <dxl:GreaterThanEqualsOp Mdid="0.612.1.0"/> + <dxl:ComparisonOp Mdid="0.356.1.0"/> + <dxl:ArrayType Mdid="0.1028.1.0"/> + <dxl:MinAgg Mdid="0.2134.1.0"/> + <dxl:MaxAgg Mdid="0.2118.1.0"/> + <dxl:AvgAgg Mdid="0.0.0.0"/> + <dxl:SumAgg Mdid="0.0.0.0"/> + <dxl:CountAgg Mdid="0.2147.1.0"/> + </dxl:Type> + <dxl:Type Mdid="0.27.1.0" Name="tid" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsTextRelated="false" IsFixedLength="true" Length="6" PassByValue="false"> + <dxl:DistrOpfamily Mdid="0.2227.1.0"/> + <dxl:LegacyDistrOpfamily Mdid="0.7110.1.0"/> + <dxl:PartOpfamily Mdid="0.2789.1.0"/> + <dxl:EqualityOp Mdid="0.387.1.0"/> + <dxl:InequalityOp Mdid="0.402.1.0"/> + <dxl:LessThanOp Mdid="0.2799.1.0"/> + <dxl:LessThanEqualsOp Mdid="0.2801.1.0"/> + <dxl:GreaterThanOp Mdid="0.2800.1.0"/> + <dxl:GreaterThanEqualsOp Mdid="0.2802.1.0"/> + <dxl:ComparisonOp Mdid="0.2794.1.0"/> + <dxl:ArrayType Mdid="0.1010.1.0"/> + <dxl:MinAgg Mdid="0.2798.1.0"/> + <dxl:MaxAgg Mdid="0.2797.1.0"/> + <dxl:AvgAgg Mdid="0.0.0.0"/> + <dxl:SumAgg Mdid="0.0.0.0"/> + <dxl:CountAgg Mdid="0.2147.1.0"/> + </dxl:Type> + <dxl:GPDBScalarOp Mdid="0.413.1.0" Name=">" ComparisonType="GT" ReturnsNullOnNullInput="true" IsNDVPreserving="false"> + <dxl:LeftType Mdid="0.20.1.0"/> + <dxl:RightType Mdid="0.20.1.0"/> + <dxl:ResultType Mdid="0.16.1.0"/> + <dxl:OpFunc Mdid="0.470.1.0"/> + <dxl:Commutator Mdid="0.412.1.0"/> + <dxl:InverseOp Mdid="0.414.1.0"/> + <dxl:Opfamilies> + <dxl:Opfamily Mdid="0.1976.1.0"/> + <dxl:Opfamily Mdid="0.4054.1.0"/> + <dxl:Opfamily Mdid="0.10009.1.0"/> + </dxl:Opfamilies> + </dxl:GPDBScalarOp> + <dxl:Relation Mdid="6.41001.1.0" Name="pt_1_prt_3" IsTemporary="false" StorageType="Heap" DistributionPolicy="Hash" DistributionColumns="0" Keys="11,5"> + <dxl:Columns> + <dxl:Column Name="dist" Attno="1" Mdid="0.23.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt1" Attno="2" Mdid="0.25.1.0" Nullable="true" ColWidth="7"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt2" Attno="3" Mdid="0.25.1.0" Nullable="true" ColWidth="6"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt3" Attno="4" Mdid="0.25.1.0" Nullable="true" ColWidth="10"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="ptid" Attno="5" Mdid="0.23.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="ctid" Attno="-1" Mdid="0.27.1.0" Nullable="false" ColWidth="6"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="xmin" Attno="-2" Mdid="0.28.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="cmin" Attno="-3" Mdid="0.29.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="xmax" Attno="-4" Mdid="0.28.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="cmax" Attno="-5" Mdid="0.29.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="tableoid" Attno="-6" Mdid="0.26.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="gp_segment_id" Attno="-7" Mdid="0.23.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + </dxl:Columns> + <dxl:IndexInfoList/> + <dxl:CheckConstraints/> + <dxl:DistrOpfamilies> + <dxl:DistrOpfamily Mdid="0.1977.1.0"/> + </dxl:DistrOpfamilies> + <dxl:PartConstraint> + <dxl:And> + <dxl:IsNotNull> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + </dxl:IsNotNull> + <dxl:Comparison ComparisonOperator=">=" OperatorMdid="0.525.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="1"/> + </dxl:Comparison> + <dxl:Comparison ComparisonOperator="<" OperatorMdid="0.97.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="2"/> + </dxl:Comparison> + </dxl:And> + </dxl:PartConstraint> + </dxl:Relation> + <dxl:Type Mdid="0.29.1.0" Name="cid" IsRedistributable="true" IsHashable="true" IsMergeJoinable="false" IsComposite="false" IsTextRelated="false" IsFixedLength="true" Length="4" PassByValue="true"> + <dxl:DistrOpfamily Mdid="0.2226.1.0"/> + <dxl:EqualityOp Mdid="0.385.1.0"/> + <dxl:InequalityOp Mdid="0.0.0.0"/> + <dxl:LessThanOp Mdid="0.0.0.0"/> + <dxl:LessThanEqualsOp Mdid="0.0.0.0"/> + <dxl:GreaterThanOp Mdid="0.0.0.0"/> + <dxl:GreaterThanEqualsOp Mdid="0.0.0.0"/> + <dxl:ComparisonOp Mdid="0.0.0.0"/> + <dxl:ArrayType Mdid="0.1012.1.0"/> + <dxl:MinAgg Mdid="0.0.0.0"/> + <dxl:MaxAgg Mdid="0.0.0.0"/> + <dxl:AvgAgg Mdid="0.0.0.0"/> + <dxl:SumAgg Mdid="0.0.0.0"/> + <dxl:CountAgg Mdid="0.2147.1.0"/> + </dxl:Type> + <dxl:Type Mdid="0.28.1.0" Name="xid" IsRedistributable="true" IsHashable="true" IsMergeJoinable="false" IsComposite="false" IsTextRelated="false" IsFixedLength="true" Length="4" PassByValue="true"> + <dxl:DistrOpfamily Mdid="0.2225.1.0"/> + <dxl:EqualityOp Mdid="0.352.1.0"/> + <dxl:InequalityOp Mdid="0.3315.1.0"/> + <dxl:LessThanOp Mdid="0.0.0.0"/> + <dxl:LessThanEqualsOp Mdid="0.0.0.0"/> + <dxl:GreaterThanOp Mdid="0.0.0.0"/> + <dxl:GreaterThanEqualsOp Mdid="0.0.0.0"/> + <dxl:ComparisonOp Mdid="0.0.0.0"/> + <dxl:ArrayType Mdid="0.1011.1.0"/> + <dxl:MinAgg Mdid="0.0.0.0"/> + <dxl:MaxAgg Mdid="0.0.0.0"/> + <dxl:AvgAgg Mdid="0.0.0.0"/> + <dxl:SumAgg Mdid="0.0.0.0"/> + <dxl:CountAgg Mdid="0.2147.1.0"/> + </dxl:Type> + <dxl:Relation Mdid="6.40989.1.0" Name="pt_1_prt_junk_data" IsTemporary="false" StorageType="Heap" DistributionPolicy="Hash" DistributionColumns="0" Keys="11,5"> + <dxl:Columns> + <dxl:Column Name="dist" Attno="1" Mdid="0.23.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt1" Attno="2" Mdid="0.25.1.0" Nullable="true" ColWidth="7"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt2" Attno="3" Mdid="0.25.1.0" Nullable="true" ColWidth="6"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt3" Attno="4" Mdid="0.25.1.0" Nullable="true" ColWidth="10"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="ptid" Attno="5" Mdid="0.23.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="ctid" Attno="-1" Mdid="0.27.1.0" Nullable="false" ColWidth="6"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="xmin" Attno="-2" Mdid="0.28.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="cmin" Attno="-3" Mdid="0.29.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="xmax" Attno="-4" Mdid="0.28.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="cmax" Attno="-5" Mdid="0.29.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="tableoid" Attno="-6" Mdid="0.26.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="gp_segment_id" Attno="-7" Mdid="0.23.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + </dxl:Columns> + <dxl:IndexInfoList/> + <dxl:CheckConstraints/> + <dxl:DistrOpfamilies> + <dxl:DistrOpfamily Mdid="0.1977.1.0"/> + </dxl:DistrOpfamilies> + <dxl:PartConstraint> + <dxl:Not> + <dxl:And> + <dxl:IsNotNull> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + </dxl:IsNotNull> + <dxl:Or> + <dxl:And> + <dxl:Comparison ComparisonOperator=">=" OperatorMdid="0.525.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="0"/> + </dxl:Comparison> + <dxl:Comparison ComparisonOperator="<" OperatorMdid="0.97.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="1"/> + </dxl:Comparison> + </dxl:And> + <dxl:And> + <dxl:Comparison ComparisonOperator=">=" OperatorMdid="0.525.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="1"/> + </dxl:Comparison> + <dxl:Comparison ComparisonOperator="<" OperatorMdid="0.97.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="2"/> + </dxl:Comparison> + </dxl:And> + <dxl:And> + <dxl:Comparison ComparisonOperator=">=" OperatorMdid="0.525.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="2"/> + </dxl:Comparison> + <dxl:Comparison ComparisonOperator="<" OperatorMdid="0.97.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="3"/> + </dxl:Comparison> + </dxl:And> + <dxl:And> + <dxl:Comparison ComparisonOperator=">=" OperatorMdid="0.525.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="3"/> + </dxl:Comparison> + <dxl:Comparison ComparisonOperator="<" OperatorMdid="0.97.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="4"/> + </dxl:Comparison> + </dxl:And> + <dxl:And> + <dxl:Comparison ComparisonOperator=">=" OperatorMdid="0.525.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="4"/> + </dxl:Comparison> + <dxl:Comparison ComparisonOperator="<" OperatorMdid="0.97.1.0"> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="5"/> + </dxl:Comparison> + </dxl:And> + </dxl:Or> + </dxl:And> + </dxl:Not> + </dxl:PartConstraint> + </dxl:Relation> + <dxl:ColumnStatistics Mdid="1.41025.1.0.1" Name="tid" Width="4.000000" NullFreq="0.000000" NdvRemain="0.000000" FreqRemain="0.000000" ColStatsMissing="false"> + <dxl:StatsBucket Frequency="0.500000" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="0"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="0"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.500000" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="1"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="1"/> + </dxl:StatsBucket> + </dxl:ColumnStatistics> + <dxl:ColumnStatistics Mdid="1.41025.1.0.0" Name="dist" Width="4.000000" NullFreq="0.000000" NdvRemain="0.000000" FreqRemain="0.000000" ColStatsMissing="false"> + <dxl:StatsBucket Frequency="0.500000" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="0"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="0"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.500000" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="1"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="1"/> + </dxl:StatsBucket> + </dxl:ColumnStatistics> + <dxl:RelationStatistics Mdid="2.40986.1.0" Name="pt" Rows="108.000000" RelPages="0" RelAllVisible="0" EmptyRelation="false"/> + <dxl:Relation Mdid="6.40986.1.0" Name="pt" IsTemporary="false" StorageType="Heap" DistributionPolicy="Hash" DistributionColumns="0" Keys="10,11,5" PartitionColumns="4" PartitionTypes="r"> + <dxl:Columns> + <dxl:Column Name="dist" Attno="1" Mdid="0.23.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt1" Attno="2" Mdid="0.25.1.0" Nullable="true" ColWidth="8"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt2" Attno="3" Mdid="0.25.1.0" Nullable="true" ColWidth="8"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="pt3" Attno="4" Mdid="0.25.1.0" Nullable="true" ColWidth="8"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="ptid" Attno="5" Mdid="0.23.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="ctid" Attno="-1" Mdid="0.27.1.0" Nullable="false" ColWidth="6"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="xmin" Attno="-2" Mdid="0.28.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="cmin" Attno="-3" Mdid="0.29.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="xmax" Attno="-4" Mdid="0.28.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="cmax" Attno="-5" Mdid="0.29.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="tableoid" Attno="-6" Mdid="0.26.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="gp_segment_id" Attno="-7" Mdid="0.23.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + </dxl:Columns> + <dxl:IndexInfoList/> + <dxl:CheckConstraints/> + <dxl:DistrOpfamilies> + <dxl:DistrOpfamily Mdid="0.1977.1.0"/> + </dxl:DistrOpfamilies> + <dxl:Partitions> + <dxl:Partition Mdid="6.40995.1.0"/> + <dxl:Partition Mdid="6.41001.1.0"/> + <dxl:Partition Mdid="6.41007.1.0"/> + <dxl:Partition Mdid="6.41013.1.0"/> + <dxl:Partition Mdid="6.41019.1.0"/> + <dxl:Partition Mdid="6.40989.1.0"/> + </dxl:Partitions> + </dxl:Relation> + <dxl:ColumnStatistics Mdid="1.40986.1.0.4" Name="ptid" Width="4.000000" NullFreq="0.000000" NdvRemain="0.000000" FreqRemain="0.000000" ColStatsMissing="false"> + <dxl:StatsBucket Frequency="0.166665" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="0"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="0"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.166665" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="1"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="1"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.166665" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="2"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="2"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.166665" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="3"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="3"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.166665" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="4"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="4"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.166665" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="5"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="5"/> + </dxl:StatsBucket> + </dxl:ColumnStatistics> + <dxl:RelationExtendedStatistics Mdid="10.40986.1.0" Name="pt"/> + <dxl:MDCast Mdid="3.23.1.0;23.1.0" Name="int4" BinaryCoercible="true" SourceTypeId="0.23.1.0" DestinationTypeId="0.23.1.0" CastFuncId="0.0.0.0" CoercePathType="1"/> + <dxl:GPDBScalarOp Mdid="0.97.1.0" Name="<" ComparisonType="LT" ReturnsNullOnNullInput="true" IsNDVPreserving="false"> + <dxl:LeftType Mdid="0.23.1.0"/> + <dxl:RightType Mdid="0.23.1.0"/> + <dxl:ResultType Mdid="0.16.1.0"/> + <dxl:OpFunc Mdid="0.66.1.0"/> + <dxl:Commutator Mdid="0.521.1.0"/> + <dxl:InverseOp Mdid="0.525.1.0"/> + <dxl:Opfamilies> + <dxl:Opfamily Mdid="0.1976.1.0"/> + <dxl:Opfamily Mdid="0.4054.1.0"/> + <dxl:Opfamily Mdid="0.10009.1.0"/> + </dxl:Opfamilies> + </dxl:GPDBScalarOp> + <dxl:GPDBScalarOp Mdid="0.96.1.0" Name="=" ComparisonType="Eq" ReturnsNullOnNullInput="true" IsNDVPreserving="false"> + <dxl:LeftType Mdid="0.23.1.0"/> + <dxl:RightType Mdid="0.23.1.0"/> + <dxl:ResultType Mdid="0.16.1.0"/> + <dxl:OpFunc Mdid="0.65.1.0"/> + <dxl:Commutator Mdid="0.96.1.0"/> + <dxl:InverseOp Mdid="0.518.1.0"/> + <dxl:HashOpfamily Mdid="0.1977.1.0"/> + <dxl:LegacyHashOpfamily Mdid="0.7100.1.0"/> + <dxl:Opfamilies> + <dxl:Opfamily Mdid="0.1976.1.0"/> + <dxl:Opfamily Mdid="0.1977.1.0"/> + <dxl:Opfamily Mdid="0.4054.1.0"/> + <dxl:Opfamily Mdid="0.7100.1.0"/> + <dxl:Opfamily Mdid="0.10009.1.0"/> + </dxl:Opfamilies> + </dxl:GPDBScalarOp> + <dxl:GPDBScalarOp Mdid="0.98.1.0" Name="=" ComparisonType="Eq" ReturnsNullOnNullInput="true" IsNDVPreserving="false"> + <dxl:LeftType Mdid="0.25.1.0"/> + <dxl:RightType Mdid="0.25.1.0"/> + <dxl:ResultType Mdid="0.16.1.0"/> + <dxl:OpFunc Mdid="0.67.1.0"/> + <dxl:Commutator Mdid="0.98.1.0"/> + <dxl:InverseOp Mdid="0.531.1.0"/> + <dxl:HashOpfamily Mdid="0.1995.1.0"/> + <dxl:LegacyHashOpfamily Mdid="0.7105.1.0"/> + <dxl:Opfamilies> + <dxl:Opfamily Mdid="0.1994.1.0"/> + <dxl:Opfamily Mdid="0.1995.1.0"/> + <dxl:Opfamily Mdid="0.2095.1.0"/> + <dxl:Opfamily Mdid="0.2229.1.0"/> + <dxl:Opfamily Mdid="0.4017.1.0"/> + <dxl:Opfamily Mdid="0.4056.1.0"/> + <dxl:Opfamily Mdid="0.7105.1.0"/> + <dxl:Opfamily Mdid="0.10018.1.0"/> + <dxl:Opfamily Mdid="0.10022.1.0"/> + </dxl:Opfamilies> + </dxl:GPDBScalarOp> + <dxl:GPDBAgg Mdid="0.2803.1.0" Name="count" IsRepSafe="true" IsSplittable="true" HashAggCapable="true"> + <dxl:ResultType Mdid="0.20.1.0"/> + <dxl:IntermediateResultType Mdid="0.20.1.0"/> + </dxl:GPDBAgg> + <dxl:RelationStatistics Mdid="2.41025.1.0" Name="t" Rows="4.000000" RelPages="1" RelAllVisible="0" EmptyRelation="false"/> + <dxl:Relation Mdid="6.41025.1.0" Name="t" IsTemporary="false" StorageType="Heap" DistributionPolicy="Hash" DistributionColumns="0" Keys="10,4"> + <dxl:Columns> + <dxl:Column Name="dist" Attno="1" Mdid="0.23.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="tid" Attno="2" Mdid="0.23.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="t1" Attno="3" Mdid="0.25.1.0" Nullable="true" ColWidth="7"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="t2" Attno="4" Mdid="0.25.1.0" Nullable="true" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="ctid" Attno="-1" Mdid="0.27.1.0" Nullable="false" ColWidth="6"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="xmin" Attno="-2" Mdid="0.28.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="cmin" Attno="-3" Mdid="0.29.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="xmax" Attno="-4" Mdid="0.28.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="cmax" Attno="-5" Mdid="0.29.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="tableoid" Attno="-6" Mdid="0.26.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + <dxl:Column Name="gp_segment_id" Attno="-7" Mdid="0.23.1.0" Nullable="false" ColWidth="4"> + <dxl:DefaultValue/> + </dxl:Column> + </dxl:Columns> + <dxl:IndexInfoList/> + <dxl:CheckConstraints/> + <dxl:DistrOpfamilies> + <dxl:DistrOpfamily Mdid="0.1977.1.0"/> + </dxl:DistrOpfamilies> + </dxl:Relation> + <dxl:ColumnStatistics Mdid="1.40986.1.0.0" Name="dist" Width="4.000000" NullFreq="0.000000" NdvRemain="0.000000" FreqRemain="0.000000" ColStatsMissing="false"> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="0"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="0"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="1"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="1"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="2"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="2"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="3"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="3"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="4"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="4"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="5"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="5"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="6"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="6"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="7"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="7"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="8"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="8"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="9"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="9"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="10"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="10"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="11"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="11"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="12"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="12"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="13"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="13"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="14"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="14"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="15"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="15"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="16"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="16"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="17"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="17"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="18"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="18"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="19"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="19"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="20"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="20"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="21"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="21"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="22"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="22"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="23"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="23"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="24"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="24"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="25"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="25"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="26"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="26"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="27"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="27"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="28"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="28"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="29"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="29"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="30"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="30"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="31"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="31"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="32"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="32"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="33"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="33"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="34"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="34"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="35"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="35"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="36"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="36"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="37"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="37"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="38"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="38"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="39"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="39"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="40"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="40"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="41"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="41"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="42"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="42"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="43"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="43"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="44"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="44"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="45"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="45"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="46"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="46"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="47"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="47"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="48"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="48"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="49"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="49"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="50"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="50"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="51"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="51"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="52"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="52"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.018518" DistinctValues="1.000000"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="53"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="53"/> + </dxl:StatsBucket> + </dxl:ColumnStatistics> + </dxl:Metadata> + <dxl:Query> + <dxl:OutputColumns> + <dxl:Ident ColId="1" ColName="dist" TypeMdid="0.23.1.0"/> + <dxl:Ident ColId="2" ColName="pt1" TypeMdid="0.25.1.0"/> + <dxl:Ident ColId="3" ColName="pt2" TypeMdid="0.25.1.0"/> + <dxl:Ident ColId="4" ColName="pt3" TypeMdid="0.25.1.0"/> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + </dxl:OutputColumns> + <dxl:CTEList/> + <dxl:LogicalSelect> + <dxl:SubqueryExists> + <dxl:LogicalProject> + <dxl:ProjList> + <dxl:ProjElem ColId="24" Alias="?column?"> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="1"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:LogicalSelect> + <dxl:And> + <dxl:Comparison ComparisonOperator="=" OperatorMdid="0.96.1.0"> + <dxl:Ident ColId="14" ColName="tid" TypeMdid="0.23.1.0"/> + <dxl:Ident ColId="5" ColName="ptid" TypeMdid="0.23.1.0"/> + </dxl:Comparison> + <dxl:Comparison ComparisonOperator="=" OperatorMdid="0.98.1.0"> + <dxl:Ident ColId="15" ColName="t1" TypeMdid="0.25.1.0"/> + <dxl:OpExpr OperatorName="||" OperatorMdid="0.654.1.0" OperatorType="0.25.1.0"> + <dxl:ConstValue TypeMdid="0.25.1.0" Value="AAAACWhlbGxv" LintValue="2424674345"/> + <dxl:CoerceViaIO TypeMdid="0.25.1.0" CoercionForm="1" Location="15"> + <dxl:Ident ColId="14" ColName="tid" TypeMdid="0.23.1.0"/> + </dxl:CoerceViaIO> + </dxl:OpExpr> + </dxl:Comparison> + </dxl:And> + <dxl:LogicalGet> + <dxl:TableDescriptor Mdid="6.41025.1.0" TableName="t" LockMode="1"> + <dxl:Columns> + <dxl:Column ColId="13" Attno="1" ColName="dist" TypeMdid="0.23.1.0" ColWidth="4"/> + <dxl:Column ColId="14" Attno="2" ColName="tid" TypeMdid="0.23.1.0" ColWidth="4"/> + <dxl:Column ColId="15" Attno="3" ColName="t1" TypeMdid="0.25.1.0" ColWidth="7"/> + <dxl:Column ColId="16" Attno="4" ColName="t2" TypeMdid="0.25.1.0" ColWidth="4"/> + <dxl:Column ColId="17" Attno="-1" ColName="ctid" TypeMdid="0.27.1.0" ColWidth="6"/> + <dxl:Column ColId="18" Attno="-2" ColName="xmin" TypeMdid="0.28.1.0" ColWidth="4"/> + <dxl:Column ColId="19" Attno="-3" ColName="cmin" TypeMdid="0.29.1.0" ColWidth="4"/> + <dxl:Column ColId="20" Attno="-4" ColName="xmax" TypeMdid="0.28.1.0" ColWidth="4"/> + <dxl:Column ColId="21" Attno="-5" ColName="cmax" TypeMdid="0.29.1.0" ColWidth="4"/> + <dxl:Column ColId="22" Attno="-6" ColName="tableoid" TypeMdid="0.26.1.0" ColWidth="4"/> + <dxl:Column ColId="23" Attno="-7" ColName="gp_segment_id" TypeMdid="0.23.1.0" ColWidth="4"/> + </dxl:Columns> + </dxl:TableDescriptor> + </dxl:LogicalGet> + </dxl:LogicalSelect> + </dxl:LogicalProject> + </dxl:SubqueryExists> + <dxl:LogicalGet> + <dxl:TableDescriptor Mdid="6.40986.1.0" TableName="pt" LockMode="1"> + <dxl:Columns> + <dxl:Column ColId="1" Attno="1" ColName="dist" TypeMdid="0.23.1.0" ColWidth="4"/> + <dxl:Column ColId="2" Attno="2" ColName="pt1" TypeMdid="0.25.1.0" ColWidth="8"/> + <dxl:Column ColId="3" Attno="3" ColName="pt2" TypeMdid="0.25.1.0" ColWidth="8"/> + <dxl:Column ColId="4" Attno="4" ColName="pt3" TypeMdid="0.25.1.0" ColWidth="8"/> + <dxl:Column ColId="5" Attno="5" ColName="ptid" TypeMdid="0.23.1.0" ColWidth="4"/> + <dxl:Column ColId="6" Attno="-1" ColName="ctid" TypeMdid="0.27.1.0" ColWidth="6"/> + <dxl:Column ColId="7" Attno="-2" ColName="xmin" TypeMdid="0.28.1.0" ColWidth="4"/> + <dxl:Column ColId="8" Attno="-3" ColName="cmin" TypeMdid="0.29.1.0" ColWidth="4"/> + <dxl:Column ColId="9" Attno="-4" ColName="xmax" TypeMdid="0.28.1.0" ColWidth="4"/> + <dxl:Column ColId="10" Attno="-5" ColName="cmax" TypeMdid="0.29.1.0" ColWidth="4"/> + <dxl:Column ColId="11" Attno="-6" ColName="tableoid" TypeMdid="0.26.1.0" ColWidth="4"/> + <dxl:Column ColId="12" Attno="-7" ColName="gp_segment_id" TypeMdid="0.23.1.0" ColWidth="4"/> + </dxl:Columns> + </dxl:TableDescriptor> + </dxl:LogicalGet> + </dxl:LogicalSelect> + </dxl:Query> + <dxl:Plan Id="0" SpaceSize="646"> + <dxl:GatherMotion InputSegments="0,1,2" OutputSegments="-1"> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="862.008143" Rows="28.799712" Width="32"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="0" Alias="dist"> + <dxl:Ident ColId="0" ColName="dist" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="1" Alias="pt1"> + <dxl:Ident ColId="1" ColName="pt1" TypeMdid="0.25.1.0"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="2" Alias="pt2"> + <dxl:Ident ColId="2" ColName="pt2" TypeMdid="0.25.1.0"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="3" Alias="pt3"> + <dxl:Ident ColId="3" ColName="pt3" TypeMdid="0.25.1.0"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="4" Alias="ptid"> + <dxl:Ident ColId="4" ColName="ptid" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:Filter/> + <dxl:SortingColumnList/> + <dxl:HashJoin JoinType="In"> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="862.004708" Rows="28.799712" Width="32"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="0" Alias="dist"> + <dxl:Ident ColId="0" ColName="dist" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="1" Alias="pt1"> + <dxl:Ident ColId="1" ColName="pt1" TypeMdid="0.25.1.0"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="2" Alias="pt2"> + <dxl:Ident ColId="2" ColName="pt2" TypeMdid="0.25.1.0"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="3" Alias="pt3"> + <dxl:Ident ColId="3" ColName="pt3" TypeMdid="0.25.1.0"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="4" Alias="ptid"> + <dxl:Ident ColId="4" ColName="ptid" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:Filter/> + <dxl:JoinFilter/> + <dxl:HashCondList> + <dxl:Comparison ComparisonOperator="=" OperatorMdid="0.96.1.0"> + <dxl:Ident ColId="4" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:Ident ColId="13" ColName="tid" TypeMdid="0.23.1.0"/> + </dxl:Comparison> + </dxl:HashCondList> + <dxl:DynamicTableScan SelectorIds="0"> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="431.001215" Rows="28.800000" Width="32"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="0" Alias="dist"> + <dxl:Ident ColId="0" ColName="dist" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="1" Alias="pt1"> + <dxl:Ident ColId="1" ColName="pt1" TypeMdid="0.25.1.0"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="2" Alias="pt2"> + <dxl:Ident ColId="2" ColName="pt2" TypeMdid="0.25.1.0"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="3" Alias="pt3"> + <dxl:Ident ColId="3" ColName="pt3" TypeMdid="0.25.1.0"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="4" Alias="ptid"> + <dxl:Ident ColId="4" ColName="ptid" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:Filter> + <dxl:Not> + <dxl:IsNull> + <dxl:Ident ColId="4" ColName="ptid" TypeMdid="0.23.1.0"/> + </dxl:IsNull> + </dxl:Not> + </dxl:Filter> + <dxl:Partitions> + <dxl:Partition Mdid="6.40995.1.0"/> + <dxl:Partition Mdid="6.41001.1.0"/> + <dxl:Partition Mdid="6.41007.1.0"/> + <dxl:Partition Mdid="6.41013.1.0"/> + <dxl:Partition Mdid="6.41019.1.0"/> + <dxl:Partition Mdid="6.40989.1.0"/> + </dxl:Partitions> + <dxl:TableDescriptor Mdid="6.40986.1.0" TableName="pt" LockMode="1"> + <dxl:Columns> + <dxl:Column ColId="0" Attno="1" ColName="dist" TypeMdid="0.23.1.0" ColWidth="4"/> + <dxl:Column ColId="1" Attno="2" ColName="pt1" TypeMdid="0.25.1.0" ColWidth="8"/> + <dxl:Column ColId="2" Attno="3" ColName="pt2" TypeMdid="0.25.1.0" ColWidth="8"/> + <dxl:Column ColId="3" Attno="4" ColName="pt3" TypeMdid="0.25.1.0" ColWidth="8"/> + <dxl:Column ColId="4" Attno="5" ColName="ptid" TypeMdid="0.23.1.0" ColWidth="4"/> + <dxl:Column ColId="5" Attno="-1" ColName="ctid" TypeMdid="0.27.1.0" ColWidth="6"/> + <dxl:Column ColId="6" Attno="-2" ColName="xmin" TypeMdid="0.28.1.0" ColWidth="4"/> + <dxl:Column ColId="7" Attno="-3" ColName="cmin" TypeMdid="0.29.1.0" ColWidth="4"/> + <dxl:Column ColId="8" Attno="-4" ColName="xmax" TypeMdid="0.28.1.0" ColWidth="4"/> + <dxl:Column ColId="9" Attno="-5" ColName="cmax" TypeMdid="0.29.1.0" ColWidth="4"/> + <dxl:Column ColId="10" Attno="-6" ColName="tableoid" TypeMdid="0.26.1.0" ColWidth="4"/> + <dxl:Column ColId="11" Attno="-7" ColName="gp_segment_id" TypeMdid="0.23.1.0" ColWidth="4"/> + </dxl:Columns> + </dxl:TableDescriptor> + </dxl:DynamicTableScan> + <dxl:PartitionSelector RelationMdid="6.40986.1.0" SelectorId="0" ScanId="1" Partitions="0,1,2,3,4,5"> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="431.000251" Rows="4.800000" Width="4"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="13" Alias="tid"> + <dxl:Ident ColId="13" ColName="tid" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:PartFilterExpr> + <dxl:Comparison ComparisonOperator="=" OperatorMdid="0.96.1.0"> + <dxl:Ident ColId="4" ColName="ptid" TypeMdid="0.23.1.0"/> + <dxl:Ident ColId="13" ColName="tid" TypeMdid="0.23.1.0"/> + </dxl:Comparison> + </dxl:PartFilterExpr> + <dxl:BroadcastMotion InputSegments="0,1,2" OutputSegments="0,1,2"> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="431.000251" Rows="4.800000" Width="4"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="13" Alias="tid"> + <dxl:Ident ColId="13" ColName="tid" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:Filter/> + <dxl:SortingColumnList/> + <dxl:Result> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="431.000137" Rows="1.600000" Width="4"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="13" Alias="tid"> + <dxl:Ident ColId="13" ColName="tid" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:Filter/> + <dxl:OneTimeFilter/> + <dxl:Result> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="431.000137" Rows="1.600000" Width="4"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="23" Alias="?column?"> + <dxl:ConstValue TypeMdid="0.23.1.0" Value="1"/> + </dxl:ProjElem> + <dxl:ProjElem ColId="13" Alias="tid"> + <dxl:Ident ColId="13" ColName="tid" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:Filter/> + <dxl:OneTimeFilter/> + <dxl:TableScan> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="431.000135" Rows="1.600000" Width="4"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="13" Alias="tid"> + <dxl:Ident ColId="13" ColName="tid" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:Filter> + <dxl:Comparison ComparisonOperator="=" OperatorMdid="0.98.1.0"> + <dxl:Ident ColId="14" ColName="t1" TypeMdid="0.25.1.0"/> + <dxl:OpExpr OperatorName="||" OperatorMdid="0.654.1.0" OperatorType="0.25.1.0"> + <dxl:ConstValue TypeMdid="0.25.1.0" Value="AAAACWhlbGxv" LintValue="2424674345"/> + <dxl:CoerceViaIO TypeMdid="0.25.1.0" CoercionForm="1" Location="15"> + <dxl:Ident ColId="13" ColName="tid" TypeMdid="0.23.1.0"/> + </dxl:CoerceViaIO> + </dxl:OpExpr> + </dxl:Comparison> + </dxl:Filter> + <dxl:TableDescriptor Mdid="6.41025.1.0" TableName="t" LockMode="1"> + <dxl:Columns> + <dxl:Column ColId="12" Attno="1" ColName="dist" TypeMdid="0.23.1.0" ColWidth="4"/> + <dxl:Column ColId="13" Attno="2" ColName="tid" TypeMdid="0.23.1.0" ColWidth="4"/> + <dxl:Column ColId="14" Attno="3" ColName="t1" TypeMdid="0.25.1.0" ColWidth="7"/> + <dxl:Column ColId="16" Attno="-1" ColName="ctid" TypeMdid="0.27.1.0" ColWidth="6"/> + <dxl:Column ColId="17" Attno="-2" ColName="xmin" TypeMdid="0.28.1.0" ColWidth="4"/> + <dxl:Column ColId="18" Attno="-3" ColName="cmin" TypeMdid="0.29.1.0" ColWidth="4"/> + <dxl:Column ColId="19" Attno="-4" ColName="xmax" TypeMdid="0.28.1.0" ColWidth="4"/> + <dxl:Column ColId="20" Attno="-5" ColName="cmax" TypeMdid="0.29.1.0" ColWidth="4"/> + <dxl:Column ColId="21" Attno="-6" ColName="tableoid" TypeMdid="0.26.1.0" ColWidth="4"/> + <dxl:Column ColId="22" Attno="-7" ColName="gp_segment_id" TypeMdid="0.23.1.0" ColWidth="4"/> + </dxl:Columns> + </dxl:TableDescriptor> + </dxl:TableScan> + </dxl:Result> + </dxl:Result> + </dxl:BroadcastMotion> + </dxl:PartitionSelector> + </dxl:HashJoin> + </dxl:GatherMotion> + </dxl:Plan> + </dxl:Thread> +</dxl:DXLMessage> diff --git a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalLeftSemiHashJoin.h b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalLeftSemiHashJoin.h index a5bcc6ef63..5f522a46d1 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalLeftSemiHashJoin.h +++ b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalLeftSemiHashJoin.h @@ -55,6 +55,14 @@ public: return "CPhysicalLeftSemiHashJoin"; } + CPartitionPropagationSpec *PppsRequired( + CMemoryPool *mp, CExpressionHandle &exprhdl, + CPartitionPropagationSpec *pppsRequired, ULONG child_index, + CDrvdPropArray *pdrgpdpCtxt, ULONG ulOptReq) const override; + + CPartitionPropagationSpec *PppsDerive( + CMemoryPool *mp, CExpressionHandle &exprhdl) const override; + // check if required columns are included in output columns BOOL FProvidesReqdCols(CExpressionHandle &exprhdl, CColRefSet *pcrsRequired, ULONG ulOptReq) const override; diff --git a/src/backend/gporca/libgpopt/src/operators/CPhysicalLeftSemiHashJoin.cpp b/src/backend/gporca/libgpopt/src/operators/CPhysicalLeftSemiHashJoin.cpp index 9ea35d58d6..6dce2745f8 100644 --- a/src/backend/gporca/libgpopt/src/operators/CPhysicalLeftSemiHashJoin.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CPhysicalLeftSemiHashJoin.cpp @@ -67,4 +67,25 @@ CPhysicalLeftSemiHashJoin::FProvidesReqdCols(CExpressionHandle &exprhdl, return FOuterProvidesReqdCols(exprhdl, pcrsRequired); } + +CPartitionPropagationSpec * +CPhysicalLeftSemiHashJoin::PppsRequired(CMemoryPool *mp, + CExpressionHandle &exprhdl, + CPartitionPropagationSpec *pppsRequired, + ULONG child_index, + CDrvdPropArray *pdrgpdpCtxt, + ULONG ulOptReq) const +{ + return PppsRequiredForJoins(mp, exprhdl, pppsRequired, child_index, + pdrgpdpCtxt, ulOptReq); +} + +// In the following function, we are generating the Derived property : +// "Partition Propagation Spec" of Right Outer Hash join. +CPartitionPropagationSpec * +CPhysicalLeftSemiHashJoin::PppsDerive(CMemoryPool *mp, + CExpressionHandle &exprhdl) const +{ + return PppsDeriveForJoins(mp, exprhdl); +} // EOF diff --git a/src/backend/gporca/server/CMakeLists.txt b/src/backend/gporca/server/CMakeLists.txt index 244ae4fcd3..b9d82a61d1 100644 --- a/src/backend/gporca/server/CMakeLists.txt +++ b/src/backend/gporca/server/CMakeLists.txt @@ -58,7 +58,8 @@ InSubqWithPrjListOuterRefNoInnerRefColumnIn InSubqWithPrjListOuterRefNoInnerRefC NestedInSubqWithPrjListOuterRefNoInnerRef InEqualityJoin Correlated-SemiJoin CorrelatedSemiJoin-True CorrelatedIN-LeftSemiJoin-True CorrelatedIN-LeftSemiNotIn-True InSubqWithPrjListOuterRefNoInnerRefColumnPlusConstIn CorrelatedIN-LeftSemiJoin-Limit -CorrelatedLeftSemiNLJoinWithLimit PushFilterToSemiJoinLeftChild SubqOuterReferenceInClause; +CorrelatedLeftSemiNLJoinWithLimit PushFilterToSemiJoinLeftChild SubqOuterReferenceInClause +SemiJoinDPE; CAntiSemiJoinTest: AntiSemiJoin2Select-1 AntiSemiJoin2Select-2 NOT-IN-NotNullBoth NOT-IN-NullInner NOT-IN-NullOuter diff --git a/src/test/regress/expected/dpe_optimizer.out b/src/test/regress/expected/dpe_optimizer.out index 73b84d7f6a..53c2b53a02 100644 --- a/src/test/regress/expected/dpe_optimizer.out +++ b/src/test/regress/expected/dpe_optimizer.out @@ -218,30 +218,23 @@ select * from t, pt where t1 = pt1 and ptid = tid; -- in and exists clauses -- explain (costs off, timing off, summary off, analyze) select * from pt where ptid in (select tid from t where t1 = 'hello' || tid); - QUERY PLAN ------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) (actual rows=18 loops=1) - -> Hash Join (actual rows=8 loops=1) + -> Hash Semi Join (actual rows=8 loops=1) Hash Cond: (pt.ptid = t.tid) - Extra Text: (seg1) Hash chain length 1.0 avg, 1 max, using 2 of 262144 buckets. + Extra Text: (seg1) Hash chain length 1.0 avg, 1 max, using 2 of 524288 buckets. -> Dynamic Seq Scan on pt (actual rows=8 loops=1) Number of partitions to scan: 6 (out of 6) Partitions scanned: Avg 2.0 x 3 workers. Max 2 parts (seg0). -> Hash (actual rows=2 loops=1) - Buckets: 262144 Batches: 1 Memory Usage: 2049kB + Buckets: 524288 Batches: 1 Memory Usage: 4097kB -> Partition Selector (selector id: $0) (actual rows=2 loops=1) -> Broadcast Motion 3:3 (slice2; segments: 3) (actual rows=2 loops=1) - -> GroupAggregate (actual rows=2 loops=1) - Group Key: t.tid - -> Sort (actual rows=2 loops=1) - Sort Key: t.tid - Sort Method: quicksort Memory: 75kB - -> Redistribute Motion 3:3 (slice3; segments: 3) (actual rows=2 loops=1) - Hash Key: t.tid - -> Seq Scan on t (actual rows=2 loops=1) - Filter: (t1 = ('hello'::text || (tid)::text)) + -> Seq Scan on t (actual rows=2 loops=1) + Filter: (t1 = ('hello'::text || (tid)::text)) Optimizer: Pivotal Optimizer (GPORCA) -(21 rows) +(14 rows) select * from pt where ptid in (select tid from t where t1 = 'hello' || tid); dist | pt1 | pt2 | pt3 | ptid @@ -270,31 +263,24 @@ select * from pt where ptid in (select tid from t where t1 = 'hello' || tid); -- Known_opt_diff: MPP-21320 -- end_ignore explain (costs off, timing off, summary off, analyze) select * from pt where exists (select 1 from t where tid = ptid and t1 = 'hello' || tid); - QUERY PLAN ------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) (actual rows=18 loops=1) - -> Hash Join (actual rows=8 loops=1) + -> Hash Semi Join (actual rows=8 loops=1) Hash Cond: (pt.ptid = t.tid) - Extra Text: (seg1) Hash chain length 1.0 avg, 1 max, using 2 of 262144 buckets. + Extra Text: (seg1) Hash chain length 1.0 avg, 1 max, using 2 of 524288 buckets. -> Dynamic Seq Scan on pt (actual rows=8 loops=1) Number of partitions to scan: 6 (out of 6) Filter: (NOT (ptid IS NULL)) Partitions scanned: Avg 2.0 x 3 workers. Max 2 parts (seg0). -> Hash (actual rows=2 loops=1) - Buckets: 262144 Batches: 1 Memory Usage: 2049kB + Buckets: 524288 Batches: 1 Memory Usage: 4097kB -> Partition Selector (selector id: $0) (actual rows=2 loops=1) -> Broadcast Motion 3:3 (slice2; segments: 3) (actual rows=2 loops=1) - -> GroupAggregate (actual rows=2 loops=1) - Group Key: t.tid - -> Sort (actual rows=2 loops=1) - Sort Key: t.tid - Sort Method: quicksort Memory: 75kB - -> Redistribute Motion 3:3 (slice3; segments: 3) (actual rows=2 loops=1) - Hash Key: t.tid - -> Seq Scan on t (actual rows=2 loops=1) - Filter: (t1 = ('hello'::text || (tid)::text)) + -> Seq Scan on t (actual rows=2 loops=1) + Filter: (t1 = ('hello'::text || (tid)::text)) Optimizer: Pivotal Optimizer (GPORCA) -(22 rows) +(15 rows) select * from pt where exists (select 1 from t where tid = ptid and t1 = 'hello' || tid); dist | pt1 | pt2 | pt3 | ptid --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
