
# Spark SQL无法查询到ORC类型的Hive表的新插入数据
#### 问题
为什么通过Spark SQL无法查询到存储类型为ORC的Hive表的新插入数据？主要有以下两种场景存在这个问题：
- 对于分区表和非分区表，在Hive客户端中执行插入数据的操作后，会出现Spark SQL无法查询到最新插入的数据的问题。
- 对于分区表，在Spark SQL中执行插入数据的操作后，如果分区信息未改变，会出现Spark SQL无法查询到最新插入的数据的问题。
 
#### 回答
由于Spark存在一个机制，为了提高性能会缓存ORC的元数据信息。当通过Hive或其他方式更新了ORC表时，缓存的元数据信息未更新，导致Spark SQL查询不到新插入的数据。
对于存储类型为ORC的Hive分区表，在执行插入数据操作后，如果分区信息未改变，则缓存的元数据信息未更新，导致Spark SQL查询不到新插入的数据。
**解决措施：**
1. 在使用Spark SQL查询之前，需执行Refresh操作更新元数据信息： **REFRESH TABLE** *t* *able_name* **;**
   table_name为刷新的表名，该表必须存在，否则会出错。
   执行查询语句时，即可获取到最新插入的数据。
   
2. 使用spark时，执行以下命令禁用Spark优化： **set spark.sql.hive.convertMetastoreOrc=false;**
   
 
