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