Azure Databricks:如何从Unity Catalog读取指定分区?
Unity Catalog读取指定分区的方法
无需直接访问存储路径,通过分区裁剪读取指定分区
不管是Unity Catalog中的内部表(Managed Table)还是外部表,都可以通过分区过滤语法实现只读取指定分区,不用加载全量数据:
- 使用Spark SQL查询时,直接在语句中添加
WHERE子句指定分区列的值:SELECT * FROM my_catalog.my_database.my_table WHERE partition_col = 'target_partition_value' - 使用DataFrame API时,调用
filter方法过滤分区:spark.table("my_catalog.my_database.my_table").filter("partition_col = 'target_partition_value'")
Spark会自动识别分区列并执行分区裁剪,仅扫描对应分区的数据,效率和直接访问存储路径相当。
关于外部表的路径读取方式
你提到的直接通过abfs://my_container@my_storage_account.dfs.core.windows.net/<path>/<partition>路径读取是可行的,但这不是唯一方式,上面的分区过滤方法更通用,也更符合Unity Catalog的使用规范(无需暴露底层存储路径)。
是否必须创建外部表才能读指定分区?
不需要。Unity Catalog中的内部表同样支持分区裁剪,只要表是按指定列分区创建的,就可以通过上述的WHERE过滤或filter方法读取指定分区,完全不需要依赖外部表的存储路径访问。
针对视图的特殊说明
如果你查询的是视图(mt_view),可以直接在视图查询语句后添加分区过滤条件,比如:
SELECT * FROM my_catalog.my_database.mt_view WHERE partition_col = 'target_partition_value'
但如果视图的定义本身已经限制了数据范围或未保留分区列,建议直接查询视图对应的底层分区表来实现分区读取。
内容的提问来源于stack exchange,提问作者Alexis Kan
相关产品推荐
相关产品推荐

