It looks as if there is a Hive bug logged for this issue: 
https://issues.apache.org/jira/browse/HIVE-4806 
<https://issues.apache.org/jira/browse/HIVE-4806> and it has a patch that has 
not been accepted. But there could be a much simpler patch - nullsAreSortedLow 
should return true, and the other nullsAreSortedXxx method should return false. 
See also https://issues.apache.org/jira/browse/HIVE-12994 
<https://issues.apache.org/jira/browse/HIVE-12994>.



> On Jun 14, 2019, at 11:21 AM, Valeriy Trofimov <[email protected]> 
> wrote:
> 
> Hi All,
> 
> I'm using Calcite to connect to Hive DB via JDBC adapter that connects to
> Thrift JDBC server running on a VM with Spark and Hive installed there. The
> schema looks like this:
> 
> {
>  name: 'thrift',
>  type: 'custom',
>  factory: 'org.apache.calcite.adapter.jdbc.JdbcSchema$Factory',
>  operand: {
>    jdbcDriver: 'org.apache.hive.jdbc.HiveDriver',
>    jdbcUrl: 'jdbc:hive2://127.0.0.1:10000/default', // please use
> VirtualBox port forwarding to the VM with Thrift server running
>    jdbcUser: '',
>    jdbcPassword: ''
>  }
> }
> 
> I get an error about null collation though.
> 
> The error is caused by the Hive’s
> HiveDatabaseMetadata.nullsAreSortedAtEnd() method:
> 
> public boolean nullsAreSortedAtEnd() throws SQLException {
>    throw new SQLException("Method not supported");
> }
> 
> This method is called by the Calcite’s
> SqlDialectFactoryImpl.getNullCollation() method:
> 
> private NullCollation getNullCollation(DatabaseMetaData databaseMetaData) {
>    try {
>        if (databaseMetaData.nullsAreSortedAtEnd()) {
>            return NullCollation.LAST;
>        } else if (databaseMetaData.nullsAreSortedAtStart()) {
>            return NullCollation.FIRST;
>        } else if (databaseMetaData.nullsAreSortedLow()) {
>            return NullCollation.LOW;
>        } else if (databaseMetaData.nullsAreSortedHigh()) {
>            return NullCollation.HIGH;
>        } else {
>            throw new IllegalArgumentException("cannot deduce null collation");
>        }
>    } catch (SQLException var3) {
>        throw new IllegalArgumentException("cannot deduce null
> collation", var3);
>    }
> }
> 
> Which means that Calcite requires to know the null collation of the DB but
> Hive doesn’t have it.
> 
> Does it mean that Calcite doesn't support connecting to Hive via JDBC or am
> I missing something?
> 
> 
> Thanks,
> 
> Val

Reply via email to