如何查询Azure外部表位置?能否在Notebook中一步创建Synapse外部表?
问题1:如何查询Azure外部表的存储位置?
方式1:Synapse SQL池(专用/无服务器)中用T-SQL查询
执行以下SQL,替换your_database和your_external_table为实际名称:
USE your_database; SELECT t.name AS table_name, l.location AS storage_location FROM sys.external_tables t JOIN sys.external_data_sources s ON t.data_source_id = s.data_source_id JOIN sys.external_file_locations l ON s.data_source_id = l.data_source_id WHERE t.name = 'your_external_table';
方式2:Spark Notebook中查询
用Spark SQL的DESCRIBE EXTENDED命令查看,结果里的Location字段就是存储路径:
DESCRIBE EXTENDED your_external_table;
问题2:在Jupyter Notebook中直接基于Parquet文件创建外部表
可以在同一个Notebook里完成写入Parquet和创建外部表的操作,无需依赖流水线,以下是两种简便实现方式:
方法1:Spark SQL分步/一键创建
先写入Parquet,再基于路径或临时视图创建外部表:
# 1. 写入Parquet(保留你的原有代码) df.write.parquet('abfss://mycontainer@mylocation/Test', mode='overwrite') # 2. 基于DataFrame创建临时视图,简化表结构定义 df.createOrReplaceTempView('temp_df_view') # 3. 在指定数据库中创建外部表 spark.sql(""" USE your_target_database; CREATE EXTERNAL TABLE IF NOT EXISTS your_external_table USING PARQUET LOCATION 'abfss://mycontainer@mylocation/Test' AS SELECT * FROM temp_df_view """)
如果已经明确表结构,也可以直接写CREATE EXTERNAL TABLE语句,跳过临时视图步骤。
方法2:用saveAsTable一步完成写入+创建外部表
直接调用Spark的saveAsTable方法,指定存储路径和外部表属性,一步到位:
df.write.mode('overwrite') \ .option('path', 'abfss://mycontainer@mylocation/Test') \ .saveAsTable('your_target_database.your_external_table')
这个方法会自动在目标数据库创建外部表,同时将数据写入指定的Parquet路径。
注意事项
- 确保Spark会话拥有存储账户的访问权限(如MSI、服务主体授权)
- 根据需求选择写入模式:
overwrite覆盖现有数据,append追加数据 - 若后续要用无服务器SQL池访问该表,需提前配置好对应的外部数据源和文件格式
内容的提问来源于stack exchange,提问作者edd
相关产品推荐
相关产品推荐

