Windows 64 Bit ODBC Error when Loading JSON Source

Hi There,
Getting the below error when I try and access JSON source data via Dremio (Loaded directly from JSON via NAS mount) - Able to access CSV file type data via ODBC with no issues. Can someone advise - looks like a bug in the ODBC driver???

Using latest version of the Windows 64 Bit ODBC driver published on the site as of today.

DataSource.Error: ODBC: ERROR [HY000] [Dremio][Connector] (1040) Dremio failed to execute the query: select “currency”,
“interestRate”,
“isAccountNotFound”,
“addAccountDate”,
“isHostAccount”,
“id”,
“accountId”,
“fiLoginStatus”,
“yodleeAccountNumberLast4”,
“fiLastUpdated”,
“accountName”,
“lastUpdatedInString”,
“fiLoginDisplayName”,
“lastUpdated”,
“isClosed”,
“value”,
“accountType”,
“fiLoginUIStatus”,
“isError”,
“isActive”,
“name”,
“accountTypeInt”,
“fiName”,
“accountSystemStatus”,
“klass”,
“currentBalance”
from “Test Files”.“HistoryTest2”
[30038]Query execution error. Details:[
SYSTEM ERROR: CompileException: Line 151, Column 30: No applicable constructor/method found for actual parameters “org.apache.arrow.vector.holders.UnionHolder”; candidates are: “public void com.dremio.exec.vector.complex.fn.JsonWriter.write(org.apache.arrow.vector.complex.reader.FieldReader) throws com.fasterxml.jackson.core.JsonGenerationException, java.io.IOException”

SqlOperatorImpl COMPLEX_TO_JSON
Location 0:0:1
SqlOperatorImpl COMPLEX_TO_JSON
Location 0:0:1
Fragment 0:0

[Error Id: 621cecb8-5338-41e4-aea4-99650bb5d0f7 on d595ca45e1df:31010]

(com.google.common.util.concurrent.UncheckedExecutionException) com.dremio.exec.exception.ClassTransformationException: Failure generating transformation classes for value:

package com.dremio.s;

import com.dremio.exec.exception.SchemaChangeException;
import com.dremio.exec.expr.VectorResolver;
import com.dremio.exec.expr.fn.FunctionErrorContext;
import com.dremio.exec.record.VectorAccessible;
import com.dremio.sabot.exec.context.FunctionContext;
import com.dremio.sabot.op.project.ProjectorTemplate;
import io.netty.buffer.ArrowBuf;
import org.apache.arrow.vector.VarCharVector;
import org.apache.arrow.vector.complex.UnionVector;
import org.apache.arrow.vector.holders.NullableBigIntHolder;
import org.apache.arrow.vector.holders.NullableVarBinaryHolder;
import org.apache.arrow.vector.holders.NullableVarCharHolder;
import org.apache.arrow.vector.holders.UnionHolder;

public class ProjectorGen11
extends ProjectorTemplate
{

FunctionErrorContext work0;
ArrowBuf work1;
FunctionErrorContext work2;
UnionVector vv3;
NullableBigIntHolder constant7;
VarCharVector vv9;
FunctionErrorContext work10;
ArrowBuf work11;
FunctionErrorContext work12;
UnionVector vv13;
VarCharVector vv17;
FunctionErrorContext work18;
ArrowBuf work19;
FunctionErrorContext work20;
UnionVector vv21;
VarCharVector vv25;

public ProjectorGen11() {
    __INIT__();
}

public void doSetup(FunctionContext context, VectorAccessible incoming, VectorAccessible outgoing, com.dremio.sabot.op.project.Projector.ComplexWriterCreator writerCreator)
    throws SchemaChangeException
{
    {
        work0 = (context).getFunctionErrorContext(0);
        work1 = (context).getManagedBuffer();
        work2 = (context).getFunctionErrorContext(1);
        vv3 = ((UnionVector) VectorResolver.simple((incoming), UnionVector.class, 1));
        /** start SETUP for function convert_toJSON **/ 
        {
            ArrowBuf buffer = work1;
            FunctionErrorContext errCtx = work2;
             {}
            work1 = buffer;
            work2 = errCtx;
        }
        /** end SETUP for function convert_toJSON **/ 
        NullableBigIntHolder out6 = new NullableBigIntHolder();
        out6 .value = 65536L;
        out6 .isSet = 1;
        constant7 = out6;
        /** start SETUP for function castVARCHAR **/ 
        {
            NullableBigIntHolder length = constant7;
            FunctionErrorContext errCtx = work0;
             {}
            work0 = errCtx;
        }
        /** end SETUP for function castVARCHAR **/ 
        vv9 = ((VarCharVector) VectorResolver.simple((outgoing), VarCharVector.class, 0));
        work10 = (context).getFunctionErrorContext(2);
        work11 = (context).getManagedBuffer();
        work12 = (context).getFunctionErrorContext(3);
        vv13 = ((UnionVector) VectorResolver.simple((incoming), UnionVector.class, 15));
        /** start SETUP for function convert_toJSON **/ 
        {
            ArrowBuf buffer = work11;
            FunctionErrorContext errCtx = work12;
             {}
            work11 = buffer;
            work12 = errCtx;
        }
        /** end SETUP for function convert_toJSON **/ 
        /** start SETUP for function castVARCHAR **/ 
        {
            NullableBigIntHolder length = constant7;
            FunctionErrorContext errCtx = work10;
             {}
            work10 = errCtx;
        }
        /** end SETUP for function castVARCHAR **/ 
        vv17 = ((VarCharVector) VectorResolver.simple((outgoing), VarCharVector.class, 1));
        work18 = (context).getFunctionErrorContext(4);
        work19 = (context).getManagedBuffer();
        work20 = (context).getFunctionErrorContext(5);
        vv21 = ((UnionVector) VectorResolver.simple((incoming), UnionVector.class, 27));
        /** start SETUP for function convert_toJSON **/ 
        {
            ArrowBuf buffer = work19;
            FunctionErrorContext errCtx = work20;
             {}
            work19 = buffer;
            work20 = errCtx;
        }
        /** end SETUP for function convert_toJSON **/ 
        /** start SETUP for function castVARCHAR **/ 
        {
            NullableBigIntHolder length = constant7;
            FunctionErrorContext errCtx = work18;
             {}
            work18 = errCtx;
        }
        /** end SETUP for function castVARCHAR **/ 
        vv25 = ((VarCharVector) VectorResolver.simple((outgoing), VarCharVector.class, 2));
    }
}

public void doEval(int inIndex, int outIndex)
    throws SchemaChangeException
{
    {
        UnionHolder out4 = new UnionHolder();
        {
            out4 .isSet = vv3 .isSet((inIndex));
            if (out4 .isSet == 1) {
                vv3 .get((inIndex), out4);
            }
        }
        //---- start of eval portion of convert_toJSON function. ----//
        NullableVarBinaryHolder out5 = new NullableVarBinaryHolder();
        {
            if (out4 .isSet == 0) {
                out5 .isSet = 0;
            } else {
                final NullableVarBinaryHolder out = new NullableVarBinaryHolder();
                UnionHolder input = out4;
                ArrowBuf buffer = work1;
                FunctionErrorContext errCtx = work2;

JsonConvertTo$ConvertToJson_eval: {
if (input.isSet()) {
out.start = 0;

    java.io.ByteArrayOutputStream stream = new java.io.ByteArrayOutputStream();

    try {
        com.dremio.exec.vector.complex.fn.JsonWriter jsonWriter = new com.dremio.exec.vector.complex.fn.JsonWriter(stream, true, false);

        jsonWriter.write(input);
    } catch (Exception e) {
        throw errCtx.error().message("%s", e).build();
    }

    byte[] bytea = stream.toByteArray();

    out.buffer = buffer = buffer.reallocIfNeeded(bytea.length);
    out.buffer.setBytes(0, bytea);
    out.end = bytea.length;
}

}

                work1 = buffer;
                work2 = errCtx;
                out.isSet = 1;
                out5 = out;
            }
        }
        //---- end of eval portion of convert_toJSON function. ----//
        //---- start of eval portion of castVARCHAR function. ----//
        NullableVarCharHolder out8 = new NullableVarCharHolder();
        {
            if ((out5 .isSet*constant7 .isSet) == 0) {
                out8 .isSet = 0;
            } else {
                final NullableVarCharHolder out = new NullableVarCharHolder();
                NullableVarBinaryHolder in = out5;
                NullableBigIntHolder length = constant7;
                FunctionErrorContext errCtx = work0;

CastVarBinaryVarChar_eval: {
int charCount = com.dremio.exec.expr.fn.impl.StringFunctionUtil.getUTF8CharLength(in.buffer.asNettyBuffer(), in.start, in.end, errCtx);

out.buffer = in.buffer;
out.start = in.start;
if (charCount <= length.value || length.value == 0) {
    out.end = in.end;
} else
{
    out.end = com.dremio.exec.expr.fn.impl.StringFunctionUtil.getUTF8CharPosition(
        in.buffer.asNettyBuffer(),
        in.start,
        in.end,
        (int) length.value,
        errCtx
    );
}

}

                work0 = errCtx;
                out.isSet = 1;
                out8 = out;
            }
        }
        //---- end of eval portion of castVARCHAR function. ----//
        if (!(out8 .isSet == 0)) {
            vv9 .setSafe((outIndex), out8 .isSet, out8 .start, out8 .end, out8 .buffer);
        }
        UnionHolder out14 = new UnionHolder();
        {
            out14 .isSet = vv13 .isSet((inIndex));
            if (out14 .isSet == 1) {
                vv13 .get((inIndex), out14);
            }
        }
        //---- start of eval portion of convert_toJSON function. ----//
        NullableVarBinaryHolder out15 = new NullableVarBinaryHolder();
        {
            if (out14 .isSet == 0) {
                out15 .isSet = 0;
            } else {
                final NullableVarBinaryHolder out = new NullableVarBinaryHolder();
                UnionHolder input = out14;
                ArrowBuf buffer = work11;
                FunctionErrorContext errCtx = work12;

JsonConvertTo$ConvertToJson_eval: {
if (input.isSet()) {
out.start = 0;

    java.io.ByteArrayOutputStream stream = new java.io.ByteArrayOutputStream();

    try {
        com.dremio.exec.vector.complex.fn.JsonWriter jsonWriter = new com.dremio.exec.vector.complex.fn.JsonWriter(stream, true, false);

        jsonWriter.write(input);
    } catch (Exception e) {
        throw errCtx.error().message("%s", e).build();
    }

    byte[] bytea = stream.toByteArray();

    out.buffer = buffer = buffer.reallocIfNeeded(bytea.length);
    out.buffer.setBytes(0, bytea);
    out.end = bytea.length;
}

}

                work11 = buffer;
                work12 = errCtx;
                out.isSet = 1;
                out15 = out;
            }
        }�pDz

Details:
DataSourceKind=Odbc
DataSourcePath=dsn=Dremio
OdbcErrors=[Table]

Usually this means you have a mixed type in one of the fields/columns. In Dremio UI, these columns would have “A#” next to them indicating this mixed type.

Locate the column and used a virtual dataset (VDS) to cast the column to the desired type and retry the query against the VDS.