开启部分下推功能时SQL语句过滤char类型字段有概率不输出结果的解决方法
问题现象描述
开启部分下推功能,SQL语句中过滤char类型字段会有不输出结果的概率。
关键过程、根本原因分析
原生Spark对char类型数据处理不一致导致:
- 如果ORC、Parquet类型的表和数据在原生Spark上创建,在Spark上查询,无论Spark启动参数spark.sql.orc.impl=hive还是spark.sql.orc.impl=native,char类型数据在Spark读取阶段都会补齐空格。
- 如果ORC、Parquet类型的表和数据在Hive上创建,在Spark上查询,当spark.sql.orc.impl=native时,在ORC和Parquet表中,char类型数据在Spark读取阶段不会补齐空格;当spark.sql.orc.impl=hive时,在Parquet表中,char类型数据在Spark读取阶段不会补齐空格,但是在ORC表中,char类型数据在Spark读取阶段会补齐空格。
部分下推功能逻辑是以在Hive上创建和插入表和数据,在Spark上查询为标准进行处理,因此当表和数据在原生Spark上创建和插入,会产生问题。
结论、解决方案及效果
所有表和数据都在Hive上创建和插入即可。
父主题: 特性叠加