SSAS - пример полного обновления куба

OLAP, SSAS  SSAS Категория:  OLAP, SSAS
Опубликовал:         27.08.2012               print

Предположим, Вы собрали свой первый OLAP-куб (можно поздравить!) или первый релиз очередного куба на платформе SQL Server Analysis Services (SSAS). Теперь перед Вами стоит задача - разработать процесс автоматического обновления куба на регулярной основе. В то же время активная фаза развития куба (добавление новых измерений, реорганизация иерархий по просьбам пользователей, и т.п.) не завершена, а посему требуется полное обновление (Full Processing) куба. Предлагаю рассмотреть простой и проверенный способ, суть которого заключается в том, что MOLAP-куб процессится на отдельном сервере (или инстансе SSAS), а далее готовые файлы перемещаются на боевую площадку.


Открываем SQL Server Integration Services (SSIS) и создаем новый (или впрягаем уже существующий у Вас) интеграционный проект. Используя компоненту "Analysis Services Processing Task", сначала настраиваем задачу процессинга измерений, затем - процессинга размерных групп, причем в случае большого куба можно разнести на отдельные шаги процессинг не только разных размерных групп, но и процессинг данных и процессинг индексов, агрегатов.




Для больших кубов также рекомендуется использовать 64-х разрядную версию SQL Server Enterprise Edition, чтобы задействовать всю мощь параллельного режима процессинга:




На следующем шаге после обновления кубов возможно потребуется добавить учетные записи для доступа пользователей к кубу. Для этого воспользуемся компонентой "Script Task", в которой разместим нижеприведенный программный код (код приведен схематично, только для понимания подхода). Смысл кода заключается в том, что из реляционной таблицы, известной по одной из предыдущих статей, извлекаются данные об активных пользователях и их доменные учетные записи добавляются в единственную роль многомерной базы. Обратите внимание, строки параметров подключения к OLAP и реляционной базе данных прописаны в глобальных пользовательских переменных уровня SSIS-проекта и передаются посредством входных параметров в программную процедуру.



----------------------------------------------------------------------------------------------------------
Imports System

Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.AnalysisServices
Imports System.Data.SqlClient

.......
Partial Public Class ScriptMain
  Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase

  Enum ScriptResults
    Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
    Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
  End Enum


  Public Sub Main()
    Dim queryString As String, RDBMS_connString As String
    Dim strLogin As String, myOLAPServer_ConnectionString As String

    RDBMS_connString = Dts.Variables("RDBMS_ConnectionString").Value.ToString
    queryString = "SELECT * FROM dbo.User_List ORDER BY User_SysName"

    Dim myOLAPServer As New Server
    myOLAPServer_ConnectionString = Dts.Variables("OLAP_DEVELOP_ConnectionString").Value.ToString
    myOLAPServer.Connect(myOLAPServer_ConnectionString)                           ' соединяемся с OLAP-сервером
    Dim MyDatabase As Database = myOLAPServer.Databases.GetByName("OLAP_PROJECT") ' получаем ссылку на БД

    Dim MyRole As Role
    If Not MyDatabase.Roles.ContainsName("Staff") Then
      ' MyRole = MyDatabase.Roles.Add("Staff")
      ' MyRole.Update()
      Dts.TaskResult = ScriptResults.Failure
      Exit Sub
    Else
      MyRole = MyDatabase.Roles.GetByName("Staff")
      MyRole.Members.Clear()
      MyRole.Update()
    End If

    Dim conn As New SqlConnection
    conn.ConnectionString = RDBMS_connString
    Dim cmd As New SqlCommand(queryString, conn)

    ' Try
    conn.Open()
    Dim rdr As SqlDataReader = cmd.ExecuteReader()
    While rdr.Read()
      If rdr("User_Activity") = "активный" And rdr("User_Role") <> "администратор" Then
        strLogin = rdr.Item("User_SysName").ToString
        If userValid(strLogin) Then
          Dim MyRoleMember As New RoleMember(strLogin)
          MyRole.Members.Add(MyRoleMember)
          MyRole.Update()
        End If
      End If
    End While
    rdr.Close()
    ' Catch ex As Exception
    ' End Try

    If conn.State = ConnectionState.Open Then
      conn.Close()
      conn.Dispose()
    End If

    ' MyDatabase.Update()     'в данном случае эта команда не требуется
    myOLAPServer.Disconnect()

    Dts.TaskResult = ScriptResults.Success
  End Sub



  Function userValid(ByVal MyUser As String) As Boolean
    Dim retVal As Boolean = False

    On Error Resume Next
    Dim objUser As Object

    objUser = GetObject("WinNT://YoursDomen/" & MyUser)

    If Err.Number = 0 Then
      retVal = True
      ' MsgBox("В домене есть учетная запись  "  & retVal.ToString & "  " & MyUser)
    ElseIf Err.Number = -2147022676 Then
      retVal = False
      ' MsgBox("В домене нет учетной записи  " & retVal.ToString & "  " & MyUser)
    Else
      retVal = False
      ' MsgBox("Не определен статус учетной записи  " & retVal.ToString & "  " & MyUser)
    End If

    Return retVal
  End Function
