Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Организация OLAP куба средствами Python

Anna | 15.06.2014 | нет комментариев
Добрый день, уважаемые читатели.
Сегодня я расскажу вам о том, как дозволено возвести простенькую систему обзора данных на Python. В этом мне помогут framework cubes и пакет cubesviewer.
Сubes представляет собой framework’ом для работы с многомерными данными с поддержкой Python. Помимо того он включает в себя OLAP HTTP-сервер для упрощенной разработки приложений отчетности и всеобщего просмотра данных.
Сubesviewer представляет собой web-интерфейс для работы с вышеуказанным сервером.

Установка и настройка cubes

Для начала нужно установить библиотеки, нужные для работы пакета:

pip install pytz python-dateutil jsonschema
pip install sqlalchemy flask

Дальше устанавливаем сам пакет cubes:

pip install cubes

Как показала практика, отличнее применять версию (1.0alpha2) из нынешнего репозитория.

Доп настройки под windows

Если вы планируете трудиться под Windows нужно в файле {PYTHON_DIR}Libsite-packagesdateutiltz.py заменить 40 строку:

return myfunc(*args, **kwargs).encode()

на

return myfunc(*args, **kwargs)

После этого, вне зависимости от платформы на которой вы трудитесь, необходимо добавить дальнейший fix для правильной работы json-парсера. Вносить его нужно в {PYTHON_DIR}Libsite-packagescubes-1.0alpha-py2.7.eggcubesmetadata.py начиная с 90 строки:

elif len(parts.scheme) == 1 and os.path.isdir(source):
     # TODO: same hack as in _json_from_url
     return read_model_metadata_bundle(source)

Изложение настройки куба и процесс его разворачивания

Для примера возьмем OLAP-куб, тот, что идет в поставке с cubes. Он находится в папке examples/hello_world(ее дозволено взять с репозитория).
Крупнейший интерес для нас представляют 2 файла:

  • slicer.ini — файл настроек http сервера нашего куба
  • model.json — файл с изложение модели куба

Остановимся на них поподробнее. Начнем с файла slicer.ini, тот, что может включать следующие разделы:

  • [workspace] – конфигурация рабочего места
  • [server] — параметры сервера (адрес, порт и тд.)
  • [models] — список моделей для загрузки
  • [datastore] либо [store] – параметры хранилища данных
  • [translations] — настройки локализации для модели.

Выходит разберем из нашего тестового файла видно, что сервер будет располагаться на локальной машине и будет трудиться по 5000 порту. В качестве хранилища будет применяться локальная база SQLite под наименованием data.sqlite.
Подробнее о конфигурировании сервера дозволено прочитать в документации.
Также из файла видно, что изложение модели нашего куба находиться в файле model.json, изложение конструкции которого мы теперь и займемся.
Файл изложения модели, это json-файл, тот, что включает следующие логические разделы:

  • name – имя модели
  • label – метка
  • description – изложение модели
  • locale – локаль для модели (если задана локализация)
  • cubes – список метаданных кубов
  • dimensions – список метаданных измерений
  • public_dimensions – список доступных измерений. По умолчанию все измерения доступны.

Для нас представляют интерес разделы cubes и dimensions, т.к. все остальные опциональны.
Элемент списка dimensions, содержит следующие метаданные:

Ключ Изложение
name идентификатор измерения
label Имя измерения видное пользователю
description изложение измерения для пользователей
levels Список ярусов измерений
hierarchies Список иерархий
default_hierarchy_name Идентификатор иерархии

Элемент списка cubes, содержит следующие метаданные:

Ключ Изложение
name идентификатор измерения
label Имя измерения видное пользователю
description изложение измерения для пользователей
dimensions список имен измерений заданных выше
measures список мер
aggregates список функций агрегации мер
mappings задание разметки логических и физических признаков

Исходя из выше описанного, дозволено осознать, что у нас в модели в будет 2 измерения (item, year). У измерения “item” 3 яруса измерений:

  • category. Отображаемое имя «Category», поля «category», «category_label»
  • subcategory. Отображаемое имя «Sub-category», поля «subcategory», «subcategory_label»
  • line_item. Отображаемое имя «Line Item», поле «line_item»

В качестве меры в нашем кубе будет выступать поле «amount», для которой выполняются функции суммы и подсчета кол-ва строк.
Подробнее о разметке модели куба дозволено почитать в документации
Позже того, как мы разобрались с настройками, нужно сделать нашу тестовую базу. Для того, Дабы это сделать, нужно запустить скрипт prepare_data.py:

python prepare_data.py

Сейчас осталось только запустить наш тестовый сервер с кубом, тот, что именуется slicer:

slicer serve slicer.ini

Позже этого дозволено проверить работоспособность нашего куба. Для этого в строке браузера дозволено ввести:
localhost:5000/cube/irbd_balance/aggregate?drilldown=year
В результат мы получим json-объект с итогом агрегации наших данных. Подробнее о формате результата сервера дозволено почитать здесь.

Установка cubesviewer

Когда мы настроили наш куб, дозволено приступить к установке сubesviewer. Для этого нужно скопироватьрепозиторий себе на диск:

git clone https://github.com/nonsleepr/cubesviewer.git

А потом легко переместить содержимое папки /src в необходимый место.
Нужно подметить, что сubesviewer является Django-приложением, следственно для его работы нужен Django (не выше версии 1.4), а также пакеты requests и django-piston. Т.к. данная версия Django теснее устарела, то выше я привел ссылку откуда дозволено взять сubesviewer для версии Django 1.6.
Установка ее немножко отличается от оригинала тем, что в файл конфигурации сервера slicer.ini в раздел[server] необходимо добавить строку allow_cors_origin: http://localhost:8000
Позже этого нужно настроить приложение в файле {CUBESVIEWER_DIR}/web/cvapp/settings.py. Указав ему настройки БД, адрес OLAP сервера (переменная CUBESVIEWER_CUBES_URL) и адрес просмоторщика (CUBESVIEWER_BACKEND_URL)
Осталось внести маленький fix в dajno-piston
Сейчас дозволено синхронизировать наше приложение с БД. Для этого из {CUBESVIEWER_DIR}/web/cvappнеобходимо исполнить:

python manage.py syncdb

Осталось запустить локальный сервер Django

python manage.py runserver

Сейчас осталось зайти на указанный в CUBESVIEWER_BACKEND_URL адрес через браузер. И наслаждаться готовым итогом.

Завершение

Для иллюстрации работы я взял самый примитивный пример. Нужно подметить что для производственных планов cubes дозволено развернуть скажем на apache либо uswgi. Ну а подключить к нему сubesviewer с поддержкой этой статьи не составит труда.
Если тема будет увлекательна сообществу, то я раскрою ее в одной из грядущих статей.

 Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB