blob: 6cecc90f8612c6562a8ad215bae947d9e4180d8d [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.carbondata.datamap.examples;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.log4j.Logger;
import org.apache.carbondata.common.logging.LogServiceFactory;
import org.apache.carbondata.core.datamap.DataMapDistributable;
import org.apache.carbondata.core.datamap.DataMapMeta;
import org.apache.carbondata.core.datamap.Segment;
import org.apache.carbondata.core.datamap.dev.DataMapBuilder;
import org.apache.carbondata.core.datamap.dev.DataMapModel;
import org.apache.carbondata.core.datamap.dev.DataMapWriter;
import org.apache.carbondata.core.datamap.dev.cgdatamap.CoarseGrainDataMap;
import org.apache.carbondata.core.datamap.dev.cgdatamap.CoarseGrainDataMapFactory;
import org.apache.carbondata.core.datastore.block.SegmentProperties;
import org.apache.carbondata.core.features.TableOperation;
import org.apache.carbondata.core.memory.MemoryException;
import org.apache.carbondata.core.metadata.AbsoluteTableIdentifier;
import org.apache.carbondata.core.metadata.schema.table.CarbonTable;
import org.apache.carbondata.core.metadata.schema.table.DataMapSchema;
import org.apache.carbondata.core.metadata.schema.table.column.CarbonColumn;
import org.apache.carbondata.core.scan.filter.intf.ExpressionType;
import org.apache.carbondata.core.util.path.CarbonTablePath;
import org.apache.carbondata.events.Event;
/**
* Min Max DataMap Factory
*/
public class MinMaxIndexDataMapFactory extends CoarseGrainDataMapFactory {
private static final Logger LOGGER = LogServiceFactory.getLogService(
MinMaxIndexDataMapFactory.class.getName());
private DataMapMeta dataMapMeta;
private String dataMapName;
private AbsoluteTableIdentifier identifier;
public MinMaxIndexDataMapFactory(CarbonTable carbonTable, DataMapSchema dataMapSchema) {
super(carbonTable, dataMapSchema);
// this is an example for datamap, we can choose the columns and operations that
// will be supported by this datamap. Furthermore, we can add cache-support for this datamap.
// columns that will be indexed
List<CarbonColumn> allColumns = getCarbonTable().getCreateOrderColumn(identifier.getTableName());
// operations that will be supported on the indexed columns
List<ExpressionType> optOperations = new ArrayList<>();
optOperations.add(ExpressionType.EQUALS);
optOperations.add(ExpressionType.GREATERTHAN);
optOperations.add(ExpressionType.GREATERTHAN_EQUALTO);
optOperations.add(ExpressionType.LESSTHAN);
optOperations.add(ExpressionType.LESSTHAN_EQUALTO);
optOperations.add(ExpressionType.NOT_EQUALS);
LOGGER.error("MinMaxDataMap support operations: " + StringUtils.join(optOperations, ", "));
this.dataMapMeta = new DataMapMeta(allColumns, optOperations);
}
/**
* createWriter will return the MinMaxDataWriter.
*
* @param segment
* @param shardName
* @return
*/
@Override
public DataMapWriter createWriter(Segment segment, String shardName,
SegmentProperties segmentProperties) {
return new MinMaxDataWriter(getCarbonTable(), getDataMapSchema(), segment, shardName,
dataMapMeta.getIndexedColumns());
}
@Override
public DataMapBuilder createBuilder(Segment segment, String shardName,
SegmentProperties segmentProperties) throws IOException {
return null;
}
/**
* getDataMaps Factory method Initializes the Min Max Data Map and returns.
*
* @param segment
* @return
* @throws IOException
*/
@Override
public List<CoarseGrainDataMap> getDataMaps(Segment segment)
throws IOException {
List<CoarseGrainDataMap> dataMapList = new ArrayList<>();
// Form a dataMap of Type MinMaxIndexDataMap.
MinMaxIndexDataMap dataMap = new MinMaxIndexDataMap();
try {
dataMap.init(new DataMapModel(
MinMaxDataWriter.genDataMapStorePath(
CarbonTablePath.getSegmentPath(
identifier.getTablePath(), segment.getSegmentNo()),
dataMapName), new Configuration(false)));
} catch (MemoryException ex) {
throw new IOException(ex);
}
dataMapList.add(dataMap);
return dataMapList;
}
/**
* @param segment
* @return
*/
@Override
public List<DataMapDistributable> toDistributable(Segment segment) {
return null;
}
/**
* Clear the DataMap.
*
* @param segment
*/
@Override
public void clear(String segmentNo) {
}
/**
* Clearing the data map.
*/
@Override
public void clear() {
}
@Override
public List<CoarseGrainDataMap> getDataMaps(DataMapDistributable distributable)
throws IOException {
return getDataMaps(distributable.getSegment());
}
@Override
public void fireEvent(Event event) {
}
@Override
public DataMapMeta getMeta() {
return this.dataMapMeta;
}
@Override
public void deleteDatamapData(Segment segment) throws IOException {
}
@Override
public void deleteDatamapData() {
}
@Override
public boolean willBecomeStale(TableOperation operation) {
return false;
}
}