blob: 8759078ad9e85bcf620eccbc4f5953654996f7ef [file] [log] [blame]
/*
* 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.drill.exec.planner;
import org.apache.calcite.rel.core.TableScan;
import org.apache.drill.common.expression.SchemaPath;
import org.apache.drill.common.types.TypeProtos;
import org.apache.drill.exec.planner.physical.PlannerSettings;
import org.apache.drill.exec.store.dfs.MetadataContext;
import org.apache.drill.exec.vector.ValueVector;
import org.apache.hadoop.fs.Path;
import java.util.BitSet;
import java.util.List;
import java.util.Map;
/**
* Interface used to describe partitions. Currently used by file system based partitions and hive partitions
*/
public interface PartitionDescriptor extends Iterable<List<PartitionLocation>> {
int PARTITION_BATCH_SIZE = Character.MAX_VALUE;
/**
* Get the hierarchy index of the given partition
* For eg: if we have the partition laid out as follows
* 1997/q1/jan
* then getPartitionHierarchyIndex("jan") => 2
*
* @param partitionName Partition name
* @return the index of specified partition name in the hierarchy
*/
int getPartitionHierarchyIndex(String partitionName);
/**
* Given a column name return boolean to indicate if its a partition column or not
*
* @param name of Partition
* @return true, if this is the partition name and vise versa.
*/
boolean isPartitionName(String name);
/**
* Check to see if the name is a partition name.
*
* @param name The field name you want to compare to partition names.
* @return Return index if valid, otherwise return null;
*/
Integer getIdIfValid(String name);
/**
* Maximum level of partition nesting/ hierarchy supported
*
* @return maximum supported level number of partition hierarchy
*/
int getMaxHierarchyLevel();
/**
* Method creates an in memory representation of all the partitions. For each level of partitioning we
* will create a value vector which this method will populate for all the partitions with the values of the
* partitioning key
* @param vectors - Array of vectors in the container that need to be populated
* @param partitions - List of all the partitions that exist in the table
* @param partitionColumnBitSet - Partition columns selected in the query
* @param fieldNameMap - Maps field ordinal to the field name
*/
void populatePartitionVectors(ValueVector[] vectors, List<PartitionLocation> partitions,
BitSet partitionColumnBitSet, Map<Integer, String> fieldNameMap);
/**
* Method returns the Major type associated with the given column
* @param column - column whose type should be determined
* @param plannerSettings
*/
TypeProtos.MajorType getVectorType(SchemaPath column, PlannerSettings plannerSettings);
/**
* Methods create a new TableScan rel node, given the lists of new partitions or new files to SCAN.
* @param newPartitions
* @param wasAllPartitionsPruned
* @throws Exception
*/
TableScan createTableScan(List<PartitionLocation> newPartitions,
boolean wasAllPartitionsPruned) throws Exception;
/**
* Create a new TableScan rel node, given the lists of new partitions or new files to scan and a path
* to a metadata cache file
* @param newPartitions
* @param cacheFileRoot
* @param wasAllPartitionsPruned
* @param metaContext
* @throws Exception
*/
TableScan createTableScan(List<PartitionLocation> newPartitions, Path cacheFileRoot,
boolean wasAllPartitionsPruned, MetadataContext metaContext) throws Exception;
boolean supportsMetadataCachePruning();
Path getBaseTableLocation();
}