Использование в LOAD ... Resident нескольких таблиц (Qlikview & Qlik Sense)

Автор Иван, 04 сентября 2015, 12:06:22

« назад - далее »

Иван

Цитата: kvv от 04 сентября  2015, 03:59:08  
1. Без join-ов нельзя работать и в SQL.

kvv, то что Join нужны, я не спорю. А вот как без WHERE Работать? Извращаться с JOIN?

kvv

Любой BI-инструмент "Поглотитель информации": SAP BO BI, IBM Cognos, QlikView и т.д.
Более того, в SAP BO BI, IBM Cognos нет таких возможностей по преобразованию данных как в QlikView.

Иван

#17
Цитата: kvv от 04 сентября  2015, 04:17:47  
Любой BI-инструмент "Поглотитель информации": SAP BO BI, IBM Cognos, QlikView и т.д.
Более того, в SAP BO BI, IBM Cognos нет таких возможностей по преобразованию данных как в QlikView.

Других инструментов не видел, к сожалению. Но увидел недостаточную гибкость инструментария QlikView. Как минимум при сложных проектах необходимо задуматься о полноценном ETL-инструментарии. Или хотя бы в PL/SQL. Хотя на больших объемах данных, как показала практика, для PL/SQL нужны "прямые руки".

Стоит, правда, оговориться, что все зависит от источников данных. Если источники не требуют массового использования условий WHERE, а достаточно JOIN, то наверное, QlikView будет более чем предостаточно. Но в моем случае - ERP система явно требует большего  :(

Иван

#18
Рылся, рылся и наткнулся на QlikView Expressor (Data confidence and rapid time to value with a metadata intelligence solution for QlikView):
http://global.qlik.com/ru/explore/products/qlikview/expressor

Кто-нибудь с этим продуктом работал? Может он решает проблему сложных преобразований SQL запросов для QlikView? Написано на одном из форумов, что этот Expressor может конкурировать с Informatica. Правда, что ли?

Пока что качаю - как попробую - расскажу)

Иван

#19
В качестве вводной об инструменте QlikView Expressor Desktop 5 картинок:










И в дополнение, видос: ! No longer available


Иван

#21
Вообщем, в QlikView вместо вложенных Where In () подзапросов, необходимо использовать функции Exists и Lookup.

Конечный вариант рабочего примера:
Tbl1:
LOAD * INLINE [
    field1, field2
    Ivan, 29
    Victor, 32
    Marina, 23
    Anna, 26
];

NoConcatenate
Tbl2:
LOAD * INLINE [
    field3, field4
    Ivan, m
    Marina, w
];

NoConcatenate
Tbl3:
LOAD field1, field2,
lookup('field3','field3',field1,'Tbl2') as field3, //эквивалентно Resident Tbl1, Tbl2
lookup('field4','field3',field1,'Tbl2') as field4  //эквивалентно Resident Tbl1, Tbl2
Resident Tbl1
Where Exists(field3,field1) and lookup('field4','field3',field1,'Tbl2')='m' //эквивалентно Tbl1.field1=Tbl2.field3
;

DROP Tables Tbl1, Tbl2;


Поля field1 и field3 одинаковы (понятно, что два поля в таблице не нужны, но для обучающего примера, думаю, пусть будет).

Резюме: чтобы эффективно строить ETL процесс в QlikView, необходимо знать помимо SQL все внутренние функции QlikView, т.к. многие подходы SQL не применимы в QlikView. Но при этом, несмотря на такие обходы, сложность ETL-процесса возрастает по сравнению с другими стандартными инструментами построения ETL-процесса (к примеру, такие как SAS или же PL/SQL). Но, возможно, из-за технологии in-memory скорость обработки данных будет выше (нужно тестировать, чтобы окончательно это подтвердить). Это уже дополнительная задачка =)

Изначальный запрос, который хотелось реализовать (нерабочий вариант):
Tbl1:
LOAD * Inline[
field1, field2
Ivan, 29
Victor, 32
Marina, 23
Anna, 26
];

Tbl2:
LOAD * Inline[
field3, field4
Ivan, m
Marina, w
];

NoConcatenate
Tbl3:
LOAD Tbl1.field1, Tbl1.field2,
Tbl2.field3, Tbl2.field4
Resident Tbl1, Tbl2
Where Tbl1.field1=Tbl2.field3 AND Tbl2.field4='m';

Иван

По поводу QlikView Expressor Desktop - инструмент хороший, но вряд ли облегчит разработку ETL-процесса, если только Вы не знаете этот инструмент. Возможности скрыты хорошие. Иллюстрация потока обработки данных:

Иван

Дополнительная информация по загрузке данных и различных вспомогательных функциях тут:
https://community.qlik.com/docs/DOC-5698

Иван

#24
Вообщем, на QlikView Expressor не нужно "смотреть" (скоро прекратит свое существование), лучше смотреть на http://www.alteryx.com/

Но судя по тому, что мой ETL-процесс изначально был построен на PL/SQL, это было сделано не случайно. Возникает желание посоветовать использовать тот же PL/SQL, но у него есть свои слабые стороны, а именно:
1) На большом объеме данных PL/SQL может медленно работать;
2) PL/SQL нагружает базу данных;

Также можно использовать бесплатные ETL-инструменты (сам не использовал, но думаю, что может пригодится кому-то):
http://www.predictiveanalyticstoday.com/top-free-extract-transform-load-etl-software/

Возможности PL/SQL для создания ETL-процесса:
1) Advanced PL/SQL and Oracle ETL - PowerPoint PPT Presentation
2) Advanced PL/SQL and Oracle ETL
3) Kimball R., Ross M. The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling

ВНИМАНИЕ: Остерегайтесь вот таких маркетинговых статей про QlikView, которые сразу же отбрасывают и традиционные ETL-процессы и хранилища данных QlikView: консолидация разрозненных источников данных. Если у Вас не будет сложных преобразований данных, то можете использовать с легкостью QlikView. В других случаях, обязательно, проведите перед проектом этап "Оценки необходимости дополнительного ETL-инструментария".

Иван

#25
Базовые элементы Alterix:
1. Alterix Designer - In Out


2. Alterix Designer - Preparation


3. Alterix Designer - Join


4. Alterix Designer - Transform



Дополнительные вкладки с элементами:
5. Alterix Designer - Address


6. Alterix Designer - Behavior Analysis


7. Alterix Designer - Calgary


8. Alterix Designer - Connectors


9. Alterix Designer - Data Investigation


10. Alterix Designer - Demographic Analysis


11. Alterix Designer - Developer


12. Alterix Designer - Documentation


13. Alterix Designer - In-Database


14. Alterix Designer - Interface


15. Alterix Designer - Laboratory


16. Alterix Designer - Parse


17. Alterix Designer - Reporting


18. Alterix Designer - Spatial

Яндекс.Метрика