in hive/src/main/java/org/elasticsearch/hadoop/hive/HiveValueWriter.java [57:138]
private Result write(Object data, ObjectInspector oi, Generator generator) {
if (data == null) {
generator.writeNull();
return Result.SUCCESFUL();
}
switch (oi.getCategory()) {
case PRIMITIVE:
Writable writable = (Writable) ((PrimitiveObjectInspector) oi).getPrimitiveWritableObject(data);
return writableWriter.write(writable, generator);
case LIST: // or ARRAY
ListObjectInspector loi = (ListObjectInspector) oi;
generator.writeBeginArray();
for (int i = 0; i < loi.getListLength(data); i++) {
Result result = write(loi.getListElement(data, i), loi.getListElementObjectInspector(), generator);
if (!result.isSuccesful()) {
return result;
}
}
generator.writeEndArray();
break;
case MAP:
MapObjectInspector moi = (MapObjectInspector) oi;
generator.writeBeginObject();
for (Map.Entry<?, ?> entry : moi.getMap(data).entrySet()) {
//write(entry.getKey(), mapType.getMapKeyTypeInfo(), generator);
// TODO: handle non-strings
String actualFieldName = alias.toES(entry.getKey().toString());
// filter out fields
if (shouldKeep(generator.getParentPath(), actualFieldName)) {
generator.writeFieldName(actualFieldName);
Result result = write(entry.getValue(), moi.getMapValueObjectInspector(), generator);
if (!result.isSuccesful()) {
return result;
}
}
}
generator.writeEndObject();
break;
case STRUCT:
StructObjectInspector soi = (StructObjectInspector) oi;
List<? extends StructField> refs = soi.getAllStructFieldRefs();
generator.writeBeginObject();
for (StructField structField : refs) {
String actualFieldName = alias.toES(structField.getFieldName());
if (shouldKeep(generator.getParentPath(), actualFieldName)) {
generator.writeFieldName(actualFieldName);
Result result = write(soi.getStructFieldData(data, structField),
structField.getFieldObjectInspector(), generator);
if (!result.isSuccesful()) {
return result;
}
}
}
generator.writeEndObject();
break;
case UNION:
//UnionObjectInspector uoi = (UnionObjectInspector) oi;
throw new UnsupportedOperationException("union not yet supported");//break;
default:
if (writeUnknownTypes) {
return handleUnknown(data, oi, generator);
}
return Result.FAILED(data);
}
return Result.SUCCESFUL();
}