You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

关于Spark SQL数据库与全局表存储位置及临时视图存储机制的技术咨询

关于Spark中数据库、全局表与临时视图的存储位置

嘿,作为刚接触Spark的新手,有这个疑问太正常了!我来帮你把这几个概念的存储位置理得明明白白:

一、全局数据库与永久表

  • 首先说元数据(比如表名、字段结构、存储路径这类核心信息):默认情况下Spark会用内置的Derby数据库存储这些元数据;如果你的Spark集群配置了连接外部Hive Metastore,那元数据就会存在Hive对应的元数据库(比如MySQL、PostgreSQL)里。
  • 再说说实际数据:这些表的数据并不存在Spark内存里,而是存在磁盘或外部存储系统中。如果创建表时没指定LOCATION参数,数据会默认存在Spark配置的spark.sql.warehouse.dir目录下(可能是本地文件系统,也可能是HDFS、S3这类分布式存储,取决于你的运行环境);如果指定了LOCATION,数据就会存在你指定的外部存储路径里。
  • 简单总结:永久表是持久化的,元数据存在元数据仓库,实际数据存在外部存储,和Spark内存无关——重启Spark或者集群后这些表依然能被访问。

二、临时视图/本地表

  • 普通临时视图(用createOrReplaceTempView创建):它的元数据只存在当前SparkSession的内存里,一旦你关闭这个SparkSession,视图就直接消失了,而且它只能被当前SparkSession访问,其他Session看不到。
  • 全局临时视图(用createOrReplaceGlobalTempView创建):它的元数据是跨SparkSession的,同一Spark应用里的所有Session都能访问,但依然是存在Spark内存中,当整个Spark应用结束后,这个视图就会被清除。
  • 重要提醒:不管是哪种临时视图,本身都不存储实际数据!它只是一个SQL查询的逻辑定义,每次查询视图时,Spark都会重新执行对应的逻辑去读取原始数据源的数据——内存里只是存了这个视图的定义,不是数据本身。

内容的提问来源于stack exchange,提问作者Abhishek

火山引擎 最新活动