ClassCastException: org.apache.drill.exec.expr.holders.NullableDateHolder 无法转换为 org.apache.drill.exec.expr.holders.DateHolder
ClassCastException: org.apache.drill.exec.expr.holders.NullableDateHolder cannot be cast to org.apache.drill.exec.expr.holders.DateHolder
当我尝试在 Date 字段上使用 WHERE 子句查询镶木地板时,这个异常给了我 Drill v. 1.16。
select * FROM dfs.test."my/parquet/directory"
where "Date" >= '2019-11-01'
limit 10;
ClassCastException: org.apache.drill.exec.expr.holders.NullableDateHolder cannot be cast to org.apache.drill.exec.expr.holders.DateHolder
详情:
select min("Date") as min, max("Date") as max
FROM dfs.test."my/parquet/directory";
---
min,max
2017-02-03,2019-12-05
select distinct sqltypeof("Date") as test
FROM dfs.test."my/parquet/directory";
---
test
DATE
经过几个小时的调试后,我发现当我将 drill.exec.functions.cast_empty_string_to_null
设置为 FALSE 时,它开始起作用了。但是我不能让这个选项为假。
我是不是做错了什么?
找到解决方法:
WHERE "Date" >= DATE_ADD('2019-11-01', 0)
它很丑陋,但它修复了行为。如果你找到更好的方法,请分享。
-- 更新
还是坏了。适用于版本 1.16、1.17、1.19
当我尝试在 Date 字段上使用 WHERE 子句查询镶木地板时,这个异常给了我 Drill v. 1.16。
select * FROM dfs.test."my/parquet/directory"
where "Date" >= '2019-11-01'
limit 10;
ClassCastException: org.apache.drill.exec.expr.holders.NullableDateHolder cannot be cast to org.apache.drill.exec.expr.holders.DateHolder
详情:
select min("Date") as min, max("Date") as max
FROM dfs.test."my/parquet/directory";
---
min,max
2017-02-03,2019-12-05
select distinct sqltypeof("Date") as test
FROM dfs.test."my/parquet/directory";
---
test
DATE
经过几个小时的调试后,我发现当我将 drill.exec.functions.cast_empty_string_to_null
设置为 FALSE 时,它开始起作用了。但是我不能让这个选项为假。
我是不是做错了什么?
找到解决方法:
WHERE "Date" >= DATE_ADD('2019-11-01', 0)
它很丑陋,但它修复了行为。如果你找到更好的方法,请分享。
-- 更新
还是坏了。适用于版本 1.16、1.17、1.19