diff --git a/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/main/java/org/apache/nifi/util/hive/HiveJdbcCommon.java b/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/main/java/org/apache/nifi/util/hive/HiveJdbcCommon.java index fb4ac845ff..afb8104880 100644 --- a/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/main/java/org/apache/nifi/util/hive/HiveJdbcCommon.java +++ b/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/main/java/org/apache/nifi/util/hive/HiveJdbcCommon.java @@ -103,11 +103,19 @@ public class HiveJdbcCommon { if (value == null) { rec.put(i - 1, null); - } else if (javaSqlType == BINARY || javaSqlType == VARBINARY || javaSqlType == LONGVARBINARY || javaSqlType == ARRAY || javaSqlType == BLOB || javaSqlType == CLOB) { + } else if (javaSqlType == BINARY || javaSqlType == VARBINARY || javaSqlType == LONGVARBINARY || javaSqlType == BLOB || javaSqlType == CLOB) { // bytes requires little bit different handling - byte[] bytes = rs.getBytes(i); - ByteBuffer bb = ByteBuffer.wrap(bytes); - rec.put(i - 1, bb); + ByteBuffer bb = null; + if (value instanceof byte[]) { + bb = ByteBuffer.wrap((byte[]) value); + } else if (value instanceof ByteBuffer) { + bb = (ByteBuffer) value; + } + if (bb != null) { + rec.put(i - 1, bb); + } else { + throw new IOException("Could not process binary object of type " + value.getClass().getName()); + } } else if (value instanceof Byte) { // tinyint(1) type is returned by JDBC driver as java.sql.Types.TINYINT @@ -202,6 +210,7 @@ public class HiveJdbcCommon { case NCHAR: case NVARCHAR: case VARCHAR: + case ARRAY: builder.name(columnName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault(); break; @@ -265,7 +274,6 @@ public class HiveJdbcCommon { case BINARY: case VARBINARY: case LONGVARBINARY: - case ARRAY: case BLOB: case CLOB: builder.name(columnName).type().unionOf().nullBuilder().endNull().and().bytesType().endUnion().noDefault();