如何阻止Azure机器学习批量作业注册匿名数据资产至工作区
Azure ML批量作业ETL中处理自动注册匿名数据资产的方案
问题背景
我已成功将Azure Machine Learning批量作业作为ETL流程的一部分使用,但每次ETL运行都会向工作区注册匿名数据资产。目前通过REST调用触发作业,请求体如下:
{ "properties": { "InputData": { "batchInput": { "JobInputType": "UriFolder", "Uri": "azureml://datastores/<datastore>/paths/<input folder>" } }, "OutputData": { "batchOutput": { "JobOutputType": "UriFile", "Uri": "azureml://datastores/<datastore>/paths/<output folder>" } }, "compute": {"instanceCount": "1"} } }
需求:
- 如何阻止自动注册数据资产
- 若无法实现,为数据资产设置一致名称并支持版本化,避免混乱的匿名标签
附带的batch脚本run函数如下(我们直接将输出数据写入已注册数据存储的Parquet文件,未使用run函数的返回输出):
def run(mini_batch): print(f"run method start: {__file__}, run({mini_batch})") for mb in mini_batch: df = pd.read_parquet(mb) <apply data transformations> parquet_file_path = os.path.join(output_path, Path(mb).stem + '.parquet') print(f'parquet_path:{parquet_file_path}') SCHEMA = pa.schema([<pa schema>]) df.to_parquet(parquet_file_path, schema=SCHEMA) return mini_batch
解决方案
一、阻止自动注册数据资产
Azure ML批量作业默认会将定义的输入、输出自动注册为数据资产,要关闭该行为,可在REST请求体的输入输出配置中添加register_data_asset: false参数:
修改后的REST请求体示例:
{ "properties": { "InputData": { "batchInput": { "JobInputType": "UriFolder", "Uri": "azureml://datastores/<datastore>/paths/<input folder>", "register_data_asset": false } }, "OutputData": { "batchOutput": { "JobOutputType": "UriFile", "Uri": "azureml://datastores/<datastore>/paths/<output folder>", "register_data_asset": false } }, "compute": {"instanceCount": "1"} } }
同时确认作业配置中没有强制要求注册数据资产的全局设置,且你的run函数是直接写入数据存储而非返回输出,避免触发自动注册逻辑。
二、设置一致的可版本化数据资产名称
若上述方法无法生效,可在REST请求体中为输入输出指定明确的名称和版本,替代默认的匿名生成:
输入数据资产配置
在InputData的对应项中添加DataAssetName和DataAssetVersion参数:
"batchInput": { "JobInputType": "UriFolder", "Uri": "azureml://datastores/<datastore>/paths/<input folder>", "DataAssetName": "etl_batch_input", "DataAssetVersion": "1.0.0" }
输出数据资产配置
在OutputData的对应项中指定名称和版本,版本可根据ETL运行的时间戳、构建号等动态生成(比如20240520.1):
"batchOutput": { "JobOutputType": "UriFile", "Uri": "azureml://datastores/<datastore>/paths/<output folder>", "DataAssetName": "etl_batch_output", "DataAssetVersion": "20240520.1" }
这样每次运行时,只要版本号唯一,就会生成同一名称下的不同版本数据资产,避免混乱的匿名标签。
内容的提问来源于stack exchange,提问作者WEVERETT
相关产品推荐
相关产品推荐

