Invoke-ASCmd для развертывания из Json Ошибка при выдаче файла - Использование Powershell и Azure Analysis Services с OAuth и Azure Data Lake - PullRequest
1 голос
/ 12 марта 2020

Сводка: я использую Invoke-ASCmd –InputFile «$ templateLocation» -Server $ serverName в PowerShell для развертывания модели / таблицы на Azure сервере Analysis Services (AAS). Проблема в том, что я получаю сообщение об ошибке «Invoke-ASCmd: индекс вышел за пределы массива» * .

Подробности: у меня уже есть база данных, развернутая на сервере AAS с OAuth, и она есть только одна таблица. Я хочу добавить другую таблицу, используя шаблон файла Json. Я проделал ту же процедуру, используя локальный сервер служб Analysis Services с Windows аутентификацией и модель, созданную с помощью SQL серверных таблиц - и она работала отлично.

Теперь разница в том, что моему серверу AAS требуется OAuth-аутентификация. Кроме того, модель была создана с таблицами, которые являются текстовыми файлами в озере данных Azure. В итоге, я хотел знать, как я могу добавить таблицу в существующую модель AAS без , при этом необходимо использовать автоматизацию учетных данных, runbooks и т. Д. c.

Вот мой сценарий PowerShell.

###########################
#Location of Templates
###########################
$masterFolderLocation = "C:\Templates\"
$templateLocation = $masterFolderLocation + 'MyModel.json' # xmla/json with one table to be added to model
Write-Output "Template location:" $templateLocation

###########################
#Variables
###########################
$databaseName = "MyDatabase" # This database already exists in the AAS server
$serverName = "asazure://aspaaseastus2.asazure.windows.net/myserver"; # Azure Analysis Services Server

###########################
#Server Connection
###########################
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices.Tabular")
$svr = New-Object Microsoft.AnalysisServices.Tabular.Server
$svr.Connect($serverName)

###########################
#Count number of databases
###########################
$database = $svr.databases[1]
Write-Host "Number of Databases in the server:" $svr.databases[1].model.tables.count


###########################
#Refresh Model
###########################
Write-Host "Refreshing model..."
$database = $svr.Databases[$databaseName]
$model = $database.Model
$model.RequestRefresh([Microsoft.AnalysisServices.Tabular.RefreshType]::Full)

###########################
#Save Changes
###########################
Write-Host "Saving model..."
$database.Model.SaveChanges()

###########################
#Deploy
###########################
Invoke-ASCmd –InputFile "$templateLocation" -Server $serverName

Вот ошибка, которую я получаю:

Invoke-ASCmd : Index was outside the bounds of the array.
At C:\Users\StackOverflow.ps1:45 char:1
+ Invoke-ASCmd –InputFile "$templateTabular" -Server $serverName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Invoke-ASCmd], IndexOutOfRangeException
    + FullyQualifiedErrorId : System.IndexOutOfRangeException,Microsoft.AnalysisServices.PowerShell.Cmdlets.ExecuteScriptCommand

Вот мой шаблон Json (предназначенный для добавления только одной таблицы в уже существующую базу данных / модель)

{
  "create": {
    "parentObject": {
      "database": "MyDatabase"
    },
    "table": {
      "name": "Department",
      "columns": [
        {
          "name": "DepartmentId",
          "dataType": "int64",
          "isHidden": true,
          "sourceColumn": "DepartmentId",
          "summarizeBy": "none"
        },
        {
          "name": "Department",
          "dataType": "string",
          "sourceColumn": "Department"
        }
      ],
      "partitions": [
        {
          "name": "Partition",
          "dataView": "full",
          "source": {
            "type": "m",
            "expression": [
              "let",
              "    Source=GetFileList(),",
              "    #\"Department txt\" = Source{[Name=\"Department.txt\"]}[Content],",
              "    #\"Imported CSV\" = Csv.Document(#\"Department txt\",[Delimiter=\"|\", Columns=5, Encoding=65001, QuoteStyle=QuoteStyle.None]),",
              "    #\"Promoted Headers\" = Table.PromoteHeaders(#\"Imported CSV\", [PromoteAllScalars=true]),",
              "    #\"Changed Type\" = Table.TransformColumnTypes(#\"Promoted Headers\",{{\"DepartmentId\", Int64.Type}, {\"Department\", type text})",
              "in",
              "    #\"Changed Type\""
            ]
          }
        }
      ]
    }
  }
}



Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...