Автоматизированная локальная табличная модель refre sh с Azure подключением DataLake Gen1 - PullRequest
1 голос
/ 23 апреля 2020

Мы используем 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!"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...