/*
* 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.processing.newflow;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.carbondata.core.metadata.AbsoluteTableIdentifier;
import org.apache.carbondata.core.metadata.schema.BucketingInfo;
import org.apache.carbondata.processing.newflow.converter.DictionaryCardinalityFinder;
public class CarbonDataLoadConfiguration {
private DataField[] dataFields;
private DataField[] dimensionFields;
private DataField[] measureFields;
private AbsoluteTableIdentifier tableIdentifier;
private String[] header;
private String partitionId;
private String segmentId;
private String taskNo;
private BucketingInfo bucketingInfo;
private String numberOfColumns;
private String maxColumns;
private Map<String, Object> dataLoadProperties = new HashMap<>();
/**
* Use one pass to generate dictionary
*/
private boolean useOnePass;
/**
* dictionary server host
*/
private String dictionaryServerHost;
/**
* dictionary sever port
*/
private int dictionaryServerPort;
private boolean preFetch;
private int dimensionCount;
private int measureCount;
/**
* schema updated time stamp to be used for restructure scenarios
*/
private long schemaUpdatedTimeStamp;
private DictionaryCardinalityFinder cardinalityFinder;
private int numberOfSortColumns;
private int numberOfNoDictSortColumns;
public CarbonDataLoadConfiguration() {
}
private void initDimensionFields() {
List<Integer> dimensionIndexes = new ArrayList<>(dataFields.length);
for (int i = 0; i < dataFields.length; i++) {
if (dataFields[i].getColumn().isDimesion()) {
dimensionIndexes.add(i);
dimensionCount++;
}
}
dimensionFields = new DataField[dimensionCount];
for (int i = 0; i < dimensionCount; i++) {
dimensionFields[i] = dataFields[dimensionIndexes.get(i)];
}
}
private void initMeasureFields() {
List<Integer> measureIndexes = new ArrayList<>(dataFields.length);
for (int i = 0; i < dataFields.length; i++) {
if (!dataFields[i].getColumn().isDimesion()) {
measureIndexes.add(i);
measureCount++;
}
}
measureFields = new DataField[measureCount];
for (int i = 0; i < measureCount; i++) {
measureFields[i] = dataFields[measureIndexes.get(i)];
}
}
public int getDimensionCount() {
return dimensionCount;
}
public int getNoDictionaryCount() {
int dimCount = 0;
for (int i = 0; i < dataFields.length; i++) {
if (dataFields[i].getColumn().isDimesion() && !dataFields[i].hasDictionaryEncoding()) {
dimCount++;
}
}
return dimCount;
}
public void setNumberOfSortColumns(int numberOfSortColumns) {
this.numberOfSortColumns = numberOfSortColumns;
}
public int getNumberOfSortColumns() {
return this.numberOfSortColumns;
}
public boolean isSortTable() {
return this.numberOfSortColumns > 0;
}
public void setNumberOfNoDictSortColumns(int numberOfNoDictSortColumns) {
this.numberOfNoDictSortColumns = numberOfNoDictSortColumns;
}
public int getNumberOfNoDictSortColumns() {
return this.numberOfNoDictSortColumns;
}
public int getComplexDimensionCount() {
int dimCount = 0;
for (int i = 0; i < dataFields.length; i++) {
if (dataFields[i].getColumn().isComplex()) {
dimCount++;
}
}
return dimCount;
}
public int getMeasureCount() {
return measureCount;
}
public DataField[] getDataFields() {
return dataFields;
}
public void setDataFields(DataField[] dataFields) {
this.dataFields = dataFields;
initDimensionFields();
initMeasureFields();
}
public String[] getHeader() {
return header;
}
public void setHeader(String[] header) {
this.header = header;
}
public AbsoluteTableIdentifier getTableIdentifier() {
return tableIdentifier;
}
public void setTableIdentifier(AbsoluteTableIdentifier tableIdentifier) {
this.tableIdentifier = tableIdentifier;
}
public String getPartitionId() {
return partitionId;
}
public void setPartitionId(String partitionId) {
this.partitionId = partitionId;
}
public String getSegmentId() {
return segmentId;
}
public void setSegmentId(String segmentId) {
this.segmentId = segmentId;
}
public String getTaskNo() {
return taskNo;
}
public void setTaskNo(String taskNo) {
this.taskNo = taskNo;
}
public void setMaxColumns(String maxColumns) {
this.maxColumns = maxColumns;
}
public void setNumberOfColumns(int numberOfColumns) {
this.numberOfColumns = String.valueOf(numberOfColumns);
}
public void setDataLoadProperty(String key, Object value) {
dataLoadProperties.put(key, value);
}
public Object getDataLoadProperty(String key) {
return dataLoadProperties.get(key);
}
public BucketingInfo getBucketingInfo() {
return bucketingInfo;
}
public void setBucketingInfo(BucketingInfo bucketingInfo) {
this.bucketingInfo = bucketingInfo;
}
public boolean getUseOnePass() {
return useOnePass;
}
public void setUseOnePass(boolean useOnePass) {
this.useOnePass = useOnePass;
}
public String getDictionaryServerHost() {
return dictionaryServerHost;
}
public void setDictionaryServerHost(String dictionaryServerHost) {
this.dictionaryServerHost = dictionaryServerHost;
}
public int getDictionaryServerPort() {
return dictionaryServerPort;
}
public void setDictionaryServerPort(int dictionaryServerPort) {
this.dictionaryServerPort = dictionaryServerPort;
}
public boolean isPreFetch() {
return preFetch;
}
public void setPreFetch(boolean preFetch) {
this.preFetch = preFetch;
}
public DataField[] getDimensionFields() {
return dimensionFields;
}
public DataField[] getMeasureFields() {
return measureFields;
}
public long getSchemaUpdatedTimeStamp() {
return schemaUpdatedTimeStamp;
}
public void setSchemaUpdatedTimeStamp(long schemaUpdatedTimeStamp) {
this.schemaUpdatedTimeStamp = schemaUpdatedTimeStamp;
}
public DictionaryCardinalityFinder getCardinalityFinder() {
return cardinalityFinder;
}
public void setCardinalityFinder(DictionaryCardinalityFinder cardinalityFinder) {
this.cardinalityFinder = cardinalityFinder;
}
}