Мы используем Azure Озеро данных Gen1 в качестве источника в нашей табличной модели. Мы развернули эту модель на локальном сервере. Теперь каждый раз нам приходится вручную обновлять sh учетные данные для обработки модели. Мы хотим автоматизировать это. Я уже пробовал следующую ссылку.
https://blog.gbrueckl.at/2017/11/processing-azure-analysis-services-oauth-sources-like-azure-data-lake-store/
Но выдает следующую ошибку
предоставленные учетные данные не могут быть использованы для источника DataLake
Это объект учетных данных, который создается из сценария:
{
"AuthenticationKind": "OAuth2",
"kind": "DataLake",
"path": "https://mydatalake.azuredatalakestore.net/",
"Expires": "Thu, 21 Mar 2020 01:37:50 GMT",
"AccessToken": "",
"RefreshToken": ""
}
Код:
[string] $ClientID = ""
[string] $AASServerName = ""
[string] $AASDatabaseName = ""
[string] $CredentialName =""
[string] $Password = ""
Import-Module SqlServer
$authUrl = "https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/token"
$body = @{
"client_id" = $ClientID;
"scope" = "openid offline_access";
"grant_type" = "password";
"username" = $CredentialName
"password" = $Password
}
Write-Output "Getting Authentication-Token ..."
$adlsToken = Invoke-RestMethod -Uri $authUrl –Method POST -Body $body
$dtformat = "r"
$dateTime = Get-Date -f $dtformat
$newdateTime=[datetime]::ParseExact($datetime,$dtformat,$Null).AddSeconds($adlsToken.expires_in).ToString($dtformat)
#modify the token so it can be used within our ADLS Datasource
$adlsToken | Add-Member -NotePropertyName "AuthenticationKind" "OAuth2"
$adlsToken | Add-Member -NotePropertyName "kind" "DataLake"
$adlsToken | Add-Member -NotePropertyName "path" "https://mydatalake.azuredatalakestore.net/"
$adlsToken | Add-Member -NotePropertyName "Expires" $newdateTime
$adlsToken | Add-Member -NotePropertyName "AccessToken" $adlsToken.access_token
$adlsToken | Add-Member -NotePropertyName "RefreshToken" $adlsToken.refresh_token
$adlsToken = $adlsToken | Select-Object -Property * -ExcludeProperty scope,expires_in,ext_expires_in,token_type, id_token,refresh_token,access_token,token_type
Write-Output "Updating DataSource with latest token ..."
#Update the DataSource with a valid Token
$updateDataSource = '{
"createOrReplace": {
"object": {
"database": "'+$AASDatabaseName+'",
"dataSource": "DataLake/https://mydatalake azuredatalakestore net/xyx/data"
},
"dataSource": {
"type": "structured",
"name": "DataLake/https://mydatalake azuredatalakestore net/xyx/data",
"connectionDetails": {
"protocol": "data-lake-store",
"address": {
"url": "https://mydatalake.azuredatalakestore.net"
}
},
"credential": ' + (ConvertTo-Json $adlsToken) + '
}
}
}'
$updateDataSource
Invoke-ASCmd -Server $AASServerName -Database $AASDatabaseName -Query $updateDataSource
Write-Output "Start Processing <dataOnly> ..."
$processObject = '
{
"refresh": {
"type": "dataOnly",
"objects": [ {"database": "' + $AASDatabaseName + '"} ]
}
}'
Invoke-ASCmd -Server $AASServerName -Database $AASDatabaseName -Query $processObject
Write-Output "Finished!"