Spark Catalog
Spark SQL提供了执行sql语句功能,sql语句是以表的方式组织、使用数据,那么表本身是如何组织存储的呢?肯定会有元数据之类的东西存在,Catalog就是Spark2.0之后提供的访问元数据的类。
Catalog提供了一些API,用来对数据库、表、视图、缓存、列、函数进行操作。
Catalog相关的代码位于spark-sql包的org.apache.spark.sql.catalog目录下,它定义的对象有:
而对于Catalog本身,它定义了接口:
在Spark中,Catalog只有一个实现类:CatalogImpl,而Catalog的实现依赖的是SessionCatalog(通过sparkSession.sessionState.catalog)。在SessionCatalog中定义了一些功能:
|
|
从上面方法的定义可以看出,SessionCatalog又依赖externalCatalog来实现的。SessionCatalog中的externalCatalog是在创建SessionCatalog的时候,通过参数传入的。对于ExternalCatalog,我们之后再讨论,这里只是先关注 CatalogImpl和SessionCatalog。
除了SessionCatalog,在CatalogImp中还会用到 sparkSession.sessinState.sqlParser,用来解析Table、Function等对象的id,如:
creatTable
CatalogImpl中对 createTable的实现: