如何在Azure Machine Learning Studio注册ADLS Gen1的指定版本Delta Table
核心问题说明
无法直接在ADLS路径中添加参数指向指定Delta Table版本的parquet文件:Delta的版本映射逻辑存储在表目录下_delta_log文件夹的元数据中,原生文件系统路径无法解析该元数据,因此直接读取根目录会抓到所有历史版本的parquet文件。
可选实现方案(均无需修改Delta保留周期配置)
方案1:导出指定版本到独立路径后注册
在Databricks中用Delta时间旅行读取指定版本,仅导出该版本的有效parquet文件到独立路径,再注册该路径到Azure ML Studio即可,示例代码:from delta.tables import DeltaTable # 读取版本号为N的Delta表,也可替换为option("timestampAsOf", "2024-01-01 00:00:00")按时间戳选版本 delta_df = spark.read.format("delta").option("versionAsOf", N).load("adl://organisation.azuredatalakestore.net/folder_name/my_data") # 写入仅包含当前版本文件的独立目录 delta_df.write.mode("overwrite").parquet("adl://organisation.azuredatalakestore.net/folder_name/my_data_version_N")优势:导出后的目录仅含所需版本的parquet文件,无需修改训练侧代码。
方案2:注册全量Delta目录,训练侧指定版本读取
直接将包含_delta_log的整个Delta表根目录注册为File Dataset,在训练脚本中用轻量deltalake库(无需依赖Spark)指定版本读取,示例代码:from deltalake import DeltaTable # path为Azure ML File Dataset挂载后的本地路径,指定对应版本号即可读取仅该版本的有效数据 dt = DeltaTable(path="./mounted/path/to/my_data", version=N) df = dt.to_pandas()优势:无需额外存储多版本副本,无数据导出步骤,操作成本最低。
方案3:生成符号链接清单,注册清单路径
在Databricks中执行Delta的generate命令,生成仅含指定版本有效文件路径的符号链接清单,直接注册清单路径即可,无需复制全量数据:from delta.tables import DeltaTable delta_table = DeltaTable.forPath(spark, "adl://organisation.azuredatalakestore.net/folder_name/my_data") # 生成全版本的符号链接清单 delta_table.generate("symlink_format_manifest")生成的清单存储在Delta表根目录下的
_symlink_format_manifest文件夹中,按版本号划分目录,注册Azure ML File Dataset时直接选择对应版本的清单目录即可。
优势:仅新增KB级别的清单文件,存储开销几乎为0,无需修改训练侧读取逻辑。
内容的提问来源于stack exchange,提问作者DataBach
相关产品推荐
相关产品推荐

