Synapse Notebook中createGlobalTempView与createOrReplaceGlobalTempView的用途是什么?
Synapse Notebook 中 createGlobalTempView 与 createOrReplaceGlobalTempView 的用途及跨Notebook访问问题
用途说明
createGlobalTempView:创建全局临时视图,仅在视图不存在时生效,若同名视图已存在会直接报错。这类视图存储在系统内置的global_temp数据库下,生命周期绑定当前Notebook的Spark会话。createOrReplaceGlobalTempView:创建或覆盖全局临时视图——如果同名视图已存在则直接替换,不存在则新建。同样归属global_temp数据库,生命周期与当前Spark会话绑定。
Synapse Spark池与Databricks集群的核心差异
你遇到的访问问题是两种平台运行机制不同导致的:
- Databricks集群是长期运行的单一Spark应用,所有附加到该集群的Notebook共享同一个Spark上下文,因此全局临时视图可在集群内的Notebook间共享,直到集群重启或会话终止。
- Synapse Spark池是按需分配资源的独立会话模式:哪怕是同一个Spark池,每个Notebook执行时都会启动独立的Spark应用(独立Spark上下文),会话完全隔离。所以一个Notebook中创建的全局临时视图,仅存在于自身的Spark应用生命周期内,其他Notebook(哪怕使用同一个Spark池)无法访问。
Synapse跨Notebook共享数据的替代方案
由于全局临时视图无法跨Notebook共享,可采用以下方式实现数据互通:
- 持久化到外部存储
将数据写入ADLS Gen2、Blob Storage等外部存储,其他Notebook直接读取即可,推荐用Delta Lake或Parquet格式:# 写入数据到ADLS df.write.format("delta").mode("overwrite").save("abfss://container@storageaccount.dfs.core.windows.net/path/to/data") # 其他Notebook读取 df = spark.read.format("delta").load("abfss://container@storageaccount.dfs.core.windows.net/path/to/data") - 创建永久表/视图
在Synapse Spark数据库中创建永久表或视图,这类对象存储在元数据中,所有有权限的Notebook都能访问:# 创建永久表 df.write.mode("overwrite").saveAsTable("my_database.my_permanent_table") # 其他Notebook访问 df = spark.sql("SELECT * FROM my_database.my_permanent_table") - 借助Serverless SQL池
若数据存于外部存储,可通过Serverless SQL池创建外部表,Spark Notebook和SQL脚本都能访问该表。
内容的提问来源于stack exchange,提问作者shanmukh SS
相关产品推荐
相关产品推荐

