Created a PR with the fix, but not entirely comfortable with the changes in 
GenericRecord.java

https://github.com/apache/iceberg/pull/2254 
<https://github.com/apache/iceberg/pull/2254>

If you have time and more knowledge around the expected behavior of the 
GenericRecord, please review.

Thanks,
Peter

> On Feb 19, 2021, at 15:08, Peter Vary <pv...@cloudera.com> wrote:
> 
> 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