blob: 157d3a066fcddc6945b5bba155b48909058e64d7 [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.metastore.analyze;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import org.apache.drill.common.expression.SchemaPath;
import org.apache.drill.metastore.components.tables.MetastoreTableInfo;
import org.apache.drill.metastore.metadata.MetadataInfo;
import org.apache.drill.metastore.metadata.MetadataType;
import org.apache.drill.metastore.metadata.TableInfo;
import org.apache.hadoop.fs.Path;
import java.util.List;
import java.util.Objects;
import java.util.StringJoiner;
/**
* Class which provides information required for storing metadata to the Metastore when performing analyze.
*/
@JsonDeserialize(builder = MetadataControllerContext.MetadataControllerContextBuilder.class)
public class MetadataControllerContext {
private final TableInfo tableInfo;
private final MetastoreTableInfo metastoreTableInfo;
private final Path location;
private final List<SchemaPath> interestingColumns;
private final List<String> segmentColumns;
private final List<MetadataInfo> metadataToHandle;
private final List<MetadataInfo> metadataToRemove;
private final MetadataType analyzeMetadataLevel;
private MetadataControllerContext(MetadataControllerContextBuilder builder) {
this.tableInfo = builder.tableInfo;
this.metastoreTableInfo = builder.metastoreTableInfo;
this.location = builder.location;
this.interestingColumns = builder.interestingColumns;
this.segmentColumns = builder.segmentColumns;
this.metadataToHandle = builder.metadataToHandle;
this.metadataToRemove = builder.metadataToRemove;
this.analyzeMetadataLevel = builder.analyzeMetadataLevel;
}
@JsonProperty
public TableInfo tableInfo() {
return tableInfo;
}
@JsonProperty
public MetastoreTableInfo metastoreTableInfo() {
return metastoreTableInfo;
}
@JsonProperty
public Path location() {
return location;
}
@JsonProperty
public List<SchemaPath> interestingColumns() {
return interestingColumns;
}
@JsonProperty
public List<String> segmentColumns() {
return segmentColumns;
}
@JsonProperty
public List<MetadataInfo> metadataToHandle() {
return metadataToHandle;
}
@JsonProperty
public List<MetadataInfo> metadataToRemove() {
return metadataToRemove;
}
@JsonProperty
public MetadataType analyzeMetadataLevel() {
return analyzeMetadataLevel;
}
@Override
public String toString() {
return new StringJoiner(",\n", MetadataControllerContext.class.getSimpleName() + "[", "]")
.add("tableInfo=" + tableInfo)
.add("location=" + location)
.add("interestingColumns=" + interestingColumns)
.add("segmentColumns=" + segmentColumns)
.add("metadataToHandle=" + metadataToHandle)
.add("metadataToRemove=" + metadataToRemove)
.add("analyzeMetadataLevel=" + analyzeMetadataLevel)
.toString();
}
public static MetadataControllerContextBuilder builder() {
return new MetadataControllerContextBuilder();
}
@JsonPOJOBuilder(withPrefix = "")
public static class MetadataControllerContextBuilder {
private TableInfo tableInfo;
private MetastoreTableInfo metastoreTableInfo;
private Path location;
private List<SchemaPath> interestingColumns;
private List<String> segmentColumns;
private List<MetadataInfo> metadataToHandle;
private List<MetadataInfo> metadataToRemove;
private MetadataType analyzeMetadataLevel;
public MetadataControllerContextBuilder tableInfo(TableInfo tableInfo) {
this.tableInfo = tableInfo;
return this;
}
public MetadataControllerContextBuilder metastoreTableInfo(MetastoreTableInfo metastoreTableInfo) {
this.metastoreTableInfo = metastoreTableInfo;
return this;
}
public MetadataControllerContextBuilder location(Path location) {
this.location = location;
return this;
}
public MetadataControllerContextBuilder interestingColumns(List<SchemaPath> interestingColumns) {
this.interestingColumns = interestingColumns;
return this;
}
public MetadataControllerContextBuilder segmentColumns(List<String> segmentColumns) {
this.segmentColumns = segmentColumns;
return this;
}
public MetadataControllerContextBuilder metadataToHandle(List<MetadataInfo> metadataToHandle) {
this.metadataToHandle = metadataToHandle;
return this;
}
public MetadataControllerContextBuilder metadataToRemove(List<MetadataInfo> metadataToRemove) {
this.metadataToRemove = metadataToRemove;
return this;
}
public MetadataControllerContextBuilder analyzeMetadataLevel(MetadataType metadataType) {
this.analyzeMetadataLevel = metadataType;
return this;
}
public MetadataControllerContext build() {
Objects.requireNonNull(tableInfo, "tableInfo was not set");
Objects.requireNonNull(location, "location was not set");
Objects.requireNonNull(segmentColumns, "segmentColumns were not set");
Objects.requireNonNull(metadataToHandle, "metadataToHandle was not set");
Objects.requireNonNull(metadataToRemove, "metadataToRemove was not set");
return new MetadataControllerContext(this);
}
}
}