Hi Team,

Running tests against Iceberg backed Hive tables I was trying to run this query:

SELECT * from date_test WHERE d_date='1998-02-19'

The query fails with the Exception below. Basically complains that when 
filtering the Date field it expects an Integer in the Record, but finds a 
LocalDate object instead.

I am confused now, because my mental model was - until now - that Iceberg 
records stores data like:
LocalDate - Types.DateType,
LocalDateTime - Types.TimestampType.withoutZone,
OffsetDateTime - Types.TimestampType.withZone,

Debugging the query above I have found that the expression evaluation expects 
different types in the Record defined in org.apache.iceberg.types.Type where we 
define:
Date - Integer,
Timestamp - Long

Do I supposed to prepare the Record for expression evaluation, so the evaluator 
could find the correct type?
What part of the puzzle I miss?

Thanks,
Peter

The exception:

Caused by: org.apache.hive.service.cli.HiveSQLException: java.io.IOException: 
java.lang.IllegalStateException: Not an instance of java.lang.Integer: 
2130-01-20
        at 
org.apache.hive.service.cli.operation.SQLOperation.getNextRowSet(SQLOperation.java:499)
        at 
org.apache.hive.service.cli.operation.OperationManager.getOperationNextRowSet(OperationManager.java:307)
        at 
org.apache.hive.service.cli.session.HiveSessionImpl.fetchResults(HiveSessionImpl.java:878)
        at 
org.apache.hive.service.cli.CLIService.fetchResults(CLIService.java:559)
        at 
org.apache.hive.service.cli.CLIService.fetchResults(CLIService.java:551)
        at 
org.apache.iceberg.mr.hive.TestHiveShell.executeStatement(TestHiveShell.java:143)
        ... 62 more
Caused by: java.io.IOException: java.lang.IllegalStateException: Not an 
instance of java.lang.Integer: 2130-01-20
        at 
org.apache.hadoop.hive.ql.exec.FetchOperator.getNextRow(FetchOperator.java:521)
        at 
org.apache.hadoop.hive.ql.exec.FetchOperator.pushRow(FetchOperator.java:428)
        at org.apache.hadoop.hive.ql.exec.FetchTask.fetch(FetchTask.java:147)
        at org.apache.hadoop.hive.ql.Driver.getResults(Driver.java:2208)
        at 
org.apache.hive.service.cli.operation.SQLOperation.getNextRowSet(SQLOperation.java:494)
        ... 67 more
Caused by: java.lang.IllegalStateException: Not an instance of 
java.lang.Integer: 2130-01-20
        at org.apache.iceberg.data.GenericRecord.get(GenericRecord.java:123)
        at org.apache.iceberg.Accessors$PositionAccessor.get(Accessors.java:71)
        at org.apache.iceberg.Accessors$PositionAccessor.get(Accessors.java:58)
        at 
org.apache.iceberg.expressions.BoundReference.eval(BoundReference.java:39)
        at 
org.apache.iceberg.expressions.Evaluator$EvalVisitor.eq(Evaluator.java:132)
        at 
org.apache.iceberg.expressions.Evaluator$EvalVisitor.eq(Evaluator.java:52)
        at 
org.apache.iceberg.expressions.ExpressionVisitors$BoundVisitor.predicate(ExpressionVisitors.java:249)
        at 
org.apache.iceberg.expressions.ExpressionVisitors.visitEvaluator(ExpressionVisitors.java:346)
        at 
org.apache.iceberg.expressions.Evaluator$EvalVisitor.eval(Evaluator.java:57)
        at 
org.apache.iceberg.expressions.Evaluator$EvalVisitor.access$100(Evaluator.java:52)
        at org.apache.iceberg.expressions.Evaluator.eval(Evaluator.java:49)
        at 
org.apache.iceberg.mr.mapreduce.IcebergInputFormat$IcebergRecordReader.lambda$applyResidualFiltering$0(IcebergInputFormat.java:288)
        at 
org.apache.iceberg.io.CloseableIterable$3.shouldKeep(CloseableIterable.java:82)
        at org.apache.iceberg.io.FilterIterator.advance(FilterIterator.java:67)
        at org.apache.iceberg.io.FilterIterator.hasNext(FilterIterator.java:50)
        at 
org.apache.iceberg.mr.mapreduce.IcebergInputFormat$IcebergRecordReader.nextKeyValue(IcebergInputFormat.java:202)
        at 
org.apache.iceberg.mr.mapred.MapredIcebergInputFormat$MapredIcebergRecordReader.next(MapredIcebergInputFormat.java:104)
        at 
org.apache.iceberg.mr.mapred.MapredIcebergInputFormat$MapredIcebergRecordReader.next(MapredIcebergInputFormat.java:81)
        at 
org.apache.hadoop.hive.ql.exec.FetchOperator.getNextRow(FetchOperator.java:488)
        ... 71 more

Reply via email to