问题描述/异常栈

    经常有用户出现反馈同一段代码impalaspark查询结果不一致,这多半是impala对有的类型没有隐式转换,在类型不一致的时候。就会出现查旬结果不一致。

    解决方案

    例如 FAQ-impala查询结果和spark不一致 - 图1 FAQ-impala查询结果和spark不一致 - 图2 这是精简后的代码,一样的语句,impala查不出数据,这样在复杂的代码运行后结果肯定不同。 这是由于datesub类的时间函数和本身过滤的分区条件例如ds的类型不同。我们需要cast成一样的类型。 FAQ-impala查询结果和spark不一致 - 图3

    问题原因

    例如datesub这种时间函数,返回的都是datetime类型的字段,这里表的分区字段ds的字段类型是string。在spark中可能会做隐式转换并去过滤数,在impala中不会这样。所以需要将datesub返回的dateatime强转为string。结果才能保持一致。很多类似的问题都是这个原因。

    作者:刘思伟