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 6297842c5fdc2a1526e57d01f1105dd1070e61eb Author: Chris Hajas <[email protected]> AuthorDate: Mon Mar 27 11:05:37 2023 -0700 Don't penalize broadcast under LASJ (not in) in Orca (#15240) * Don't penalize broadcast under LASJ (not in) in Orca When we have a query like `select * from foo where a not in (select a from bar);` we can produce 2 valid plans: ``` Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..896.64 rows=40000 width=4) -> Hash Left Anti Semi (Not-In) Join (cost=0.00..896.04 rows=13334 width=4) Hash Cond: (foo.a = bar.a) -> Seq Scan on foo (cost=0.00..431.62 rows=33334 width=4) -> Hash (cost=439.03..439.03 rows=100000 width=4) -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..439.03 rows=100000 width=4) -> Seq Scan on bar (cost=0.00..431.62 rows=33334 width=4) Optimizer: Pivotal Optimizer (GPORCA) ``` or ``` Hash Left Anti Semi (Not-In) Join (cost=0.00..903.99 rows=40000 width=4) Hash Cond: (foo.a = bar.a) -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..433.36 rows=100000 width=4) -> Seq Scan on foo (cost=0.00..431.62 rows=33334 width=4) -> Hash (cost=433.36..433.36 rows=100000 width=4) -> Gather Motion 3:1 (slice2; segments: 3) (cost=0.00..433.36 rows=100000 width=4) -> Seq Scan on bar (cost=0.00..431.62 rows=33334 width=4) Optimizer: Pivotal Optimizer (GPORCA) ``` In the first plan, the LASJ is executed on the segments. However, in the 2nd, we gather and run the LASJ on the coordinator, which is much worse. Due to the GUC optimizer_penalize_broadcast_threshold, if more than this number of rows is broadcast, we produce the gather plan. While it's not great to broadcast this many rows, gathering them all to the coordinator and doing it all on one segment is much less performant and can cause spilling/OOM issues. This commit sets the physical broadcast to ignore this GUC in the case of LASJ (not in). --- .../dxl/minidump/LASJ-Not-In-Force-Broadcast.mdp | 1236 ++++++++++++++++++++ .../gporca/libgpdbcost/src/CCostModelGPDB.cpp | 11 +- .../gpopt/base/CDistributionSpecReplicated.h | 23 +- .../gpopt/operators/CPhysicalMotionBroadcast.h | 3 +- .../src/base/CDistributionSpecReplicated.cpp | 6 +- .../CPhysicalLeftAntiSemiHashJoinNotIn.cpp | 29 +- .../src/operators/CPhysicalMotionBroadcast.cpp | 7 +- src/backend/gporca/server/CMakeLists.txt | 3 +- 8 files changed, 1305 insertions(+), 13 deletions(-) diff --git a/src/backend/gporca/data/dxl/minidump/LASJ-Not-In-Force-Broadcast.mdp b/src/backend/gporca/data/dxl/minidump/LASJ-Not-In-Force-Broadcast.mdp new file mode 100644 index 0000000000..4d8a7caca2 --- /dev/null +++ b/src/backend/gporca/data/dxl/minidump/LASJ-Not-In-Force-Broadcast.mdp @@ -0,0 +1,1236 @@ +<?xml version="1.0" encoding="UTF-8"?> +<dxl:DXLMessage xmlns:dxl="http://greenplum.com/dxl/2010/12/"> + <dxl:Comment><![CDATA[ + Objective: When a broadcast is under a LASJ not-in, we can generate 2 potential plans, + gather to the coordinator and do the LASJ, or broadcast the inner side and do the LASJ + on each segment. If the optimizer_penalize_broadcast_threshold is set, we should ignore + this so we don't bias toward the first bad plan. This plan should have a broadcast, NOT gathers. + + create table foo(a int); + create table bar(a int); + insert into foo select i from generate_series(1,100)i; + insert into bar select i from generate_series(1,100)i; + analyze foo; + analyze bar; + set optimizer_penalize_broadcast_threshold=10; + explain select * from foo where a not in (select a from bar); + + Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..862.03 rows=40 width=4) + -> Hash Left Anti Semi (Not-In) Join (cost=0.00..862.03 rows=14 width=4) + Hash Cond: (foo.a = bar.a) + -> Seq Scan on foo (cost=0.00..431.00 rows=34 width=4) + -> Hash (cost=431.01..431.01 rows=100 width=4) + -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..431.01 rows=100 width=4) + -> Seq Scan on bar (cost=0.00..431.00 rows=34 width=4) + Optimizer: Pivotal Optimizer (GPORCA) + (8 rows) + ]]> + </dxl:Comment> + <dxl:Thread Id="0"> + <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="10" 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:GPDBScalarOp Mdid="0.518.1.0" Name="<>" ComparisonType="NEq" 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.144.1.0"/> + <dxl:Commutator Mdid="0.518.1.0"/> + <dxl:InverseOp Mdid="0.96.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: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: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: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: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: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:GPDBScalarOp Mdid="0.410.1.0" Name="=" ComparisonType="Eq" 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.467.1.0"/> + <dxl:Commutator Mdid="0.410.1.0"/> + <dxl:InverseOp Mdid="0.411.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: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: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: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: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:RelationStatistics Mdid="2.40968.1.0" Name="foo" Rows="100.000000" RelPages="3" RelAllVisible="0" EmptyRelation="false"/> + <dxl:GPDBAgg Mdid="0.2108.1.0" Name="sum" IsRepSafe="true" IsSplittable="true" HashAggCapable="true"> + <dxl:ResultType Mdid="0.20.1.0"/> + <dxl:IntermediateResultType Mdid="0.20.1.0"/> + </dxl:GPDBAgg> + <dxl:Relation Mdid="6.40968.1.0" Name="foo" IsTemporary="false" StorageType="Heap" DistributionPolicy="Hash" DistributionColumns="0" Keys="7,1"> + <dxl:Columns> + <dxl:Column Name="a" Attno="1" 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:Relation> + <dxl:RelationStatistics Mdid="2.40971.1.0" Name="bar" Rows="100.000000" RelPages="3" RelAllVisible="0" EmptyRelation="false"/> + <dxl:Relation Mdid="6.40971.1.0" Name="bar" IsTemporary="false" StorageType="Heap" DistributionPolicy="Hash" DistributionColumns="0" Keys="7,1"> + <dxl:Columns> + <dxl:Column Name="a" Attno="1" 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:Relation> + <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="0"/> + <dxl:GPDBScalarOp Mdid="0.91.1.0" Name="=" ComparisonType="Eq" ReturnsNullOnNullInput="true" IsNDVPreserving="false"> + <dxl:LeftType Mdid="0.16.1.0"/> + <dxl:RightType Mdid="0.16.1.0"/> + <dxl:ResultType Mdid="0.16.1.0"/> + <dxl:OpFunc Mdid="0.60.1.0"/> + <dxl:Commutator Mdid="0.91.1.0"/> + <dxl:InverseOp Mdid="0.85.1.0"/> + <dxl:HashOpfamily Mdid="0.2222.1.0"/> + <dxl:LegacyHashOpfamily Mdid="0.7124.1.0"/> + <dxl:Opfamilies> + <dxl:Opfamily Mdid="0.424.1.0"/> + <dxl:Opfamily Mdid="0.2222.1.0"/> + <dxl:Opfamily Mdid="0.7124.1.0"/> + <dxl:Opfamily Mdid="0.10002.1.0"/> + </dxl:Opfamilies> + </dxl:GPDBScalarOp> + <dxl:RelationExtendedStatistics Mdid="10.40968.1.0" Name="foo"/> + <dxl:RelationExtendedStatistics Mdid="10.40971.1.0" Name="bar"/> + <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:ColumnStatistics Mdid="1.40968.1.0.0" Name="a" Width="4.000000" NullFreq="0.000000" NdvRemain="0.000000" FreqRemain="0.000000" ColStatsMissing="false"> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="1"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="2"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="2"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="3"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="3"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="4"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="4"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="5"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="5"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="6"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="6"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="7"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="7"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="8"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="8"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="9"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="9"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="10"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="10"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="11"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="11"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="12"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="12"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="13"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="13"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="14"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="14"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="15"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="15"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="16"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="16"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="17"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="17"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="18"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="18"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="19"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="19"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="20"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="20"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="21"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="21"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="22"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="22"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="23"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="23"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="24"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="24"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="25"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="25"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="26"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="26"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="27"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="27"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="28"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="28"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="29"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="29"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="30"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="30"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="31"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="31"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="32"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="32"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="33"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="33"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="34"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="34"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="35"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="35"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="36"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="36"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="37"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="37"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="38"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="38"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="39"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="39"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="40"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="40"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="41"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="41"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="42"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="42"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="43"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="43"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="44"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="44"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="45"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="45"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="46"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="46"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="47"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="47"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="48"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="48"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="49"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="49"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="50"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="50"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="51"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="51"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="52"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="52"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="53"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="53"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="54"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="54"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="55"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="55"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="56"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="56"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="57"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="57"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="58"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="58"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="59"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="59"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="60"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="60"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="61"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="61"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="62"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="62"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="63"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="63"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="64"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="64"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="65"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="65"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="66"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="66"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="67"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="67"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="68"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="68"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="69"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="69"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="70"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="70"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="71"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="71"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="72"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="72"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="73"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="73"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="74"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="74"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="75"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="75"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="76"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="76"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="77"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="77"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="78"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="78"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="79"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="79"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="80"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="80"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="81"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="81"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="82"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="82"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="83"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="83"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="84"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="84"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="85"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="85"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="86"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="86"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="87"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="87"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="88"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="88"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="89"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="89"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="90"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="90"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="91"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="91"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="92"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="92"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="93"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="93"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="94"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="94"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="95"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="95"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="96"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="96"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="97"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="97"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="98"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="98"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="99"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="99"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="100"/> + </dxl:StatsBucket> + </dxl:ColumnStatistics> + <dxl:ColumnStatistics Mdid="1.40971.1.0.0" Name="a" Width="4.000000" NullFreq="0.000000" NdvRemain="0.000000" FreqRemain="0.000000" ColStatsMissing="false"> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="1"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="2"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="2"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="3"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="3"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="4"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="4"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="5"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="5"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="6"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="6"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="7"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="7"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="8"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="8"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="9"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="9"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="10"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="10"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="11"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="11"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="12"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="12"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="13"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="13"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="14"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="14"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="15"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="15"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="16"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="16"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="17"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="17"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="18"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="18"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="19"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="19"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="20"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="20"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="21"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="21"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="22"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="22"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="23"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="23"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="24"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="24"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="25"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="25"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="26"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="26"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="27"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="27"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="28"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="28"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="29"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="29"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="30"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="30"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="31"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="31"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="32"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="32"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="33"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="33"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="34"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="34"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="35"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="35"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="36"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="36"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="37"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="37"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="38"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="38"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="39"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="39"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="40"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="40"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="41"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="41"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="42"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="42"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="43"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="43"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="44"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="44"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="45"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="45"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="46"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="46"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="47"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="47"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="48"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="48"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="49"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="49"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="50"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="50"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="51"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="51"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="52"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="52"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="53"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="53"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="54"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="54"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="55"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="55"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="56"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="56"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="57"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="57"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="58"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="58"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="59"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="59"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="60"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="60"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="61"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="61"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="62"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="62"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="63"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="63"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="64"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="64"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="65"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="65"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="66"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="66"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="67"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="67"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="68"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="68"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="69"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="69"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="70"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="70"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="71"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="71"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="72"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="72"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="73"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="73"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="74"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="74"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="75"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="75"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="76"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="76"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="77"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="77"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="78"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="78"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="79"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="79"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="80"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="80"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="81"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="81"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="82"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="82"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="83"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="83"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="84"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="84"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="85"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="85"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="86"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="86"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="87"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="87"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="88"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="88"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="89"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="89"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="90"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="90"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="91"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="91"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="92"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="92"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="93"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="93"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="94"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="94"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="95"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="95"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="96"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="96"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="97"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="97"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="98"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="98"/> + <dxl:UpperBound Closed="false" TypeMdid="0.23.1.0" Value="99"/> + </dxl:StatsBucket> + <dxl:StatsBucket Frequency="0.010101" DistinctValues="1.010101"> + <dxl:LowerBound Closed="true" TypeMdid="0.23.1.0" Value="99"/> + <dxl:UpperBound Closed="true" TypeMdid="0.23.1.0" Value="100"/> + </dxl:StatsBucket> + </dxl:ColumnStatistics> + </dxl:Metadata> + <dxl:Query> + <dxl:OutputColumns> + <dxl:Ident ColId="1" ColName="a" TypeMdid="0.23.1.0"/> + </dxl:OutputColumns> + <dxl:CTEList/> + <dxl:LogicalSelect> + <dxl:Not> + <dxl:SubqueryAny OperatorName="=" OperatorMdid="0.96.1.0" ColId="9"> + <dxl:Ident ColId="1" ColName="a" TypeMdid="0.23.1.0"/> + <dxl:LogicalGet> + <dxl:TableDescriptor Mdid="6.40971.1.0" TableName="bar" LockMode="1"> + <dxl:Columns> + <dxl:Column ColId="9" Attno="1" ColName="a" TypeMdid="0.23.1.0" ColWidth="4"/> + <dxl:Column ColId="10" Attno="-1" ColName="ctid" TypeMdid="0.27.1.0" ColWidth="6"/> + <dxl:Column ColId="11" Attno="-2" ColName="xmin" TypeMdid="0.28.1.0" ColWidth="4"/> + <dxl:Column ColId="12" Attno="-3" ColName="cmin" TypeMdid="0.29.1.0" ColWidth="4"/> + <dxl:Column ColId="13" Attno="-4" ColName="xmax" TypeMdid="0.28.1.0" ColWidth="4"/> + <dxl:Column ColId="14" Attno="-5" ColName="cmax" TypeMdid="0.29.1.0" ColWidth="4"/> + <dxl:Column ColId="15" Attno="-6" ColName="tableoid" TypeMdid="0.26.1.0" ColWidth="4"/> + <dxl:Column ColId="16" Attno="-7" ColName="gp_segment_id" TypeMdid="0.23.1.0" ColWidth="4"/> + </dxl:Columns> + </dxl:TableDescriptor> + </dxl:LogicalGet> + </dxl:SubqueryAny> + </dxl:Not> + <dxl:LogicalGet> + <dxl:TableDescriptor Mdid="6.40968.1.0" TableName="foo" LockMode="1"> + <dxl:Columns> + <dxl:Column ColId="1" Attno="1" ColName="a" TypeMdid="0.23.1.0" ColWidth="4"/> + <dxl:Column ColId="2" Attno="-1" ColName="ctid" TypeMdid="0.27.1.0" ColWidth="6"/> + <dxl:Column ColId="3" Attno="-2" ColName="xmin" TypeMdid="0.28.1.0" ColWidth="4"/> + <dxl:Column ColId="4" Attno="-3" ColName="cmin" TypeMdid="0.29.1.0" ColWidth="4"/> + <dxl:Column ColId="5" Attno="-4" ColName="xmax" TypeMdid="0.28.1.0" ColWidth="4"/> + <dxl:Column ColId="6" Attno="-5" ColName="cmax" TypeMdid="0.29.1.0" ColWidth="4"/> + <dxl:Column ColId="7" Attno="-6" ColName="tableoid" TypeMdid="0.26.1.0" ColWidth="4"/> + <dxl:Column ColId="8" 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="3"> + <dxl:GatherMotion InputSegments="0,1,2" OutputSegments="-1"> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="862.034640" Rows="40.000000" Width="4"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="0" Alias="a"> + <dxl:Ident ColId="0" ColName="a" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:Filter/> + <dxl:SortingColumnList/> + <dxl:HashJoin JoinType="LeftAntiSemiJoinNotIn"> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="862.034044" Rows="40.000000" Width="4"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="0" Alias="a"> + <dxl:Ident ColId="0" ColName="a" 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="0" ColName="a" TypeMdid="0.23.1.0"/> + <dxl:Ident ColId="8" ColName="a" TypeMdid="0.23.1.0"/> + </dxl:Comparison> + </dxl:HashCondList> + <dxl:TableScan> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="431.000623" Rows="100.000000" Width="4"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="0" Alias="a"> + <dxl:Ident ColId="0" ColName="a" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:Filter/> + <dxl:TableDescriptor Mdid="6.40968.1.0" TableName="foo" LockMode="1"> + <dxl:Columns> + <dxl:Column ColId="0" Attno="1" ColName="a" TypeMdid="0.23.1.0" ColWidth="4"/> + <dxl:Column ColId="1" Attno="-1" ColName="ctid" TypeMdid="0.27.1.0" ColWidth="6"/> + <dxl:Column ColId="2" Attno="-2" ColName="xmin" TypeMdid="0.28.1.0" ColWidth="4"/> + <dxl:Column ColId="3" Attno="-3" ColName="cmin" TypeMdid="0.29.1.0" ColWidth="4"/> + <dxl:Column ColId="4" Attno="-4" ColName="xmax" TypeMdid="0.28.1.0" ColWidth="4"/> + <dxl:Column ColId="5" Attno="-5" ColName="cmax" TypeMdid="0.29.1.0" ColWidth="4"/> + <dxl:Column ColId="6" Attno="-6" ColName="tableoid" TypeMdid="0.26.1.0" ColWidth="4"/> + <dxl:Column ColId="7" Attno="-7" ColName="gp_segment_id" TypeMdid="0.23.1.0" ColWidth="4"/> + </dxl:Columns> + </dxl:TableDescriptor> + </dxl:TableScan> + <dxl:BroadcastMotion InputSegments="0,1,2" OutputSegments="0,1,2"> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="431.008031" Rows="300.000000" Width="4"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="8" Alias="a"> + <dxl:Ident ColId="8" ColName="a" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:Filter/> + <dxl:SortingColumnList/> + <dxl:TableScan> + <dxl:Properties> + <dxl:Cost StartupCost="0" TotalCost="431.000623" Rows="100.000000" Width="4"/> + </dxl:Properties> + <dxl:ProjList> + <dxl:ProjElem ColId="8" Alias="a"> + <dxl:Ident ColId="8" ColName="a" TypeMdid="0.23.1.0"/> + </dxl:ProjElem> + </dxl:ProjList> + <dxl:Filter/> + <dxl:TableDescriptor Mdid="6.40971.1.0" TableName="bar" LockMode="1"> + <dxl:Columns> + <dxl:Column ColId="8" Attno="1" ColName="a" TypeMdid="0.23.1.0" ColWidth="4"/> + <dxl:Column ColId="9" Attno="-1" ColName="ctid" TypeMdid="0.27.1.0" ColWidth="6"/> + <dxl:Column ColId="10" Attno="-2" ColName="xmin" TypeMdid="0.28.1.0" ColWidth="4"/> + <dxl:Column ColId="11" Attno="-3" ColName="cmin" TypeMdid="0.29.1.0" ColWidth="4"/> + <dxl:Column ColId="12" Attno="-4" ColName="xmax" TypeMdid="0.28.1.0" ColWidth="4"/> + <dxl:Column ColId="13" Attno="-5" ColName="cmax" TypeMdid="0.29.1.0" ColWidth="4"/> + <dxl:Column ColId="14" Attno="-6" ColName="tableoid" TypeMdid="0.26.1.0" ColWidth="4"/> + <dxl:Column ColId="15" Attno="-7" ColName="gp_segment_id" TypeMdid="0.23.1.0" ColWidth="4"/> + </dxl:Columns> + </dxl:TableDescriptor> + </dxl:TableScan> + </dxl:BroadcastMotion> + </dxl:HashJoin> + </dxl:GatherMotion> + </dxl:Plan> + </dxl:Thread> +</dxl:DXLMessage> diff --git a/src/backend/gporca/libgpdbcost/src/CCostModelGPDB.cpp b/src/backend/gporca/libgpdbcost/src/CCostModelGPDB.cpp index 0429e0a71a..32fd5fc989 100644 --- a/src/backend/gporca/libgpdbcost/src/CCostModelGPDB.cpp +++ b/src/backend/gporca/libgpdbcost/src/CCostModelGPDB.cpp @@ -28,6 +28,7 @@ #include "gpopt/operators/CPhysicalIndexOnlyScan.h" #include "gpopt/operators/CPhysicalIndexScan.h" #include "gpopt/operators/CPhysicalMotion.h" +#include "gpopt/operators/CPhysicalMotionBroadcast.h" #include "gpopt/operators/CPhysicalPartitionSelector.h" #include "gpopt/operators/CPhysicalSequenceProject.h" #include "gpopt/operators/CPhysicalUnionAll.h" @@ -1469,13 +1470,19 @@ CCostModelGPDB::CostMotion(CMemoryPool *mp, CExpressionHandle &exprhdl, if (COperator::EopPhysicalMotionBroadcast == op_id) { + CPhysicalMotionBroadcast *physical_broadcast = + CPhysicalMotionBroadcast::PopConvert(exprhdl.Pop()); COptimizerConfig *optimizer_config = COptCtxt::PoctxtFromTLS()->GetOptimizerConfig(); ULONG broadcast_threshold = optimizer_config->GetHint()->UlBroadcastThreshold(); - // if broadcast threshold is 0, don't penalize - if (broadcast_threshold > 0 && num_rows_outer > broadcast_threshold) + // if the broadcast threshold is 0, don't penalize + // also, if the replicated distribution is set to ignore the broadcast + // threshold (e.g. it's under a LASJ not-in) don't penalize + if (broadcast_threshold > 0 && num_rows_outer > broadcast_threshold && + !CDistributionSpecReplicated::PdsConvert(physical_broadcast->Pds()) + ->FIgnoreBroadcastThreshold()) { DOUBLE ulPenalizationFactor = 100000000000000.0; costLocal = CCost(ulPenalizationFactor); diff --git a/src/backend/gporca/libgpopt/include/gpopt/base/CDistributionSpecReplicated.h b/src/backend/gporca/libgpopt/include/gpopt/base/CDistributionSpecReplicated.h index 46d6684a23..56bbb3cb6f 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/base/CDistributionSpecReplicated.h +++ b/src/backend/gporca/libgpopt/include/gpopt/base/CDistributionSpecReplicated.h @@ -26,13 +26,28 @@ private: // replicated support CDistributionSpec::EDistributionType m_replicated; + BOOL m_ignore_broadcast_threshold; + public: CDistributionSpecReplicated(const CDistributionSpecReplicated &) = delete; // ctor CDistributionSpecReplicated( CDistributionSpec::EDistributionType replicated_type) - : m_replicated(replicated_type) + : m_replicated(replicated_type), m_ignore_broadcast_threshold(false) + { + GPOS_ASSERT(replicated_type == CDistributionSpec::EdtReplicated || + replicated_type == + CDistributionSpec::EdtTaintedReplicated || + replicated_type == CDistributionSpec::EdtStrictReplicated); + } + + // ctor + CDistributionSpecReplicated( + CDistributionSpec::EDistributionType replicated_type, + BOOL ignore_broadcast_threshold) + : m_replicated(replicated_type), + m_ignore_broadcast_threshold(ignore_broadcast_threshold) { GPOS_ASSERT(replicated_type == CDistributionSpec::EdtReplicated || replicated_type == @@ -96,6 +111,12 @@ public: return dynamic_cast<CDistributionSpecReplicated *>(pds); } + BOOL + FIgnoreBroadcastThreshold() const + { + return m_ignore_broadcast_threshold; + } + }; // class CDistributionSpecReplicated } // namespace gpopt diff --git a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalMotionBroadcast.h b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalMotionBroadcast.h index 024f9ca378..478a7e5c37 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalMotionBroadcast.h +++ b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalMotionBroadcast.h @@ -37,7 +37,8 @@ public: CPhysicalMotionBroadcast(const CPhysicalMotionBroadcast &) = delete; // ctor - explicit CPhysicalMotionBroadcast(CMemoryPool *mp); + explicit CPhysicalMotionBroadcast(CMemoryPool *mp, + BOOL ignore_broadcast_threshold); // dtor ~CPhysicalMotionBroadcast() override; diff --git a/src/backend/gporca/libgpopt/src/base/CDistributionSpecReplicated.cpp b/src/backend/gporca/libgpopt/src/base/CDistributionSpecReplicated.cpp index 25ac916706..5b0b9e5be1 100644 --- a/src/backend/gporca/libgpopt/src/base/CDistributionSpecReplicated.cpp +++ b/src/backend/gporca/libgpopt/src/base/CDistributionSpecReplicated.cpp @@ -136,8 +136,10 @@ CDistributionSpecReplicated::AppendEnforcers(CMemoryPool *mp, } pexpr->AddRef(); - CExpression *pexprMotion = GPOS_NEW(mp) - CExpression(mp, GPOS_NEW(mp) CPhysicalMotionBroadcast(mp), pexpr); + CExpression *pexprMotion = GPOS_NEW(mp) CExpression( + mp, + GPOS_NEW(mp) CPhysicalMotionBroadcast(mp, m_ignore_broadcast_threshold), + pexpr); pdrgpexpr->Append(pexprMotion); } // EOF diff --git a/src/backend/gporca/libgpopt/src/operators/CPhysicalLeftAntiSemiHashJoinNotIn.cpp b/src/backend/gporca/libgpopt/src/operators/CPhysicalLeftAntiSemiHashJoinNotIn.cpp index 76d051ffd8..a310c5291d 100644 --- a/src/backend/gporca/libgpopt/src/operators/CPhysicalLeftAntiSemiHashJoinNotIn.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CPhysicalLeftAntiSemiHashJoinNotIn.cpp @@ -68,6 +68,7 @@ CPhysicalLeftAntiSemiHashJoinNotIn::Ped( GPOS_ASSERT(2 > child_index); GPOS_ASSERT(ulOptReq < UlDistrRequests()); + CEnfdDistribution *enfd_dist = nullptr; if (0 == ulOptReq && 1 == child_index && (FNullableHashKeys(exprhdl.DeriveNotNullColumns(0), false /*fInner*/) || FNullableHashKeys(exprhdl.DeriveNotNullColumns(1), true /*fInner*/))) @@ -77,14 +78,36 @@ CPhysicalLeftAntiSemiHashJoinNotIn::Ped( // whether the inner is empty, and this needs to be detected everywhere // b. if the inner hash keys are nullable, because every segment needs to // detect nulls coming from the inner child - return GPOS_NEW(mp) CEnfdDistribution( + + enfd_dist = GPOS_NEW(mp) CEnfdDistribution( GPOS_NEW(mp) CDistributionSpecReplicated(CDistributionSpec::EdtReplicated), CEnfdDistribution::EdmSatisfy); } + else + { + enfd_dist = CPhysicalHashJoin::Ped(mp, exprhdl, prppInput, child_index, + pdrgpdpCtxt, ulOptReq); + } + + // If the LASJ requires a replicated distribution (which will generate + // a broadcast enforcer), we want to ignore the + // `optimizer_penalize_broadcast_threshold` value. Otherwise, we may + // gather both of its children and do all processing on the + // coordinator. This will be less performant at best, and cause OOM in + // the worst case. Between these 2 options, broadcasting one side will + // always be better. + if (enfd_dist->PdsRequired()->Edt() == CDistributionSpec::EdtReplicated) + { + CDistributionSpecReplicated *pds_rep = GPOS_NEW(mp) + CDistributionSpecReplicated(CDistributionSpec::EdtReplicated, + true /* ignore_broadcast_threshold */); + CEnfdDistribution::EDistributionMatching matches = enfd_dist->Edm(); + enfd_dist->Release(); + return GPOS_NEW(mp) CEnfdDistribution(pds_rep, matches); + } - return CPhysicalHashJoin::Ped(mp, exprhdl, prppInput, child_index, - pdrgpdpCtxt, ulOptReq); + return enfd_dist; } // EOF diff --git a/src/backend/gporca/libgpopt/src/operators/CPhysicalMotionBroadcast.cpp b/src/backend/gporca/libgpopt/src/operators/CPhysicalMotionBroadcast.cpp index b36c7aa86d..d2a03fdcd5 100644 --- a/src/backend/gporca/libgpopt/src/operators/CPhysicalMotionBroadcast.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CPhysicalMotionBroadcast.cpp @@ -28,11 +28,12 @@ using namespace gpopt; // Ctor // //--------------------------------------------------------------------------- -CPhysicalMotionBroadcast::CPhysicalMotionBroadcast(CMemoryPool *mp) +CPhysicalMotionBroadcast::CPhysicalMotionBroadcast( + CMemoryPool *mp, BOOL ignore_broadcast_threshold) : CPhysicalMotion(mp), m_pdsReplicated(nullptr) { - m_pdsReplicated = GPOS_NEW(mp) - CDistributionSpecReplicated(CDistributionSpec::EdtStrictReplicated); + m_pdsReplicated = GPOS_NEW(mp) CDistributionSpecReplicated( + CDistributionSpec::EdtStrictReplicated, ignore_broadcast_threshold); } diff --git a/src/backend/gporca/server/CMakeLists.txt b/src/backend/gporca/server/CMakeLists.txt index 4f0a5f5d4a..cfb491fcc3 100644 --- a/src/backend/gporca/server/CMakeLists.txt +++ b/src/backend/gporca/server/CMakeLists.txt @@ -63,7 +63,8 @@ CorrelatedLeftSemiNLJoinWithLimit PushFilterToSemiJoinLeftChild SubqOuterReferen CAntiSemiJoinTest: AntiSemiJoin2Select-1 AntiSemiJoin2Select-2 NOT-IN-NotNullBoth NOT-IN-NullInner NOT-IN-NullOuter Correlated-AntiSemiJoin CorrelatedAntiSemiJoin-True Correlated-LASJ-With-Outer-Col NotInToLASJ -Correlated-LASJ-With-Outer-Const Correlated-LASJ-With-Outer-Expr LeftOuter2InnerUnionAllAntiSemiJoin-Tpcds; +Correlated-LASJ-With-Outer-Const Correlated-LASJ-With-Outer-Expr LeftOuter2InnerUnionAllAntiSemiJoin-Tpcds +LASJ-Not-In-Force-Broadcast; CPredicateTest: ConvertBoolConstNullToConstTableFalseFilter --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
