我尝试运行此命令来创建 Azure Databricks 链接服务
Set-AzDataFactoryV2LinkedService -Force -ResourceGroupName MYDEVRESOURCEGROUP -DataFactoryName MYDEVADF -Name LS_ADB_JOB_01 -DefinitionFile ./LS_ADB_JOB_01.json
LS_ADB_JOB_01.json
包含内容
.
.
.
"newClusterSparkEnvVars": {
"PYSPARK_PYTHON": "/databricks/python3/bin/python3"
},
"newClusterVersion": "@linkedService().ClusterVersion",
"newClusterDriverNodeType": "@linkedService().DriverNodeType",
"clusterOption": "Autoscaling",
"newClusterInitScripts": [
"/Workspace/Ingestion/init_odbc_driver.sh"
],
"dataSecurityMode": "SINGLE_USER"
},
.
.
.
然后此命令成功运行,但 ADF 上未出现
"dataSecurityMode": "SINGLE_USER"
我该如何解决这个问题?
出现此问题的原因是,使用 PowerShell 在 Azure 数据工厂 (ADF) 中创建 Azure Databricks 链接服务
时,未识别或应用
dataSecurityMode
属性。出现这种情况的原因通常是:
dataSecurityMode
。Set-AzDataFactoryV2LinkedService
命令与定义文件一起使用时,并非所有属性都可以直接应用。确保您使用最新的 Az PowerShell Module 和 Azure API 版本:
Update-Module -Name Az -Force
Get-InstalledModule -Name Az
dataSecurityMode
Azure Databricks 链接服务。如果 PowerShell 模块无法识别
dataSecurityMode
属性,您可以直接与 ADF REST API 交互以创建或更新链接服务。
具体操作方法如下:
第 1 步:为链接服务准备 JSON 负载
{
"name": "LS_ADB_JOB_01",
"properties": {
"type": "AzureDatabricks",
"typeProperties": {
"domain": "adb-<your-databricks-instance>.azuredatabricks.net",
"newClusterConfig": {
"newClusterDriverNodeType": "@linkedService().DriverNodeType",
"newClusterVersion": "@linkedService().ClusterVersion",
"clusterOption": "Autoscaling",
"dataSecurityMode": "SINGLE_USER",
"newClusterSparkEnvVars": {
"PYSPARK_PYTHON": "/databricks/python3/bin/python3"
},
"newClusterInitScripts": [
"/Workspace/Ingestion/init_odbc_driver.sh"
]
}
}
}
}
第2步:调用REST API来创建/更新链接服务 在 PowerShell 中使用
Invoke-RestMethod
运行以下命令:
# Define variables
$resourceGroupName = "MYDEVRESOURCEGROUP"
$dataFactoryName = "MYDEVADF"
$linkedServiceName = "LS_ADB_JOB_01"
$subscriptionId = "<YourSubscriptionId>"
$accessToken = (Get-AzAccessToken).Token # Get Azure access token
# REST API URL
$url = "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.DataFactory/factories/$dataFactoryName/linkedservices/$linkedServiceName?api-version=2018-06-01"
# Load JSON payload
$body = Get-Content -Raw -Path "./LS_ADB_JOB_01.json" | ConvertFrom-Json | ConvertTo-Json -Depth 10
# Send PUT request to update the Linked Service
Invoke-RestMethod -Method Put -Uri $url -Headers @{Authorization = "Bearer $accessToken"; "Content-Type" = "application/json" } -Body $body
dataSecurityMode
选项。如果它出现在 UI 中但不是通过 PowerShell 命令出现,则 SDK 版本可能已过时。
您可以使用 ARM(Azure 资源管理器)模板部署链接服务,该模板明确支持所有属性,包括
dataSecurityMode
。
ARM 模板示例:
{
"resources": [
{
"name": "LS_ADB_JOB_01",
"type": "Microsoft.DataFactory/factories/linkedservices",
"apiVersion": "2018-06-01",
"properties": {
"type": "AzureDatabricks",
"typeProperties": {
"domain": "adb-<your-databricks-instance>.azuredatabricks.net",
"newClusterConfig": {
"dataSecurityMode": "SINGLE_USER",
"newClusterDriverNodeType": "@linkedService().DriverNodeType",
"newClusterVersion": "@linkedService().ClusterVersion",
"newClusterInitScripts": [
"/Workspace/Ingestion/init_odbc_driver.sh"
],
"newClusterSparkEnvVars": {
"PYSPARK_PYTHON": "/databricks/python3/bin/python3"
}
}
}
}
}
]
}
部署:
New-AzResourceGroupDeployment -ResourceGroupName "MYDEVRESOURCEGROUP" -TemplateFile "./template.json"
如果未使用
dataSecurityMode
应用 Set-AzDataFactoryV2LinkedService
:
如果您需要更多详细信息或特定步骤的帮助,请告诉我! 🚀