当我尝试在现有流分析作业和 postgresql 数据库上使用 Powershell 中的 az cli 创建具有 Postgresql 数据源的 Azure 流分析输出时,它无法返回
(BadRequest) The JSON provided in the request body is invalid. The required property 'datasource type' is missing from the request.
Code: BadRequest
这是测试powershell代码:
$dataSourceJson = @"
{
"type": "Microsoft.DBforPostgreSQL/servers/databases",
"properties": {
"server": "<YourHostFullName>",
"database": "<YourDbName>",
"table": "<YourTableName>",
"user": "<user>",
"password": "<password>"
}
}
"@
# Output to verify the content
Write-Host "Datasource JSON String:"
Write-Host $dataSourceJson
$dataSource = ($dataSourceJson -replace "\s+", "") -replace '"', '\"'
Write-Host "Datasource JSON String on a single line, no spaces and double-quote escaped:"
Write-Host $dataSource
# Create the Azure Stream Analytics output using the datasource
az stream-analytics output create `
--job-name "<YourJobName>" `
--name "<YourOutputName>" `
--resource-group "<YourResourceGroupName>" `
--datasource "$dataSource" `
--verbose
您可能认为不支持 Postgres 输出,但您可以在 Azure 门户中创建它。它也可以使用 Terraform 工作,尽管随后的输出描述中缺少数据源的类型(使用 az stream-analytics 输出显示)。
datasourceJson 字符串似乎具有正确的格式,因为当您将 postgres 类型“Microsoft.DBforPostgreSQL/servers/databases”替换为 Azure SQL 类型“Microsoft.Sql/Server/Database”时,它会成功。
有什么线索吗?
与 Azure CLI 一起使用时,这看起来像是 PostgreSQL 服务器类型
Microsoft.DBforPostgreSQL/servers/databases
的错误或问题。经过探索后,我发现,对于所有 SQL 服务器和数据库,流分析输出接受的唯一类型是 Microsoft.Sql/Server/Database
资源类型。
$dataSourceJson = @"
{
"type": "Microsoft.Sql/Server/Databases",
"properties": {
"server": "newserverp.postgres.database.azure.com",
"database": "newdb",
"table": "newtable",
"user": "roots",
"password": "Jaanu@971204"
}
}
"@
CLI 命令:
az stream-analytics output create `
--job-name "sample" `
--name "sampleutput" `
--resource-group "Jahnavi" `
--datasource "$dataSourceJson" `
--verbose
注意:如果您可以在 Azure 门户中的流分析作业下看到输出,则它显示的是准确的 PostgreSQL 服务器,没有任何冲突。
同时,Microsoft 团队已通过资源类型修复了该问题,请使用您已经提到的 terraform 或 Portal 等替代解决方法。