HiveType makeHiveType()

in java/tools/src/java/org/apache/orc/tools/json/JsonSchemaFinder.java [299:357]


  HiveType makeHiveType(TypeDescription schema) {
    switch (schema.getCategory()) {
      case BOOLEAN:
        return new BooleanType();
      case BYTE:
        return new NumericType(HiveType.Kind.BYTE, 3, 0);
      case SHORT:
        return new NumericType(HiveType.Kind.SHORT, 5, 0);
      case INT:
        return new NumericType(HiveType.Kind.INT, 10, 0);
      case LONG:
        return new NumericType(HiveType.Kind.LONG, 19, 0);
      case FLOAT:
        return new NumericType(HiveType.Kind.FLOAT, 0, 0);
      case DOUBLE:
        return new NumericType(HiveType.Kind.DOUBLE, 0, 0);
      case DECIMAL: {
        int scale = schema.getScale();
        int intDigits = schema.getPrecision() - scale;
        return new NumericType(HiveType.Kind.DECIMAL, intDigits, scale);
      }
      case CHAR:
      case VARCHAR:
      case STRING:
        return new StringType(HiveType.Kind.STRING);
      case TIMESTAMP:
        return new StringType(HiveType.Kind.TIMESTAMP);
      case TIMESTAMP_INSTANT:
        return new StringType(HiveType.Kind.TIMESTAMP_INSTANT);
      case DATE:
        return new StringType(HiveType.Kind.DATE);
      case BINARY:
        return new StringType(HiveType.Kind.BINARY);
      case LIST:
        return new ListType(makeHiveType(schema.getChildren().get(0)));
      case STRUCT: {
        StructType result = new StructType();
        List<String> fields = schema.getFieldNames();
        List<TypeDescription> children = schema.getChildren();
        for(int i = 0; i < fields.size(); ++i) {
          result.addField(fields.get(i), makeHiveType(children.get(i)));
        }
        return result;
      }
      case UNION: {
        UnionType result = new UnionType();
        for(TypeDescription child: schema.getChildren()) {
          result.addType(makeHiveType(child));
        }
        return result;
      }
      case MAP:
        return new MapType(
            makeHiveType(schema.getChildren().get(0)),
            makeHiveType(schema.getChildren().get(1)));
      default:
        throw new IllegalArgumentException("Unhandled type " + schema);
    }
  }