---
title: 开启部分下推功能时SQL语句过滤char类型字段有概率不输出结果的解决方法
description: "开启部分下推功能，SQL语句中过滤char类型字段会有不输出结果的概率。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2300/bds/kunpengbds_omniruntime_20_0116.html
sourcePath: /source/zh/kunpengboostkithistory/2300/bds/kunpengbds_omniruntime_20_0116.html
indexId: fd57c83e6c5389b5f58c376de63036da15e5fd04e7e65e403de2dd68b183d69178
---
# 开启部分下推功能时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上创建和插入即可。
