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 <raghavmn...@gmail.com>
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: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to