文档首页> MapReduce服务 MRS> 组件操作指南(普通版)> 使用Spark2x> Spark2x常见问题> SQL和DataFrame> Spark SQL无法查询到Parquet类型的Hive表的新插入数据
更新时间:2022-09-30 GMT+08:00
分享

Spark SQL无法查询到Parquet类型的Hive表的新插入数据

问题

为什么通过Spark SQL无法查询到存储类型为Parquet的Hive表的新插入数据?主要有以下两种场景存在这个问题:

  1. 对于分区表和非分区表,在Hive客户端中执行插入数据的操作后,会出现Spark SQL无法查询到最新插入的数据的问题。
  2. 对于分区表,在Spark SQL中执行插入数据的操作后,如果分区信息未改变,会出现Spark SQL无法查询到最新插入的数据的问题。

回答

由于Spark存在一个机制,为了提高性能会缓存Parquet的元数据信息。当通过Hive或其他方式更新了Parquet表时,缓存的元数据信息未更新,导致Spark SQL查询不到新插入的数据。

对于存储类型为Parquet的Hive分区表,在执行插入数据操作后,如果分区信息未改变,则缓存的元数据信息未更新,导致Spark SQL查询不到新插入的数据。

解决措施:在使用Spark SQL查询之前,需执行Refresh操作更新元数据信息。

REFRESH TABLE table_name;

table_name为刷新的表名,该表必须存在,否则会出错。

执行查询语句时,即可获取到最新插入的数据。

Spark官网提供了此机制的描述,详情请参见:https://spark.apache.org/docs/3.1.1/sql-programming-guide.html#metadata-refreshing

分享:

    相关文档

    相关产品