.outputRowsCount(lessThan3Rows) .symbolStats(new Symbol("x"), symbolAssert -> symbolAssert.averageRowSize(4.0) .lowValue(-10) .highValue(3) .outputRowsCount(18.75) .symbolStats(new Symbol("x"), symbolAssert -> symbolAssert.averageRowSize(4.0) .lowValue(-3) .highValue(-3) .outputRowsCount(262.5) .symbolStats(new Symbol("x"), symbolAssert -> symbolAssert.averageRowSize(4.0) .lowValue(-10) .highValue(-3)
public SymbolStatsAssertion isEqualTo(SymbolStatsEstimate expected) { return nullsFraction(expected.getNullsFraction()) .lowValue(expected.getLowValue()) .highValue(expected.getHighValue()) .distinctValuesCount(expected.getDistinctValuesCount()) .averageRowSize(expected.getAverageRowSize()); } }
.outputRowsCount(375) .symbolStats(new Symbol("x"), symbolAssert -> symbolAssert.averageRowSize(4.0) .lowValue(-10.0) .highValue(0.0) .outputRowsCount(37.5) .symbolStats(new Symbol("x"), symbolAssert -> symbolAssert.averageRowSize(4.0) .lowValue(-7.5) .highValue(0.0) .outputRowsCount(37.5) .symbolStats(new Symbol("x"), symbolAssert -> symbolAssert.averageRowSize(4.0) .lowValue(1) .highValue(3) .outputRowsCount(37.5) .symbolStats(new Symbol("x"), symbolAssert -> symbolAssert.averageRowSize(4.0) .lowValue(1) .highValue(3)
@Test public void testNotStats() { assertExpression("NOT(x < 0e0)") .outputRowsCount(625) // FIXME - nulls shouldn't be restored .symbolStats(new Symbol("x"), symbolAssert -> symbolAssert.averageRowSize(4.0) .lowValue(-10.0) .highValue(10.0) .distinctValuesCount(20.0) .nullsFraction(0.4)) // FIXME - nulls shouldn't be restored .symbolStats(new Symbol("y"), symbolAssert -> symbolAssert.isEqualTo(yStats)); assertExpression("NOT(x IS NULL)") .outputRowsCount(750) .symbolStats(new Symbol("x"), symbolAssert -> symbolAssert.averageRowSize(4.0) .lowValue(-10.0) .highValue(10.0) .distinctValuesCount(40.0) .nullsFraction(0)) .symbolStats(new Symbol("y"), symbolAssert -> symbolAssert.isEqualTo(yStats)); assertExpression("NOT(json_array_contains(JSON '[]', x))") .outputRowsCountUnknown(); }
.highValue(15.0) .nullsFraction(0.28) .averageRowSize(2.0); .highValue(12.0) .nullsFraction(0.28) .averageRowSize(2.0); .highValue(50.0) .nullsFraction(0.28) .averageRowSize(2.0);
.highValue(10) .nullsFraction(0.02) .averageRowSize(2.0); .highValue(10) .nullsFraction(0.02) .averageRowSize(2.0);
.outputRowsCount(rowCount) .symbolStats("x", symbolAssert -> { symbolAssert.averageRowSize(4) .lowValue(0) .highValue(5) }) .symbolStats("y", symbolAssert -> { symbolAssert.averageRowSize(4) .lowValue(0) .highValue(5) .outputRowsCount(rowCount) .symbolStats("x", symbolAssert -> { symbolAssert.averageRowSize(6) .lowValue(0) .highValue(10) }) .symbolStats("w", symbolAssert -> { symbolAssert.averageRowSize(6) .lowValue(0) .highValue(10) .outputRowsCount(rowCount) .symbolStats("x", symbolAssert -> { symbolAssert.averageRowSize(6) .lowValue(0) .highValue(10)
.distinctValuesCount(2) .nullsFraction(0) .averageRowSize(BIGINT.getFixedSize()))); .distinctValuesCount(1) .nullsFraction(0) .averageRowSize(BIGINT.getFixedSize())));
.outputRowsCount(250.0) // all rows minus nulls times range coverage (50%) .symbolStats("y", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(10.0) .lowValue(0.0) .outputRowsCount(750.0) // all rows minus nulls times range coverage (100%) .symbolStats("x", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(40.0) .lowValue(-10.0) .outputRowsCount(18.75) // all rows minus nulls divided by NDV (one value from edge is included as approximation) .symbolStats("x", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(1.0) .lowValue(-10.0) .outputRowsCount(0.0) // all rows minus nulls times range coverage (0%) .symbolStats("y", symbolAssert -> { symbolAssert.averageRowSize(0.0) .distinctValuesCount(0.0) .emptyRange() .outputRowsCount(450.0) // all rows minus nulls times range coverage (50% - heuristic) .symbolStats("leftOpen", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(25.0) //(50% heuristic) .lowValueUnknown()
.outputRowsCount(250.0) // all rows minus nulls times range coverage (50%) .symbolStats("y", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(10.0) .lowValue(2.5) .outputRowsCount(750.0) // all rows minus nulls times range coverage (100%) .symbolStats("x", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(40.0) .lowValue(-10.0) .outputRowsCount(18.75) // all rows minus nulls divided by NDV (one value from edge is included as approximation) .symbolStats("x", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(1.0) .lowValue(10.0) .outputRowsCount(0.0) // all rows minus nulls times range coverage (0%) .symbolStats("y", symbolAssert -> { symbolAssert.averageRowSize(0.0) .distinctValuesCount(0.0) .emptyRange() .outputRowsCount(225.0) // all rows minus nulls times range coverage (25% - heuristic) .symbolStats("leftOpen", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(12.5) //(25% heuristic) .lowValue(0.0)
.distinctValuesCount(2) .nullsFraction(0) .averageRowSize(BIGINT.getFixedSize()))); .distinctValuesCount(1) .nullsFraction(0) .averageRowSize(BIGINT.getFixedSize()))); .distinctValuesCount(10) .nullsFraction(0) .averageRowSize(BIGINT.getFixedSize())));
.outputRowsCount(25.0) // all rows minus nulls divided by distinct values count .symbolStats("y", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(1.0) .lowValue(2.5) .outputRowsCount(18.75) // all rows minus nulls divided by distinct values count .symbolStats("x", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(1.0) .lowValue(10.0) .outputRowsCount(0.0) // all rows minus nulls divided by distinct values count .symbolStats("y", symbolAssert -> { symbolAssert.averageRowSize(0.0) .distinctValuesCount(0.0) .emptyRange() .outputRowsCount(18.0) // all rows minus nulls divided by distinct values count .symbolStats("leftOpen", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(1.0) .lowValue(2.5) .outputRowsCount(18.0) // all rows minus nulls divided by distinct values count .symbolStats("rightOpen", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(1.0) .lowValue(-2.5)
.outputRowsCount(475.0) // all rows minus nulls multiplied by ((distinct values - 1) / distinct values) .symbolStats("y", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(19.0) .lowValue(0.0) .outputRowsCount(731.25) // all rows minus nulls multiplied by ((distinct values - 1) / distinct values) .symbolStats("x", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(39.0) .lowValue(-10.0) .outputRowsCount(500.0) // all rows minus nulls .symbolStats("y", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(19.0) .lowValue(0.0) .outputRowsCount(882.0) // all rows minus nulls multiplied by ((distinct values - 1) / distinct values) .symbolStats("leftOpen", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(49.0) .lowValueUnknown() .outputRowsCount(882.0) // all rows minus nulls divided by distinct values count .symbolStats("rightOpen", symbolAssert -> { symbolAssert.averageRowSize(4.0) .distinctValuesCount(49.0) .lowValue(-15.0)
.outputRowsCount(281.25) .symbolStats(new Symbol("x"), symbolAssert -> symbolAssert.averageRowSize(4.0) .lowValue(-7.5) .highValue(0.0)