This is an automated email from the ASF dual-hosted git repository.
ankitsultana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 78504647a9 [timeseries] Add Metadata Provider to Time Series Query
Planner (#15604)
78504647a9 is described below
commit 78504647a9598b984df45aeebaac60597ce335d6
Author: RAGHVENDRA KUMAR YADAV <[email protected]>
AuthorDate: Mon May 5 18:01:06 2025 -0700
[timeseries] Add Metadata Provider to Time Series Query Planner (#15604)
---
.../pinot/tsdb/m3ql/M3TimeSeriesPlanner.java | 3 +-
.../tsdb/planner/TimeSeriesQueryEnvironment.java | 6 ++-
.../planner/TimeSeriesTableMetadataProvider.java | 55 ++++++++++++++++++++++
.../pinot/tsdb/spi/TimeSeriesLogicalPlanner.java | 3 +-
.../apache/pinot/tsdb/spi/TimeSeriesMetadata.java | 53 +++++++++++++++++++++
5 files changed, 115 insertions(+), 5 deletions(-)
diff --git
a/pinot-plugins/pinot-timeseries-lang/pinot-timeseries-m3ql/src/main/java/org/apache/pinot/tsdb/m3ql/M3TimeSeriesPlanner.java
b/pinot-plugins/pinot-timeseries-lang/pinot-timeseries-m3ql/src/main/java/org/apache/pinot/tsdb/m3ql/M3TimeSeriesPlanner.java
index e38ae76d53..83d2d8025e 100644
---
a/pinot-plugins/pinot-timeseries-lang/pinot-timeseries-m3ql/src/main/java/org/apache/pinot/tsdb/m3ql/M3TimeSeriesPlanner.java
+++
b/pinot-plugins/pinot-timeseries-lang/pinot-timeseries-m3ql/src/main/java/org/apache/pinot/tsdb/m3ql/M3TimeSeriesPlanner.java
@@ -38,6 +38,7 @@ import org.apache.pinot.tsdb.spi.RangeTimeSeriesRequest;
import org.apache.pinot.tsdb.spi.TimeBuckets;
import org.apache.pinot.tsdb.spi.TimeSeriesLogicalPlanResult;
import org.apache.pinot.tsdb.spi.TimeSeriesLogicalPlanner;
+import org.apache.pinot.tsdb.spi.TimeSeriesMetadata;
import org.apache.pinot.tsdb.spi.plan.BaseTimeSeriesPlanNode;
import org.apache.pinot.tsdb.spi.plan.LeafTimeSeriesPlanNode;
@@ -48,7 +49,7 @@ public class M3TimeSeriesPlanner implements
TimeSeriesLogicalPlanner {
}
@Override
- public TimeSeriesLogicalPlanResult plan(RangeTimeSeriesRequest request) {
+ public TimeSeriesLogicalPlanResult plan(RangeTimeSeriesRequest request,
TimeSeriesMetadata metadata) {
if (!request.getLanguage().equals(Constants.LANGUAGE)) {
throw new IllegalArgumentException(
String.format("Invalid engine id: %s. Expected: %s",
request.getLanguage(), Constants.LANGUAGE));
diff --git
a/pinot-timeseries/pinot-timeseries-planner/src/main/java/org/apache/pinot/tsdb/planner/TimeSeriesQueryEnvironment.java
b/pinot-timeseries/pinot-timeseries-planner/src/main/java/org/apache/pinot/tsdb/planner/TimeSeriesQueryEnvironment.java
index 980c4f6bf3..5265f61747 100644
---
a/pinot-timeseries/pinot-timeseries-planner/src/main/java/org/apache/pinot/tsdb/planner/TimeSeriesQueryEnvironment.java
+++
b/pinot-timeseries/pinot-timeseries-planner/src/main/java/org/apache/pinot/tsdb/planner/TimeSeriesQueryEnvironment.java
@@ -37,20 +37,22 @@ import
org.apache.pinot.tsdb.spi.PinotTimeSeriesConfiguration;
import org.apache.pinot.tsdb.spi.RangeTimeSeriesRequest;
import org.apache.pinot.tsdb.spi.TimeSeriesLogicalPlanResult;
import org.apache.pinot.tsdb.spi.TimeSeriesLogicalPlanner;
+import org.apache.pinot.tsdb.spi.TimeSeriesMetadata;
import org.apache.pinot.tsdb.spi.plan.BaseTimeSeriesPlanNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
public class TimeSeriesQueryEnvironment {
private static final Logger LOGGER =
LoggerFactory.getLogger(TimeSeriesQueryEnvironment.class);
private final RoutingManager _routingManager;
private final TableCache _tableCache;
+ private final TimeSeriesMetadata _metadataProvider;
private final Map<String, TimeSeriesLogicalPlanner> _plannerMap = new
HashMap<>();
public TimeSeriesQueryEnvironment(PinotConfiguration config, RoutingManager
routingManager, TableCache tableCache) {
_routingManager = routingManager;
_tableCache = tableCache;
+ _metadataProvider = new TimeSeriesTableMetadataProvider(_tableCache);
}
public void init(PinotConfiguration config) {
@@ -80,7 +82,7 @@ public class TimeSeriesQueryEnvironment {
Preconditions.checkState(_plannerMap.containsKey(request.getLanguage()),
"No logical planner found for engine: %s. Available: %s",
request.getLanguage(),
_plannerMap.keySet());
- return _plannerMap.get(request.getLanguage()).plan(request);
+ return _plannerMap.get(request.getLanguage()).plan(request,
_metadataProvider);
}
public TimeSeriesDispatchablePlan buildPhysicalPlan(RangeTimeSeriesRequest
timeSeriesRequest,
diff --git
a/pinot-timeseries/pinot-timeseries-planner/src/main/java/org/apache/pinot/tsdb/planner/TimeSeriesTableMetadataProvider.java
b/pinot-timeseries/pinot-timeseries-planner/src/main/java/org/apache/pinot/tsdb/planner/TimeSeriesTableMetadataProvider.java
new file mode 100644
index 0000000000..d1ffb37ad0
--- /dev/null
+++
b/pinot-timeseries/pinot-timeseries-planner/src/main/java/org/apache/pinot/tsdb/planner/TimeSeriesTableMetadataProvider.java
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.tsdb.planner;
+
+import javax.annotation.Nullable;
+import org.apache.pinot.common.config.provider.TableCache;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.data.Schema;
+import org.apache.pinot.tsdb.spi.TimeSeriesMetadata;
+
+
+/**
+ * Implementation of TimeSeriesTableMetadata that uses TableCache to provide
table metadata.
+ */
+public class TimeSeriesTableMetadataProvider implements TimeSeriesMetadata {
+ private final TableCache _tableCache;
+
+ public TimeSeriesTableMetadataProvider(TableCache tableCache) {
+ _tableCache = tableCache;
+ }
+
+ @Override
+ @Nullable
+ public TableConfig getTableConfig(String tableName) {
+ return _tableCache.getTableConfig(tableName);
+ }
+
+ @Override
+ @Nullable
+ public Schema getSchema(String rawTableName) {
+ return _tableCache.getSchema(rawTableName);
+ }
+
+ @Override
+ @Nullable
+ public String getActualTableName(String tableName) {
+ return _tableCache.getActualTableName(tableName);
+ }
+}
diff --git
a/pinot-timeseries/pinot-timeseries-spi/src/main/java/org/apache/pinot/tsdb/spi/TimeSeriesLogicalPlanner.java
b/pinot-timeseries/pinot-timeseries-spi/src/main/java/org/apache/pinot/tsdb/spi/TimeSeriesLogicalPlanner.java
index b5004ff424..0a5b9d907a 100644
---
a/pinot-timeseries/pinot-timeseries-spi/src/main/java/org/apache/pinot/tsdb/spi/TimeSeriesLogicalPlanner.java
+++
b/pinot-timeseries/pinot-timeseries-spi/src/main/java/org/apache/pinot/tsdb/spi/TimeSeriesLogicalPlanner.java
@@ -22,7 +22,6 @@ import org.apache.pinot.spi.env.PinotConfiguration;
import org.apache.pinot.tsdb.spi.plan.BaseTimeSeriesPlanNode;
import org.apache.pinot.tsdb.spi.plan.LeafTimeSeriesPlanNode;
-
/**
* Allows time-series query languages to implement their own logical planner.
The input to this planner is a
* {@link RangeTimeSeriesRequest} and the output is a {@link
TimeSeriesLogicalPlanResult}. Put simply, this abstraction
@@ -35,5 +34,5 @@ import org.apache.pinot.tsdb.spi.plan.LeafTimeSeriesPlanNode;
public interface TimeSeriesLogicalPlanner {
void init(PinotConfiguration pinotConfiguration);
- TimeSeriesLogicalPlanResult plan(RangeTimeSeriesRequest request);
+ TimeSeriesLogicalPlanResult plan(RangeTimeSeriesRequest request,
TimeSeriesMetadata metadata);
}
diff --git
a/pinot-timeseries/pinot-timeseries-spi/src/main/java/org/apache/pinot/tsdb/spi/TimeSeriesMetadata.java
b/pinot-timeseries/pinot-timeseries-spi/src/main/java/org/apache/pinot/tsdb/spi/TimeSeriesMetadata.java
new file mode 100644
index 0000000000..b3f943aedb
--- /dev/null
+++
b/pinot-timeseries/pinot-timeseries-spi/src/main/java/org/apache/pinot/tsdb/spi/TimeSeriesMetadata.java
@@ -0,0 +1,53 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.tsdb.spi;
+
+import javax.annotation.Nullable;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.data.Schema;
+
+
+/**
+ * Interface for accessing time series table metadata.
+ */
+public interface TimeSeriesMetadata {
+ /**
+ * Get the table config for a given table name
+ * @param tableName name of the table
+ * @return table config or null if not found
+ */
+ @Nullable
+ TableConfig getTableConfig(String tableName);
+
+ /**
+ * Get the schema for a given raw table name
+ * @param rawTableName raw table name without type suffix
+ * @return schema or null if not found
+ */
+ @Nullable
+ Schema getSchema(String rawTableName);
+
+ /**
+ * Get the actual table name for the given table name, handling case
sensitivity
+ * @param tableName table name to look up
+ * @return actual table name or null if not found
+ */
+ @Nullable
+ String getActualTableName(String tableName);
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]