SparkSQL Catalog的作用:
SparkSQL直接访问hive元数据信息,不再需要去mysql里的表里去查找
Spark 2.0中添加了标准的API(称为catalog)来访问Spark SQL中的元数据。这个API既可以操作Spark SQL,也可以操作Hive元数据。
代码操作:
package g5.learning
import org.apache.spark.sql.SparkSession
object CatalogApp {
def main(args: Array[String]): Unit = {
val sparksession= SparkSession.builder().appName("CatalogApp")
.master("local[2]")
.enableHiveSupport() //使用到hive一定要开启这个
.getOrCreate()
val catalog = sparksession.catalog
//查库
catalog.listDatabases().show(false)
//查库筛选名字
catalog.listDatabases().select("name").show(false)
//查,一个库的表
catalog.listTables("default").show()
//查看某张表的列
catalog.listColumns("dafault","ruoze_wc").show()
sparksession.stop()
}
}
catalog.listDatabases().select(“name”).show(false)这里为什么可以select操作
listDatabases返回元数据中所有的数据库。默认情况下,元数据仅仅只有名为default的数据库。如果是Hive元数据,那么它会从Hive元数据中获取所有的数据库。listDatabases返回的类型是dataset,所以我们可以使用Dataset上的所有操作来查询元数据。
SparkSQL操作
scala> [hadoop@hadoop001 bin]$ ./saprk-shell
scala> val catalog = sparksession.catalog
<console>:23: error: not found: value sparksession
val catalog = sparksession.catalog
错误原因这里不能用sparksession,要用spark
scala> val catalog = spark.catalog
catalog: org.apache.spark.sql.catalog.Catalog = org.apache.spark.sql.internal.CatalogImpl@74159dc9
scala> catalog.listDatabases().show(false)
+-------+---------------------+-----------------------------------------+
|name |description |locationUri |
+-------+---------------------+-----------------------------------------+
|default|Default Hive database|hdfs://hadoop001:9000/user/hive/warehouse|
+-------+---------------------+-----------------------------------------+
scala> catalog.listDatabases().select("name").show(false)
+-------+
|name |
+-------+
|default|
+-------+
scala> catalog.listTables("default").show()
19/01/15 13:02:14 WARN ObjectStore: Failed to get database global_temp, returning NoSuchObjectException
+---------+--------+-----------+---------+-----------+
| name|database|description|tableType|isTemporary|
+---------+--------+-----------+---------+-----------+
| person| default| null| MANAGED| false|
|ruoze_emp| default| null| MANAGED| false|
| ruoze_wc| default| null| MANAGED| false|
+---------+--------+-----------+---------+-----------+
scala> catalog.listColumns("dafault","ruoze_wc").show()