End Class
----------------------------------------------------------------------------------------------------------

Теперь файлы полностью готового куба (кубов) можно копировать на боевой сервер SSAS. Воспользуемся утилитой robocopy.exe, которая включена в состав Windows Server 2003 Resource Kit Tools, ее можно скачать http://www.microsoft.com/downloads/details.aspx. Утилита robocopy.exe включена в состав Windows Server 2008, Windows 7 по-умолчанию. Robocop
(Описание robocopy на русском, примеры использования robocopy).

Эта утилита работает быстро! Использование утилиты многопоточного копирования оформим в виде командного файла olap_robocopy.bat (все bat-файлы приведены в конце статьи), вызов которого пропишем в компоненте "Execute Process Task":




Данный bat-файл гарантирует копирование папки с файлами многомерной базы данных с сервера процессинга в некоторую отдельную папку на эксплуатационном сервере. Надо сказать, что после вызова на исполнение robocopy.exe в силу особенности этой утилиты основной процесс ETL-пакета ничего не знает о статусе окончания ее исполнения, поэтому перед переходом к следующей задаче "Останов боевой OLAP-службы" можно вставить шаг циклической проверки наличия определенного файла в папке назначения.


После того, как успешно скопированы основные файлы, нужно остановить OLAP-службу (см. stop_OLAP_service.bat) на боевом сервере и подменить папку многомерной базы данных (см. olap_exchange.bat), а также скопировать оставшиеся файлы из корневого каталога OLAP.


Следует отметить, что для останова / запуска служб Windows учетная запись, от имени которой исполняется ETL-процесс, должна обладать соответствующими полномочиями. OLAP службы процессинга и эксплуатации могут размещаться на одной физической машине (OLAP-служба по-умолчанию и именованный экземпляр OLAP-службы), если подобное позволяет мощность серверного компьютера. Для такого случая пример именований OLAP-служб приведен ниже:




После всех манипуляций не забываем стартовать боевую OLAP-службу (см. start_OLAP_service.bat) и извещать пользователей по e-mail об успешном обновлении кубов.
Таким образом, время недоступности OLAP-кубов для пользователей составляет < 4 минут.


Ну и наконец, не стоит забывать об обработчике ошибок:



Надеюсь, данный материал поможет Вам в построении светлого будущего.


Энергия идеи   dvbi.ru                    Последнее изменение: 2017-10-15 16:21:39Z         Возрастная аудитория: 14-70         Комментариев:  0
Прикрепленные файлы:
  Многопоточное копирование файлов куба (olap_robocopy.bat)               Размер: 3.78 Кб            Скачали раз: 401
  Останов боевой OLAP-службы (stop_OLAP_service.bat)               Размер: .07 Кб            Скачали раз: 393
  Подмена файлов куба (olap_exchange.bat)               Размер: 1.36 Кб            Скачали раз: 403
  Запуск боевой OLAP-службы (start_OLAP_service.bat)               Размер: .07 Кб            Скачали раз: 390

Теги:   Примеры
Связанные статьи:

Пожалуйста, проголосуйте и ниже поставьте лайк:   rating
1 1 0


  Comments


Следующая статья:    Системный подход к классификации банковских продуктов
Предыдущая статья:  Требования к BI архитектору