This is an automated email from the ASF dual-hosted git repository.
abhishek pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new 0d73480c8f Latest aggregator factories should accept time as
VectorValueSelecto… (#14753)
0d73480c8f is described below
commit 0d73480c8ff705ac4f6ea36720ed2eaa5484f263
Author: Soumyava <[email protected]>
AuthorDate: Fri Aug 4 00:34:25 2023 -0700
Latest aggregator factories should accept time as VectorValueSelecto…
(#14753)
Fix the queries that have latest aggregator with an expression as time
column
---
.../aggregation/first/StringFirstLastUtils.java | 4 +--
.../last/DoubleLastAggregatorFactory.java | 5 ++--
.../last/FloatLastAggregatorFactory.java | 5 ++--
.../last/LongLastAggregatorFactory.java | 3 +-
.../last/StringLastAggregatorFactory.java | 4 +--
.../last/StringLastVectorAggregator.java | 6 ++--
.../apache/druid/sql/calcite/CalciteQueryTest.java | 32 ++++++++++++++++++++++
7 files changed, 44 insertions(+), 15 deletions(-)
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/first/StringFirstLastUtils.java
b/processing/src/main/java/org/apache/druid/query/aggregation/first/StringFirstLastUtils.java
index 6b93be7d70..3a9b8818cd 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/first/StringFirstLastUtils.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/first/StringFirstLastUtils.java
@@ -27,8 +27,8 @@ import org.apache.druid.segment.DimensionHandlerUtils;
import org.apache.druid.segment.NilColumnValueSelector;
import org.apache.druid.segment.column.ColumnCapabilities;
import org.apache.druid.segment.column.ValueType;
-import org.apache.druid.segment.vector.BaseLongVectorValueSelector;
import org.apache.druid.segment.vector.VectorObjectSelector;
+import org.apache.druid.segment.vector.VectorValueSelector;
import javax.annotation.Nullable;
import java.nio.ByteBuffer;
@@ -79,7 +79,7 @@ public class StringFirstLastUtils
* index of bounds issues is the responsibility of the caller
*/
public static SerializablePairLongString readPairFromVectorSelectorsAtIndex(
- BaseLongVectorValueSelector timeSelector,
+ VectorValueSelector timeSelector,
VectorObjectSelector valueSelector,
int index
)
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/last/DoubleLastAggregatorFactory.java
b/processing/src/main/java/org/apache/druid/query/aggregation/last/DoubleLastAggregatorFactory.java
index 5e3fa66679..ee6c330249 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/last/DoubleLastAggregatorFactory.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/last/DoubleLastAggregatorFactory.java
@@ -43,7 +43,6 @@ import org.apache.druid.segment.NilColumnValueSelector;
import org.apache.druid.segment.column.ColumnCapabilities;
import org.apache.druid.segment.column.ColumnHolder;
import org.apache.druid.segment.column.ColumnType;
-import org.apache.druid.segment.vector.BaseLongVectorValueSelector;
import org.apache.druid.segment.vector.VectorColumnSelectorFactory;
import org.apache.druid.segment.vector.VectorValueSelector;
@@ -129,8 +128,8 @@ public class DoubleLastAggregatorFactory extends
AggregatorFactory
{
ColumnCapabilities capabilities =
columnSelectorFactory.getColumnCapabilities(fieldName);
VectorValueSelector valueSelector =
columnSelectorFactory.makeValueSelector(fieldName);
- //time is always long
- BaseLongVectorValueSelector timeSelector = (BaseLongVectorValueSelector)
columnSelectorFactory.makeValueSelector(
+
+ VectorValueSelector timeSelector = columnSelectorFactory.makeValueSelector(
timeColumn);
if (capabilities == null || capabilities.isNumeric()) {
return new DoubleLastVectorAggregator(timeSelector, valueSelector);
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/last/FloatLastAggregatorFactory.java
b/processing/src/main/java/org/apache/druid/query/aggregation/last/FloatLastAggregatorFactory.java
index ff23c3d96d..f9fb0b3a4c 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/last/FloatLastAggregatorFactory.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/last/FloatLastAggregatorFactory.java
@@ -43,7 +43,6 @@ import org.apache.druid.segment.NilColumnValueSelector;
import org.apache.druid.segment.column.ColumnCapabilities;
import org.apache.druid.segment.column.ColumnHolder;
import org.apache.druid.segment.column.ColumnType;
-import org.apache.druid.segment.vector.BaseLongVectorValueSelector;
import org.apache.druid.segment.vector.VectorColumnSelectorFactory;
import org.apache.druid.segment.vector.VectorValueSelector;
@@ -141,8 +140,8 @@ public class FloatLastAggregatorFactory extends
AggregatorFactory
{
ColumnCapabilities capabilities =
columnSelectorFactory.getColumnCapabilities(fieldName);
VectorValueSelector valueSelector =
columnSelectorFactory.makeValueSelector(fieldName);
- //time is always long
- BaseLongVectorValueSelector timeSelector = (BaseLongVectorValueSelector)
columnSelectorFactory.makeValueSelector(
+
+ VectorValueSelector timeSelector = columnSelectorFactory.makeValueSelector(
timeColumn);
if (capabilities == null || capabilities.isNumeric()) {
return new FloatLastVectorAggregator(timeSelector, valueSelector);
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/last/LongLastAggregatorFactory.java
b/processing/src/main/java/org/apache/druid/query/aggregation/last/LongLastAggregatorFactory.java
index a5304fe109..c089674618 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/last/LongLastAggregatorFactory.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/last/LongLastAggregatorFactory.java
@@ -42,7 +42,6 @@ import org.apache.druid.segment.NilColumnValueSelector;
import org.apache.druid.segment.column.ColumnCapabilities;
import org.apache.druid.segment.column.ColumnHolder;
import org.apache.druid.segment.column.ColumnType;
-import org.apache.druid.segment.vector.BaseLongVectorValueSelector;
import org.apache.druid.segment.vector.VectorColumnSelectorFactory;
import org.apache.druid.segment.vector.VectorValueSelector;
@@ -140,7 +139,7 @@ public class LongLastAggregatorFactory extends
AggregatorFactory
{
ColumnCapabilities capabilities =
columnSelectorFactory.getColumnCapabilities(fieldName);
VectorValueSelector valueSelector =
columnSelectorFactory.makeValueSelector(fieldName);
- BaseLongVectorValueSelector timeSelector = (BaseLongVectorValueSelector)
columnSelectorFactory.makeValueSelector(
+ VectorValueSelector timeSelector = columnSelectorFactory.makeValueSelector(
timeColumn);
if (capabilities == null || capabilities.isNumeric()) {
return new LongLastVectorAggregator(timeSelector, valueSelector);
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/last/StringLastAggregatorFactory.java
b/processing/src/main/java/org/apache/druid/query/aggregation/last/StringLastAggregatorFactory.java
index e1b39edc4a..2f135f96cc 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/last/StringLastAggregatorFactory.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/last/StringLastAggregatorFactory.java
@@ -42,9 +42,9 @@ import org.apache.druid.segment.NilColumnValueSelector;
import org.apache.druid.segment.column.ColumnCapabilities;
import org.apache.druid.segment.column.ColumnHolder;
import org.apache.druid.segment.column.ColumnType;
-import org.apache.druid.segment.vector.BaseLongVectorValueSelector;
import org.apache.druid.segment.vector.VectorColumnSelectorFactory;
import org.apache.druid.segment.vector.VectorObjectSelector;
+import org.apache.druid.segment.vector.VectorValueSelector;
import javax.annotation.Nullable;
import java.nio.ByteBuffer;
@@ -159,7 +159,7 @@ public class StringLastAggregatorFactory extends
AggregatorFactory
ColumnCapabilities capabilities =
selectorFactory.getColumnCapabilities(fieldName);
VectorObjectSelector vSelector =
selectorFactory.makeObjectSelector(fieldName);
- BaseLongVectorValueSelector timeSelector = (BaseLongVectorValueSelector)
selectorFactory.makeValueSelector(
+ VectorValueSelector timeSelector = selectorFactory.makeValueSelector(
timeColumn);
if (capabilities != null) {
return new StringLastVectorAggregator(timeSelector, vSelector,
maxStringBytes);
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/last/StringLastVectorAggregator.java
b/processing/src/main/java/org/apache/druid/query/aggregation/last/StringLastVectorAggregator.java
index f10584a2c7..a9c0b1e9ad 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/last/StringLastVectorAggregator.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/last/StringLastVectorAggregator.java
@@ -24,8 +24,8 @@ import
org.apache.druid.query.aggregation.SerializablePairLongString;
import org.apache.druid.query.aggregation.VectorAggregator;
import org.apache.druid.query.aggregation.first.StringFirstLastUtils;
import org.apache.druid.segment.DimensionHandlerUtils;
-import org.apache.druid.segment.vector.BaseLongVectorValueSelector;
import org.apache.druid.segment.vector.VectorObjectSelector;
+import org.apache.druid.segment.vector.VectorValueSelector;
import javax.annotation.Nullable;
import java.nio.ByteBuffer;
@@ -36,13 +36,13 @@ public class StringLastVectorAggregator implements
VectorAggregator
DateTimes.MIN.getMillis(),
null
);
- private final BaseLongVectorValueSelector timeSelector;
+ private final VectorValueSelector timeSelector;
private final VectorObjectSelector valueSelector;
private final int maxStringBytes;
protected long lastTime;
public StringLastVectorAggregator(
- @Nullable final BaseLongVectorValueSelector timeSelector,
+ @Nullable final VectorValueSelector timeSelector,
final VectorObjectSelector valueSelector,
final int maxStringBytes
)
diff --git
a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteQueryTest.java
b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteQueryTest.java
index 87db26ea5a..e14be37e98 100644
--- a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteQueryTest.java
+++ b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteQueryTest.java
@@ -853,6 +853,38 @@ public class CalciteQueryTest extends BaseCalciteQueryTest
);
}
+ // This test is to check if time expressions are accepted properly by the
vectorized last aggregator
+ @Test
+ public void testLatestVectorAggregatorsOnTimeExpression()
+ {
+ notMsqCompatible();
+ testQuery(
+ "SELECT \n"
+ + " LATEST_BY(m1,
MILLIS_TO_TIMESTAMP(BITWISE_SHIFT_RIGHT(TIMESTAMP_TO_MILLIS(__time), 3)))\n"
+ + " FROM druid.foo GROUP BY TIME_FLOOR(__time, 'P1Y', null,
'America/Los_Angeles')",
+ ImmutableList.of(
+ Druids.newTimeseriesQueryBuilder()
+ .dataSource(CalciteTests.DATASOURCE1)
+ .intervals(querySegmentSpec(Filtration.eternity()))
+ .granularity(new PeriodGranularity(Period.years(1), null,
DateTimes.inferTzFromString(LOS_ANGELES)))
+ .virtualColumns(
+ expressionVirtualColumn("v1",
"bitwiseShiftRight(\"__time\",3)", ColumnType.LONG)
+ )
+ .aggregators(
+ aggregators(
+ new FloatLastAggregatorFactory("a0", "m1", "v1")
+ )
+ )
+ .context(QUERY_CONTEXT_DEFAULT)
+ .build()
+ ),
+ ImmutableList.of(
+ new Object[]{1.0f},
+ new Object[]{4.0f},
+ new Object[]{6.0f}
+ )
+ );
+ }
// This test the off-heap (buffer) version of the AnyAggregator
(Double/Float/Long) against numeric columns
// that have null values (when run in SQL compatible null mode)
@Test
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]