public static ObjectInspector getDrillObjectInspector(DataMode mode, MinorType minorType, boolean varCharToStringReplacement) { try { if (mode == DataMode.REQUIRED) { if (OIMAP_REQUIRED.containsKey(minorType)) { if (varCharToStringReplacement && minorType == MinorType.VARCHAR) { return (ObjectInspector) ((Class) OIMAP_REQUIRED.get(minorType).toArray()[1]).newInstance(); } else { return (ObjectInspector) ((Class) OIMAP_REQUIRED.get(minorType).toArray()[0]).newInstance(); } } } else if (mode == DataMode.OPTIONAL) { if (OIMAP_OPTIONAL.containsKey(minorType)) { if (varCharToStringReplacement && minorType == MinorType.VARCHAR) { return (ObjectInspector) ((Class) OIMAP_OPTIONAL.get(minorType).toArray()[1]).newInstance(); } else { return (ObjectInspector) ((Class) OIMAP_OPTIONAL.get(minorType).toArray()[0]).newInstance(); } } } else { throw new UnsupportedOperationException("Repeated types are not supported as arguement to Hive UDFs"); } } catch(InstantiationException | IllegalAccessException e) { throw new RuntimeException("Failed to instantiate ObjectInspector", e); } throw new UnsupportedOperationException( String.format("Type %s[%s] not supported as arguement to Hive UDFs", minorType.toString(), mode.toString())); }
/** * Build a writer for a non-projected column. * @param schema schema of the column * @return a "dummy" writer for the column */ public static AbstractObjectWriter buildDummyColumnWriter(ColumnMetadata schema) { switch (schema.type()) { case GENERIC_OBJECT: case LATE: case LIST: case MAP: case UNION: throw new UnsupportedOperationException(schema.type().toString()); default: ScalarObjectWriter scalarWriter = new ScalarObjectWriter( new DummyScalarWriter(schema)); switch (schema.mode()) { case OPTIONAL: case REQUIRED: return scalarWriter; case REPEATED: return new ArrayObjectWriter( new DummyArrayWriter(schema, scalarWriter)); default: throw new UnsupportedOperationException(schema.mode().toString()); } } }
public static AbstractObjectWriter buildColumnWriter(ColumnMetadata schema, ValueVector vector) { if (vector == null) { return buildDummyColumnWriter(schema); } // Build a writer for a materialized column. assert schema.type() == vector.getField().getType().getMinorType(); assert schema.mode() == vector.getField().getType().getMode(); switch (schema.type()) { case GENERIC_OBJECT: case LATE: case NULL: case LIST: case MAP: case UNION: throw new UnsupportedOperationException(schema.type().toString()); default: switch (schema.mode()) { case OPTIONAL: return nullableScalarWriter(schema, (NullableVector) vector); case REQUIRED: return requiredScalarWriter(schema, vector); case REPEATED: return repeatedScalarWriter(schema, (RepeatedValueVector) vector); default: throw new UnsupportedOperationException(schema.mode().toString()); } } }
/** * Build a writer for a non-projected column. * @param schema schema of the column * @return a "dummy" writer for the column */ public static AbstractObjectWriter buildDummyColumnWriter(ColumnMetadata schema) { switch (schema.type()) { case GENERIC_OBJECT: case LATE: case LIST: case MAP: case UNION: throw new UnsupportedOperationException(schema.type().toString()); default: ScalarObjectWriter scalarWriter = new ScalarObjectWriter( new DummyScalarWriter(schema)); switch (schema.mode()) { case OPTIONAL: case REQUIRED: return scalarWriter; case REPEATED: return new ArrayObjectWriter( new DummyArrayWriter(schema, scalarWriter)); default: throw new UnsupportedOperationException(schema.mode().toString()); } } }
public static AbstractObjectWriter buildColumnWriter(ColumnMetadata schema, ValueVector vector) { if (vector == null) { return buildDummyColumnWriter(schema); } // Build a writer for a materialized column. assert schema.type() == vector.getField().getType().getMinorType(); assert schema.mode() == vector.getField().getType().getMode(); switch (schema.type()) { case GENERIC_OBJECT: case LATE: case NULL: case LIST: case MAP: case UNION: throw new UnsupportedOperationException(schema.type().toString()); default: switch (schema.mode()) { case OPTIONAL: return nullableScalarWriter(schema, (NullableVector) vector); case REQUIRED: return requiredScalarWriter(schema, vector); case REPEATED: return repeatedScalarWriter(schema, (RepeatedValueVector) vector); default: throw new UnsupportedOperationException(schema.mode().toString()); } } }
/** * Generates string representation of function input parameters: * PARAMETER_TYPE_1-PARAMETER_MODE_1,PARAMETER_TYPE_2-PARAMETER_MODE_2 * Example: VARCHAR-REQUIRED,VARCHAR-OPTIONAL * Returns empty string if function has no input parameters. * * @return string representation of function input parameters */ public String getInputParameters() { StringBuilder builder = new StringBuilder(); builder.append(""); for (ValueReference ref : attributes.getParameters()) { final MajorType type = ref.getType(); builder.append(","); builder.append(type.getMinorType().toString()); builder.append("-"); builder.append(type.getMode().toString()); } return builder.length() == 0 ? builder.toString() : builder.substring(1); }
/** * Represents RelDataTypeReader content as string, used in query plan json. * Example: RelDataTypeReader{columnNames=[col1], columnTypes=[INTERVALYEAR-OPTIONAL]} * * @return string representation of RelDataTypeReader content */ @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("RelDataTypeReader{columnNames="); builder.append(columnNames).append(", columnTypes="); List<String> columnTypesList = new ArrayList<>(columnTypes.size()); for (TypeProtos.MajorType columnType : columnTypes) { columnTypesList.add(columnType.getMinorType().toString() + "-" + columnType.getMode().toString()); } builder.append(columnTypesList); builder.append("}"); return builder.toString(); } }
protected AbstractObjectReader buildScalarReader(VectorAccessor va, ColumnMetadata schema) { BaseScalarReader scalarReader = ColumnReaderFactory.buildColumnReader(va); DataMode mode = va.type().getMode(); switch (mode) { case OPTIONAL: return BaseScalarReader.buildOptional(schema, va, scalarReader); case REQUIRED: return BaseScalarReader.buildRequired(schema, va, scalarReader); case REPEATED: return ArrayReaderImpl.buildScalar(schema, va, scalarReader); default: throw new UnsupportedOperationException(mode.toString()); } }