All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tech.tablesaw.io.saw.ColumnMetadata Maven / Gradle / Ivy

There is a newer version: 0.43.3
Show newest version
/*
 * Licensed 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 tech.tablesaw.io.saw;

import com.google.common.annotations.Beta;
import com.google.common.base.Objects;
import tech.tablesaw.api.StringColumn;
import tech.tablesaw.columns.Column;
import tech.tablesaw.columns.strings.ByteDictionaryMap;
import tech.tablesaw.columns.strings.DictionaryMap;
import tech.tablesaw.columns.strings.IntDictionaryMap;
import tech.tablesaw.columns.strings.ShortDictionaryMap;

/** Data about a specific column used in it's persistence */
@Beta
public class ColumnMetadata {

  private String id;
  private String name;
  private String type;

  // number of unique values in column - not all columns will provide this as it can be expensive
  private int cardinality;

  // these attributes are specific to string columns
  private String stringColumnKeySize;
  private int nextStringKey;

  ColumnMetadata(Column column) {
    this.id = SawUtils.makeName(column.name());
    this.name = column.name();
    this.type = column.type().name();
    if (column instanceof StringColumn) {
      StringColumn stringColumn = (StringColumn) column;
      cardinality = stringColumn.countUnique();
      DictionaryMap lookupTable = stringColumn.getDictionary();
      nextStringKey = lookupTable.nextKeyWithoutIncrementing();
      if (lookupTable.getClass().equals(IntDictionaryMap.class)) {
        stringColumnKeySize = Integer.class.getSimpleName();
      } else if (lookupTable.getClass().equals(ByteDictionaryMap.class)) {
        stringColumnKeySize = Byte.class.getSimpleName();
      } else if (lookupTable.getClass().equals(ShortDictionaryMap.class)) {
        stringColumnKeySize = Short.class.getSimpleName();
      } else {
        stringColumnKeySize = "";
      }
    } else {
      stringColumnKeySize = "";
    }
  }

  /**
   * Constructs an instance of ColumnMetaData
   *
   * 

NB: This constructor is used by Jackson JSON parsing code so it must be retained even though * it isn't explicitly called */ protected ColumnMetadata() {} @Override public String toString() { return "ColumnMetadata{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", type=" + type + '}'; } public String getId() { return id; } public String getName() { return name; } public String getType() { return type; } public String getStringColumnKeySize() { return stringColumnKeySize; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ColumnMetadata that = (ColumnMetadata) o; return Objects.equal(getId(), that.getId()) && Objects.equal(getName(), that.getName()) && Objects.equal(getType(), that.getType()) && Objects.equal(getStringColumnKeySize(), that.getStringColumnKeySize()); } @Override public int hashCode() { return Objects.hashCode(getId(), getName(), getType(), getStringColumnKeySize()); } public int getNextStringKey() { return nextStringKey; } public int getCardinality() { return cardinality; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy