如何用Azure Python SDK for DataFactory连接指定Git分支并更新数据集?
连接Git分支操作Azure Data Factory数据集
默认的adf_client.datasets.get()方法获取的是已发布到live环境的数据集,而非Git分支中的草稿版本。要操作Git分支里的资源,需要利用Data Factory的Git集成能力,通过以下方式实现:
方法一:通过Git访问令牌直接操作仓库文件
先获取Git仓库的访问令牌,再用Git客户端库直接读写分支内的数据集配置文件:
1. 获取Git访问令牌
from azure.identity import ClientSecretCredential from azure.mgmt.datafactory import DataFactoryManagementClient from azure.mgmt.datafactory.models import GitAccessTokenParameters subscription_id = 'xxxxx' resource_group_name = 'xxxxxx' factory_name = 'adf-xxx' target_branch = 'your-target-branch' # 替换为你的Git分支名 git_type = 'GitHub' # 若使用Azure DevOps则改为'AzureDevOpsGit' credentials = ClientSecretCredential( tenant_id='xxxx', client_id='xxxx', client_secret='xxxx' ) adf_client = DataFactoryManagementClient(credentials, subscription_id) # 获取Git仓库访问令牌 git_token_result = adf_client.factories.get_git_access_token( resource_group_name=resource_group_name, factory_name=factory_name, git_access_token_parameters=GitAccessTokenParameters( repository_type=git_type, branch_name=target_branch ) ) access_token = git_token_result.access_token repo_url = git_token_result.repository_url
2. 读写并提交分支中的数据集
使用gitpython库操作Git仓库(需先安装:pip install gitpython):
import git import json from tempfile import TemporaryDirectory # 创建临时目录克隆仓库 with TemporaryDirectory() as tmpdir: # 替换URL为带令牌的格式,避免认证问题 auth_repo_url = repo_url.replace('https://', f'https://oauth2:{access_token}@') repo = git.Repo.clone_from(auth_repo_url, tmpdir, branch=target_branch) # 数据集文件路径(Data Factory默认将数据集放在datasets目录下,文件名对应数据集名称) dataset_file = f"{tmpdir}/datasets/DS_DEV_OP_XXX.json" # 读取并修改数据集配置 with open(dataset_file, 'r') as f: dataset_config = json.load(f) # 示例:修改数据集描述 dataset_config['properties']['description'] = 'Updated via SDK from Git branch' # 保存修改并提交推送 with open(dataset_file, 'w') as f: json.dump(dataset_config, f, indent=2) repo.index.add([dataset_file]) repo.index.commit("Update dataset via SDK") repo.remote('origin').push()
方法二:使用Data Factory SDK的Git资源操作接口
无需直接操作Git仓库,通过SDK提供的Git资源专用接口读写分支内的资源:
from azure.mgmt.datafactory.models import GitResourceParameters # 获取Git分支中的数据集内容 git_resource = adf_client.git_repositories.get_git_resource( resource_group_name=resource_group_name, factory_name=factory_name, git_resource_parameters=GitResourceParameters( resource_path='/datasets/DS_DEV_OP_XXX', branch_name=target_branch, repository_type=git_type ) ) # 查看原始内容 print(git_resource.resource_content) # 修改内容并更新到分支 updated_content = git_resource.resource_content.replace('原配置内容', '新配置内容') adf_client.git_repositories.update_git_resource( resource_group_name=resource_group_name, factory_name=factory_name, git_resource_parameters=GitResourceParameters( resource_path='/datasets/DS_DEV_OP_XXX', branch_name=target_branch, repository_type=git_type, resource_content=updated_content ) )
注意事项
- 确保服务主体拥有Git仓库的读写权限,以及Data Factory的协作权限。
repository_type需与Data Factory关联的Git类型严格匹配(GitHub或AzureDevOpsGit)。- 操作前确认目标分支已存在于Git仓库中。
内容的提问来源于stack exchange,提问作者Ravi Kiran G
相关产品推荐
相关产品推荐

