SparkSQL Catalog的作用和访问Hive元数据信息

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()

猜你喜欢

转载自blog.csdn.net/qq_43688472/article/details/86490967