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);
}
}