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

shark.api.DataTypes Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2012 The Regents of The University California.
 * All rights reserved.
 *
 * 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 shark.api;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.sql.Timestamp;

import scala.reflect.ClassTag;
import scala.reflect.ClassTag$;

import org.apache.hadoop.hive.serde.Constants;
import shark.Utils$;

/**
 * List of data types defined in Shark APIs.
 */
public class DataTypes {

  // This list of types are defined in a Java class for better interoperability with Shark's
  // Java APIs.
  // Primitive types:
  public static final DataType BOOLEAN = new DataType(
      "boolean", Constants.BOOLEAN_TYPE_NAME, true);

  public static final DataType TINYINT = new DataType(
      "tinyint", Constants.TINYINT_TYPE_NAME, true);

  public static final DataType SMALLINT = new DataType(
      "smallint", Constants.SMALLINT_TYPE_NAME, true);

  public static final DataType INT = new DataType(
      "int", Constants.INT_TYPE_NAME, true);

  public static final DataType BIGINT = new DataType(
      "bigint", Constants.BIGINT_TYPE_NAME, true);

  public static final DataType FLOAT = new DataType(
      "float", Constants.FLOAT_TYPE_NAME, true);

  public static final DataType DOUBLE = new DataType(
      "double", Constants.DOUBLE_TYPE_NAME, true);

  public static final DataType STRING = new DataType(
      "string", Constants.STRING_TYPE_NAME, true);

  public static final DataType TIMESTAMP = new DataType(
      "timestamp", Constants.TIMESTAMP_TYPE_NAME, true);

  public static final DataType DATE = new DataType(
      "date", Constants.DATE_TYPE_NAME, true);

  public static final DataType BINARY = new DataType(
      "binary", Constants.BINARY_TYPE_NAME, true);

  // Complex types:
  // TODO: handle complex types.
//  public static final DataType ARRAY = new DataType("array", Constants.LIST_TYPE_NAME, false);
//  public static final DataType MAP = new DataType("map", Constants.MAP_TYPE_NAME, false);
//  public static final DataType STRUCT = new DataType("struct", Constants.STRUCT_TYPE_NAME, false);
//  public static final DataType UNION = new DataType("union", Constants.UNION_TYPE_NAME, false);

  private static DataType[] types = {
      BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, STRING, TIMESTAMP, DATE, BINARY,
      //ARRAY, MAP, STRUCT, UNION
  };

  private static Map hiveTypes = new HashMap();
  static {
    for (DataType type: types) {
      hiveTypes.put(type.hiveName, type);
    }
  }

  static class UnknownDataTypeException extends Exception {
    private UnknownDataTypeException(String dataType) {
      super(dataType);
    }
  }

  /**
   * Return the DataType based on the string representation of a Hive data type.
   * @throws UnknownDataTypeException
   */
  public static DataType fromHiveType(String hiveType) throws UnknownDataTypeException {
    DataType type = hiveTypes.get(hiveType);
    if (null == type) {
      //throw new UnknownDataTypeException(hiveType);
      return new DataType(hiveType, hiveType, false);
    } else {
      return type;
    }
  }

  public static DataType fromClassTag(ClassTag m) throws UnknownDataTypeException {
    if (m.equals(ClassTag$.MODULE$.Boolean()) || m.equals(ClassTags$.MODULE$.jBoolean())) {
        return INT;
    } else if (m.equals(ClassTag$.MODULE$.Byte()) || m.equals(ClassTags$.MODULE$.jByte())){
        return TINYINT;
    } else if (m.equals(ClassTag$.MODULE$.Short()) || m.equals(ClassTags$.MODULE$.jShort())) {
        return SMALLINT;
    } else if (m.equals(ClassTag$.MODULE$.Int()) || m.equals(ClassTags$.MODULE$.jInt())) {
        return INT;
    } else if (m.equals(ClassTag$.MODULE$.Long()) || m.equals(ClassTags$.MODULE$.jLong())) {
        return BIGINT;
    } else if (m.equals(ClassTag$.MODULE$.Float()) || m.equals(ClassTags$.MODULE$.jFloat())) {
        return FLOAT;
    } else if (m.equals(ClassTag$.MODULE$.Double()) || m.equals(ClassTags$.MODULE$.jDouble())) {
        return DOUBLE;
    } else if (m.equals(ClassTag$.MODULE$.apply(String.class))) {
        return STRING;
    } else if (m.equals(ClassTag$.MODULE$.apply(Timestamp.class))) {
        return TIMESTAMP;
    } else if (m.equals(ClassTag$.MODULE$.apply(Date.class))) {
        return DATE;
    } else {
        throw new UnknownDataTypeException(m.toString());
    }
    // TODO: binary data type.
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy