前面讲到了Spark SQL In-Memory Columnar Storage的存储结构是基于列存储的。
那么基于以上存储结构,我们查询cache在jvm内的数据又是如何查询的,本文将揭示查询In-Memory Data的方式。
一、引子
本例使用hive console里查询cache后的src表。
select value from src
当我们将src表cache到了内存后,再次查询src,可以通过analyzed执行计划来观察内部调用。
即parse后,会形成InMemoryRelation结点,最后执行物理计划时,会调用InMemoryColumnarTableScan这个结点的方法。
如下:
-
scala> val exe = executePlan(sql("select value from src").queryExecution.analyzed) -
14/09/26 10:30:26 INFO parse.ParseDriver: Parsing command: select value from src -
14/09/26 10:30:26 INFO parse.ParseDriver: Parse Completed -
exe: org.apache.spark.sql.hive.test.TestHive.QueryExecution = -
== Parsed Logical Plan == -
Project [value#5] -
InMemoryRelation [key#4,value#5], false, 1000, (HiveTableScan [key#4,value#5], (MetastoreRelation default, src, None), None) -
== Analyzed Logical Plan == -
Project [value#5] -
InMemoryRelation [key#4,value#5], false, 1000, (HiveTableScan [key#4,value#5], (MetastoreRelation default, src, None), None) -
== Optimized Logical Plan == -
Project [value#5] -
InMemoryRelation [key#4,value#5], false, 1000, (HiveTableScan [key#4,value#5], (MetastoreRelation default, src, None), None) -
== Physical P

本文深入探讨了Spark SQL中In-Memory Columnar Storage的查询过程,详细介绍了InMemoryColumnarTableScan节点如何执行内存数据查询,以及ColumnAccessor如何访问和解析缓冲区数据,以满足特定列的查询需求。
最低0.47元/天 解锁文章
735

被折叠的 条评论
为什么被折叠?



