Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Изучаю Informatica - вопросы для понимания  [new]
psamv
Member

Откуда:
Сообщений: 26
Всем хорошего дня! (если этот кончается - переносится на следующий )

Т.к. я изучаю Informatica PowerCenter, не на все вопросы удаётся найти ответы самому. Для тех, у кого есть опыт, мои вопросы не сложны, а меня бы продвинули вперёд. Поэтому, большая просьба, если кто поможет мне в этом разобраться:

1) Суть Информатики в том, чтобы собрать данные из разных источников в нужном виде в нужном месте (целевой таблице) максимально разгрузив при этом сервер БД, с возможностью делать такой сбор автоматически регулярно по расписанию.
Это как я понимаю её назначение. Правильно?

2) SQ > Properties > Sql Query и Lookup > ... > Lookup Sql Override - запросы, помещённые туда, выполняются на сервере БД (дают нагрузку на базу). И, в общем, чем меньше их использовать, тем больше расчётов выполняется на стороне Информатики, для базы это хорошо.

3) Но, например, подзапросы, где во FROM более 1 таблицы не описать с помощью Lookup-ов, без использования Override ? Это верно?

Например (пример из головы):
SELECT a.categiry_name, a.name, d.legs_count 
  FROM animals a, dogs d 
 WHERE a.subcat_id = d.category_id
Даже такой запрос не опишешь одними Lookup-ами. А если связанных таблиц больше, то тем более - нужно целиком ложить в Sql Override ?
Я по-разному пробовал. Если делать Lookup сначала на первую таблицу animals, возьмутся все её строки. Второй lookup по условию связи (в Condition) "отфильтрует" выбранные строки второй таблицы (dogs) но все строки первой тоже берутся. Как-то ограничить их у меня не получилось.

Всё верно? Нельзя ведь цепочкой Lookup-ов описать запрос из нескольких таблиц, чтобы в итоге получить отфильтрованные данные без использования Override (как они ограничиваются в запросе, когда таблицы, связываясь, ограничивают общее кол-во строк) ?

4) Перед Преобразованием Join лучше делать сортировку и для Master и для Detail, верно? (выигрыш в производительности).

5) Ломает ли Lookup, Join сортировку, если идёт после неё?
1 сен 20, 14:59    [22190400]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
Anonymous_20
Member

Откуда:
Сообщений: 16
1) ошибочное мнение. Информатика умеет не только с бд работать. Иногда даже используют для трансформации данных.

2) в интернете поищи тесты. Итог для oracle, при одинаковых серверах, oracle будет шустрее выполнять схожие операции.

4) спорное заключение. Сервер инфы может дорого заплатить ресурсами за сортировку. Все надо просчитывать от объёма данных. Просто джойнер и джойнер с сортировщиками работают по-разному. И джойнер с сортировщиками больше потребляет ресурсов.
1 сен 20, 17:18    [22190471]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
psamv
Member

Откуда:
Сообщений: 26
Anonymous_20, благодарю за ответ.

1) Правда я писал о том что данные она берёт из разных источников и что доставляет до цели в нужном виде (ну, т.е. как раз Преобразования).

2) Вы правы - база всегда быстрее (при всех равных), но одна из целей Инф-ки - её разгрузить.

4) Ну, тут вы правы ) (хотя пришло в голову, что без сортировки он кэширует, а это может быть в любом случае дольше, тогда наверное сортировка, какая бы ни была - ускорит обработку)

По поводу Lookup-ов выяснилось - в чистом виде они подходят для запросов к одной таблице. Если несколько таблиц в связке - приходится ложить в Override, иначе не получается ограничить выборку. Хотя, когда несколько таблиц связаны, но они не фильтруют друг друга, кол-во строк не меняется - можно сделать цепочкой lookup-ов.

И (не знаю как у кого) - я долго мучался c этим Override, запрос не работал - Invalid и всё )
Оказалось - нужно давать псевдонимы выбираемым полям через as. Иначе (Informatica 10.2) - Invalid Override.

Ну вот, в итоге, наверное, почти все мои вопросы выяснились.

Если хотите - ещё пообсуждаем Информатику в этом топике.
Если из знающих людей, кто-нибудь даст полезный совет - буду благодарен.

Сообщение было отредактировано: 2 сен 20, 09:29
2 сен 20, 09:23    [22190681]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
Master_Detail
Member

Откуда:
Сообщений: 70
1) Как таковой цели разгрузить БД не стоит. Надо понимать и помнить, что в общем случае источниками данными могут быть разные БД, файлы, веб-сервисы и еще что-то. А теперь представьте, что тоже самое вы захотите сделать на условном PLSQL. Сколько потребуется ресурсов, чтобы настроить все эти гетерогенные сервисы? Informatica этот вопрос снимает. Даже гетерогенный сервис Oracle-MSSQL достаточно геморройное занятие.

2) Запросы к БД в любом случае будут выполняться на сервере БД Как-то может быть иначе? Просто, если вы напишете запрос ручками в SQL Override, то выполнится он, не напишете - выполнится тот, который напишет за вас информатика

3) В общем верно. Но такие вещи можно делать через SQ+Joiner, но не значит, что можно=всегда нужно

4) Есть такое мнение. Но по моему не очень большому опыту не было ситуации, когда отрисовал маппинг без Sorter-ов и работало долго, а добавил Sorter - все полетело... Чаще всего больше времени требуется не вычитывание из БД, чем на сами трансформации. Но, если данных миллионы, вероятно, профит должен быть

5) Вопрос интересный.. Насколько я понимаю, так быть не должно. Но вот что будет происходить, если на вход в Joiner приходит два отсортированных потока по разным полям (к примеру, зачем так делать - не знаю), то что будет на выходе (если это Normal Join) - это бы проверить. Предполагаю, что сортировка будет сохраняться у потока, где проставлена галочка Master на портах (ведь она активна и для Normal Join тоже)

А для Lookup - а он почему должен ломать сортировку? Это ведь по сути левое соединение

По поводу обсуждения - мне было бы очень интересно какие-то вопросы обсуждать.

Сообщение было отредактировано: 3 сен 20, 08:04
3 сен 20, 08:06    [22191299]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
psamv
Member

Откуда:
Сообщений: 26
Master..., спасибо за ответ. Обычно форумы используются как вопросы-ответы. Но по Информатике нехватает материала (особенно углублённого) не то что на русском, даже на английском. Я бы хотел обсуждать, делиться наблюдениями и докапываться, было бы здорово и полезно.
В этой теме или другой - не важно.

Ответы на ваши:

1) Акцент на сбор данных из разношёрстных источников - понятно. Действительно, видимо это её главное назначение.

2) Похоже вы правы. Сначала я думал - может на отдельном сервере БД, но Трансформации выбирают из базы актуальные данные, и не могут выполняться в др месте (отдельно от них). Но разгрузку на базу всё равно наверное дают, благодаря тому что делят большой тяжёлый запрос на более мелкие лёгкие части. Верно ?

3) SQ+Joiner - это User Defined Join в SQ. Теперь у меня понимание лучше сложилось. Кроме условий связи есть ещё условия фильтрации, но их наверное в Source Filter в SQ, отдельно надо писать.

4) Видимо из можно ставить во всех случаях - хуже не будет (кроме "захламления" маппинга сортировками )

Над остальным - надо подумать )

И вот сегодняшнее наблюдение:
Информатика заставляет явно select-ить в Override поля для связи (на вкладке Condition). Так и не понял зачем. Если строит запрос и отправляет на сервер, почему не достаточно, что условия связи и так уже указаны.
3 сен 20, 10:02    [22191371]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
Master_Detail
Member

Откуда:
Сообщений: 70
автор
Но разгрузку на базу всё равно наверное дают, благодаря тому что делят большой тяжёлый запрос на более мелкие лёгкие части. Верно ?

Ну на этот вопрос нет однозначного ответа. Информатика выполнит только те запросы, которые вы отрисуете. Например, есть у нас один большой запрос с тяжелыми таблицами, но структура такова, что есть партиция, которую вы выбираете, либо супер селективный индекс и вы передаете селективный параметр в фильтра. План запроса построен хорошо - сначала читается маленькая таблица, а в к ней джойнится гиганская без необходимости ее фулскана. Отрисовали в тупую на информатику:
- вычитываете мелкую таблицу
- вычитываете большую таблицу
- где-то там после после наложения фильтров через трансформацию Filter фильтруете потоки
- и только потом джойните между собой два потока

Вопрос - какая гарантия, что работать это будет лучше и быстрее запроса и меньше грузить будет БД? :) С большой таблицы сначала вычитываться 100500 строк, а только потом будет делаться джоин. И делать это будет не оракловый оптимизатор (если мы об оракле), у которого есть статистика, используя которую он строит план запроса, а просто некий код, который возьмет считанные и положенные в кэш-файлы.

автор
SQ+Joiner - это User Defined Join в SQ. Теперь у меня понимание лучше сложилось. Кроме условий связи есть ещё условия фильтрации, но их наверное в Source Filter в SQ, отдельно надо писать.

Нет, я имел ввиду SQ + отдельный компонент Joiner. Условия фильтрации можно задавать как вам угодно - прямой запрос в SQL Override, User Defined Join в SQ, трансформация Filter. Выбирайте любой, какой подходит в каждой ситуации.
Вообще, никто не обязывает вас в одном SQ использовать запрос только к одной таблице. Вы можете сделать как в БД - записать туда гигантский запрос с множеством таблиц, и он выполнится точно так же в БД (с поправкой на параметры сессии и NLS, которые могут отличаться), как вы делали бы это ручками.

автор
Информатика заставляет явно select-ить в Override поля для связи (на вкладке Condition). Так и не понял зачем. Если строит запрос и отправляет на сервер, почему не достаточно, что условия связи и так уже указаны.

Не до конца понятно, о чем вы. Но селектить нужно все, что вы хотите достать из БД. В данном контексте поле для связи ничем не отличается от поля, которое в select листе. Каждый запрос выполняется отдельно, результат складывается в кэш, а то только после этого данные вяжутся. Как же два несвязанных массива свяжутся, если в них нет для этого ключей? Это в БД они рядышком лежат, в для информатики это просто два неких массива, не более того..

Сообщение было отредактировано: 3 сен 20, 12:37
3 сен 20, 12:40    [22191481]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
.Евгений
Member

Откуда:
Сообщений: 574
Вообще данная тема относится скорее к пониманию принципа и механизмов работы средств ETL и СУБД. Информатика, в зависимости от настроек, может комбинировать первый и второй подход(посредством ELT), принципиально не отличаясь от других средств ETL.

Когда вы работаете с ETL средством, то вы работаете с потоком данных (представьте себе курсор и буфер строк для него). Между прочим, на самом деле СУБД тоже работают с потоком, но скрывают это.

Трансформации внутри ETL делятся на два типа (если не вдаваться в тонкости). Первые могут выполняться построчно и синхронно с потоком (например, новая колонка как сумма двух других), вторые требуют предварительно вычитки всех данных в буфер (например, сортировка). Так вот, эффективность ETL проявляется именно в первом типе трансформаций, тогда как вторые, напротив, тормозят поток и заставляют формировать новый буфер данных, поэтому их крайне желательно избегать.

Как известно, существует три основных типа соединений. В потоке может быть эффективно реализован Merge, с оговорками - NL. Именно так они и реализуются в ETL: обычное соединение требует предварительной сортировки, потому что оно Merge. NL делается посредством лукапов (как правило 1:1, чтобы не переформировывать буфер данных).
3 сен 20, 13:20    [22191521]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
psamv
Member

Откуда:
Сообщений: 26
Master_Detail
Ну на этот вопрос нет однозначного ответа...
...
Не до конца понятно, о чем вы. Но селектить нужно все, что вы хотите достать из БД. В данном контексте поле для связи ничем не отличается от поля, которое в select листе. Каждый запрос выполняется отдельно, результат складывается в кэш, а то только после этого данные вяжутся...

Вы точно поняли. Именно это я и имел в виду...

Если эти системы ETL так не оптимальны, избыточно кэшируют и перекладывают данные, сначала вычитывают, потом соединяют..
Или как Евгений сказал, эффективны только те, которые не нарушают поток (Евгений, спасибо, я всё прочитал, важно, но некоторые вещи нужно мне загуглить).
И глядя на всё вместе, возникает вопрос, чем они хороши? Это всё заходит в тупик. Должна быть ценность выше, чем только объединение принципиально разных источников, если у кого их много.

А если все данные берутся только из Oracle, то есть ли смысл строить маппинг из разных частей, когда, как Вы писали, можно всё сгрузить в Sql Query в SQ.

Я тоже нашёл этот способ, но мне говорили, что так делать нельзя.

мнение:
Что делая так - я отправляю сложный запрос на базу, а это для неё очень большая нагрузка, если таких маппингов одновременно будет несколько.
Идея средств ETL разрботки, чтобы вычитать "лёгкими" селектами (лёгкость высчитывается опытным путём) необходимые данные в информатику и уже на сервере информатики производить операции с этими данными.
А sq, по возможности нужно делать максимально простым. Вычитать строки, а все преобразования - в информатике - в этом её и суть.
Хороший маппинг работает быстро, не нагружает базу, по возможности максимально лаконичный.

Это мнение тоже выглядит логично. Потому что если Информатика производит многие вычисления на своей стороне, работая с извлечёнными данными, то разгружает базу. Тогда в ней видится уже большой смысл.

Сообщение было отредактировано: 3 сен 20, 17:24
3 сен 20, 17:24    [22191655]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
psamv
Member

Откуда:
Сообщений: 26
Евгений, в связи с потоками, ещё не понятно вот что:

Lookup, хоть и активная трансформация, но разные потоки, имеющие эти лукапы потом нормально сходятся в одном EXP, без всякого Joiner-а.

Но из lookup-а может выйти больше строк, чем в него вошло или меньше, или даже не выйти ни одной, т.е. он, как понимаю, может изменить кол-во записей, но почему-то с объединением потоков потом проблем нет.

Если в потоке есть аггрегация, то чтобы соединить его с другими - уже необходим Join, а вроде бы в чём принципиальная разница?
3 сен 20, 17:41    [22191671]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
.Евгений
Member

Откуда:
Сообщений: 574
psamv
Евгений, в связи с потоками, ещё не понятно вот что:

Lookup, хоть и активная трансформация, но разные потоки, имеющие эти лукапы потом нормально сходятся в одном EXP, без всякого Joiner-а.

Но из lookup-а может выйти больше строк, чем в него вошло или меньше, или даже не выйти ни одной, т.е. он, как понимаю, может изменить кол-во записей, но почему-то с объединением потоков потом проблем нет.

Лукап не нарушает имеющуюся сортировку.
psamv

И глядя на всё вместе, возникает вопрос, чем они хороши? Это всё заходит в тупик. Должна быть ценность выше, чем только объединение принципиально разных источников, если у кого их много.

ETL гораздо более специализированная вещь, чем СУБД. Из этого следуют ее преимущества и недостатки.
СУБД интерпретирует команды SQL и для типизации полей должен постоянно обращаться к метаданным, тогда как хост ETL выполняет скомпилированный код (C, C#, Java и т.п.) со статически типизированными полями.
СУБД должен поддерживать неопределенно большое количество своих и клиентских процессов и вынужден идти на многочисленные компромиссы по потребляемым ресурсам в ущерб производительности, ETL в этом практически не нуждается.
Стандартный режим вставки записей для ETL - пакетный, для SQL - обычный.
3 сен 20, 18:53    [22191709]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
Anonymous_20
Member

Откуда:
Сообщений: 16
psamv
Евгений, в связи с потоками, ещё не понятно вот что:

Lookup, хоть и активная трансформация, но разные потоки, имеющие эти лукапы потом нормально сходятся в одном EXP, без всякого Joiner-а.

Но из lookup-а может выйти больше строк, чем в него вошло или меньше, или даже не выйти ни одной, т.е. он, как понимаю, может изменить кол-во записей, но почему-то с объединением потоков потом проблем нет.

Если в потоке есть аггрегация, то чтобы соединить его с другими - уже необходим Join, а вроде бы в чём принципиальная разница?


Тут вы запутались! Lookup по умолчанию пассивная трансформация, и внимательно смотрите на настройки, там стоит какую запись Lookup отдаст. Чтобы Lookup стал активен, то надо при создании его объявить активным, и тогда уже не чего не сойдется. А еще Lookup бывает, динамический, кэшируемы и не кэшируемым и т.д. Если поток развести и пустить через активную трансформацию, то соединить только через joiner сможете.
В инфе часть трансформаций могут быть как пассивными так и активные. Советую в этой части разобраться. Обычно на собеседованиях один из первых вопросов.

Сообщение было отредактировано: 3 сен 20, 21:22
3 сен 20, 21:23    [22191778]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
Master_Detail
Member

Откуда:
Сообщений: 70
мнение
Что делая так - я отправляю сложный запрос на базу, а это для неё очень большая нагрузка, если таких маппингов одновременно будет несколько.
Идея средств ETL разработки, чтобы вычитать "лёгкими" селектами (лёгкость высчитывается опытным путём) необходимые данные в информатику и уже на сервере информатики производить операции с этими данными.
А sq, по возможности нужно делать максимально простым. Вычитать строки, а все преобразования - в информатике - в этом её и суть.
Хороший маппинг работает быстро, не нагружает базу, по возможности максимально лаконичный.


Вполне разумно. Но на практике оно бывает по-разному. Оно как бы как - если данные забираются с прода какой-нибудь нагруженной АБИС, то грузить ее на надо. Но чаще всего есть какой-нибудь stand-by с онлайн-репликацией, и его уже можно подгрузить. А порой нужно, чтобы процесс загрузки работал быстро, бизнес ждет данные. А отрисовать его тоже нужно было еще вчера, а руководству уже доложено, что он уже месяц как работает.. А источник - большой скрипт, его надо разобрать, разделить на SQ, 10 штук их отрисовать, день потратить. А скрипт работает быстро, секунды. Разработчик репку почесал, весь скрипт в один SQ записал, порты забил, отрисовал все до таргета, запустил - пару секунд и данные в таргете. Успех :)

Сообщение было отредактировано: 4 сен 20, 08:55
4 сен 20, 08:59    [22191895]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
psamv
Member

Откуда:
Сообщений: 26
Anonymous_20:
Lookup по умолчанию пассивная трансформация, и внимательно смотрите на настройки, там стоит какую запись Lookup отдаст. Чтобы Lookup стал активен, то надо при создании его объявить активным, и тогда уже не чего не сойдется.
Ну... вероятно вы правы, и звучит вполне логично, но я не смог найти этих настроек не при создании (активный/пассивный), ни в Properties (чтобы там было написано какую запись он отдаёт).

Сейчас немного мучаюсь с тем, что помещая подзапрос в Lookup Override - берутся избыточные данные как будто и работает как-то очень долго по сравнению с оригиналом в PL/SQL Developer-е.

Основной запрос у меня вида:

SELECT
    <а здесь много подселектов, которые берут нужные поля - они все связаны с "t" по ID>
FROM <здесь одна таблица> t
WHERE...

Некоторые поля берутся большими подселектами из многих таблиц. Одна из которых связана с внешней по ID.

Смотрел другие маппинги и там вроде бы так же - подзапросы в Override помещаются целиком, кроме условия связи, которое прописывается на вкладке Condition (и, очевидно, подставляется в запрос автоматически).

Возможно такие лукапы и должны работать много дольше обычного запроса, т.к они сначала вычитывают, потом связывают, а соответственно и фильтруют строки по условию связи. Но это как-то не сходится у меня в голове с "быстрым маппингом" )

К тому же подобные подзапросы, как понимаю, больше никуда и не засунешь - только в Lookup. А там - так.
И кажется он у меня выбирает много лишнего, как будто не видит условие связи.
Вроде я правильно настраиваю, но вдруг что-то не знаю.
Пример к сожалению только такой - идея. Понимаю, что по такому описанию вряд ли точно что-то скажешь.

SQL-трансформация, как альтернатива lookup, у меня пока не заработала правильно (не выбирает данные), хоть вроде кажется, что правильно её делаю.

А так - спасибо всем большое за ответы ) - узнаю очень много полезного.
4 сен 20, 10:08    [22191932]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
Anonymous_20
Member

Откуда:
Сообщений: 16
psamv,

При создание Lookup обратите внимание на нижнию строчку. Там можно поставить галочку напротив фразы Return all values on Multple Match. Это опция как раз и объявляет, что трансформация будет активная. После создания сменить активную на пассивную ( или наоборот) не возможно. Только путём пересоздания. Если у вас проблемы с sql трансформаций. Поищите на marketplace.informatica.com примеры, и попробуйте проанализировать, что у вас не так.
Еще одна подсказка.
Допустим имеем 2 таблицы, в каждой по 1 000 000 записей. Вычитывание каждой таблицы занимает 2 часа. Необходимо соединить записи этих таблиц через информатику. Если использовать только joiner то загрузка будет работать такая около 4 часов. А если joiner+ сортировщик то около 2 часов.
4 сен 20, 10:50    [22191963]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
psamv
Member

Откуда:
Сообщений: 26
Anonymous_20,
Спасибо! и попробую оживить SQL-трансформацию по вашему совету.
4 сен 20, 13:56    [22192119]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34263
Блог
Anonymous_20
2) в интернете поищи тесты. Итог для oracle, при одинаковых серверах, oracle будет шустрее выполнять схожие операции


А тут, хоть статейка довольно старая
https://www.dis-group.ru/files/news/bnpparibas.pdf
там есть такой момент

автор
3) Перенос расчетной нагрузки с СУБД на ETL.
Операции соединения (join) больших таблиц, применение сложных фильтров и расчет в цикле были
перенесены из Oracle в Informatica, что позволило на
порядок ускорить процедуры загрузки хранилища


Врут?
4 сен 20, 14:24    [22192152]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
Anonymous_20
Member

Откуда:
Сообщений: 16
Критик,

Тест который я видел. При одинаковых условия сравнивали информатику и бд сначала кто быстрее выполнит соединение 2 таблиц. Второй тест кто быстрее выполнит сортировку. Результат думаю очевиден, что на стороне бд быстрее такие операции выполнятся. И чем больше данных, тем больше отрыв бд.

Отвечая на Ваш вопрос про статью, думаю, что не врут. Я говорю только про соединение и сортировку, а в статье указаны например и расчеты. Одно смущает надпись про циклы, в информатике powercentr нет циклов. Опять же циклы я конечно делал на информатике, но вещь это довольно не простая ( быстро через java можно).
5 сен 20, 11:17    [22192445]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
.Евгений
Member

Откуда:
Сообщений: 574
Anonymous_20
При одинаковых условия сравнивали информатику и бд сначала кто быстрее выполнит соединение 2 таблиц. Второй тест кто быстрее выполнит сортировку.
По описанию это выглядит далеко от реальной жизни. Стандартные задачи ETL включают в себя, во-первых, Insert или Merge, а во-вторых, выполняются многопоточно, в параллели. Редкая СУБД не задумается, если ее одновременно нагрузить парой десятков больших соединений/сортировок и модификацией таблиц.
Anonymous_20
Одно смущает надпись про циклы, в информатике powercentr нет циклов. Опять же циклы я конечно делал на информатике, но вещь это довольно не простая ( быстро через java можно).
Например, пара воркфлоу запускают друг друга через pmcmd.
5 сен 20, 12:41    [22192478]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
Master_Detail
Member

Откуда:
Сообщений: 70
Anonymous_20


При создание Lookup обратите внимание на нижнию строчку. Там можно поставить галочку напротив фразы Return all values on Multple Match. Это опция как раз и объявляет, что трансформация будет активная

Значит ли это, что лукап в данном случае будет работать как подзапрос в БД? То есть, что таблица или запрос не будет вычитывать все данные полностью, а передавать в качестве параметров поля из основного потока для возврата каждой записи?

Почему спрашиваю. Недавно была сложность, переписывал большой скрипт на IPC. Все бы ничего, но там было 100500 подзапросов, в каждый из которых передавались поля в where. Таблицы, из которых подзапросы брали данные, были гигантские, однако имели очень селективные индексы и при передаче извне условий фильтрации работали достаточно шустро. Переписал все это на IPC и получилось, что сначала все вычитывается, потом только вяжется с основным потоком. Решил через SQL-трансформацию, она как раз и работает как нужно - возвращает записи для каждой записи из основного потока. Но, как я понимаю, так мог бы работать и лукап.. Или нет?
7 сен 20, 08:58    [22192805]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
psamv
Member

Откуда:
Сообщений: 26
Евгений, теперь понятно хоть за счёт чего ETL быстрый - развитая многопоточность.

Master_Detail

Значит ли это, что лукап в данном случае будет работать как подзапрос в БД? То есть, что таблица или запрос не будет вычитывать все данные полностью, а передавать в качестве параметров поля из основного потока для возврата каждой записи?
...
Решил через SQL-трансформацию, она как раз и работает как нужно - возвращает записи для каждой записи из основного потока. Но, как я понимаю, так мог бы работать и лукап.. Или нет?
Мне тоже интересно было бы знать.

Пока понял: что активный лукап или пассивный - он всё равно вычитывает полностью таблицу, а потом только связывает. Разница в том, что пассивный в любом случае берёт одну строку (1:1 к основной выборки, даже если выбрать их он мог бы больше), а активный берёт все выбираемые им строки и поэтому потом его нужно соединять через Join или Union с другими потоками.
Активные - меняют кол-во строк.

2) Сложилось впечатление, что лукапы - ущербный инструмент (из-за того что сначала берут все данные, а только потом ограничивают условиями связи), SQL-преобразование - выходит лучше.
А лукапы, как мне показалось, эффективны только для подзапросов к одной таблице, и желательно, где данные 1:1 с основной выборкой, чтобы можно было использовать их в пассивном режиме. И желательно где не нужно вставлять в Override.

Но лукапами ведь часто пользуются, а он сейчас кажется мне почти бессмысленным - зря грузящим базу. Кажется, что всегда лучше SQL-трансформация. Почему при такой избыточности это популярный инструмент? Чем они хороши?

3) Наверное лукапы лучше заменять по возможности SQ (Sql Query в SQ), т.к. там условие связи сразу в запросе и должно работать, мне кажется, намного быстрее.

Ну вот, такое у меня пока понимание новичка и доп. вопросы. Уверен, что много ошибочного.
7 сен 20, 13:12    [22192939]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
.Евгений
Member

Откуда:
Сообщений: 574
psamv
Евгений, теперь понятно хоть за счёт чего ETL быстрый - развитая многопоточность.
Пока понял: что активный лукап или пассивный - он всё равно вычитывает полностью таблицу

ETL как таковой не обязан содержать "развитую многопоточность". Но его задачи можно запускать практически независимо друг от друга, тогда как СУБД имеет сложные процедуры согласования доступа к общим ресурсам (памяти, данным и др.)

Лукап в средствах ETL имеет минимум 2 варианта кеширования: это буферизация всех возможных значений из источника в локальной памяти и обращение к источнику для каждой строки.

Сообщение было отредактировано: 7 сен 20, 14:02
7 сен 20, 14:04    [22192989]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
Anonymous_20
Member

Откуда:
Сообщений: 16
psamv,
Выше я уже про разные виды lookup писал. SQL трансформация тоже имеет хитрые механизмы. Например по умолчанию вы через нее получите только 10000 записей максимум. Чтобы больше получить ее надо настраивать. Lookup тоже надо настраивать. Не хотите кешируемый lookup уберите галочку на закладке Properties, Lookup caching enabled.
К сожалению у меня не остались ссылки на сайты, которые давал прочитать новичкам, но в англоязычном сегменте интернета было как минимум 3 сайта с довольно неплохим описанием трансформаций и возможностями их. В крайнем случаи есть база знаний
search.informatica.com/KBHome/ . Есть неплохой хелп (F1 кнопка). Есть на крайний случай маркетплейс, часть wf там бесплатные и можно посмотреть разные приёмы, если в вашей организации их мало.
7 сен 20, 14:16    [22192996]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1273
Anonymous_20
psamv,
Выше я уже про разные виды lookup писал. SQL трансформация тоже имеет хитрые механизмы. Например по умолчанию вы через нее получите только 10000 записей максимум. Чтобы больше получить ее надо настраивать. Lookup тоже надо настраивать. Не хотите кешируемый lookup уберите галочку на закладке Properties, Lookup caching enabled.
К сожалению у меня не остались ссылки на сайты, которые давал прочитать новичкам, но в англоязычном сегменте интернета было как минимум 3 сайта с довольно неплохим описанием трансформаций и возможностями их. В крайнем случаи есть база знаний
search.informatica.com/KBHome/ . Есть неплохой хелп (F1 кнопка). Есть на крайний случай маркетплейс, часть wf там бесплатные и можно посмотреть разные приёмы, если в вашей организации их мало.


интересно
а вот воркфлоу как там смотреть ?
почему спрашиваю мне актуальна информатика
но у меня очень ограниченные права на ее
(т.е у меня права на 2 воркфлоу на суппорте
в один из которых я не давно добавлял одно поле и замучился пока победил)
и нет прав даже менять коннекшены самому (я пишу реквесты )
т.е могу я как-то посмотреть их не устанавливая примеры себе ?

ну или толковая книга (сайт) интересует
7 сен 20, 17:32    [22193150]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
psamv
Member

Откуда:
Сообщений: 26
Спасибо всем, полезная инфа.
Надо будет поискать так же на search.informatica.com, вот о чём вы писали, как будет время - центральный ресурс - конечно полезен.

1) Возвращаясь к лукапам. Пока не очень понятно чем они хороши и почему сделаны отдельным инструментом. Кажется, что их почти всегда можно заменить SQL-транс-ями и это будет выгодней.
Исключение может - совсем простенькие лукапы, без Override.

2) C SQL-трансформацией разобрался, но что-то не работает. В сессии настроил её Relation источник. Но в документации есть что-то о том что:
Connecting to Databases:
...
Static connection. Configure the connection object in the session. You must first create the connection object in Workflow Manager.
...
Делал её в Query mode, в пассивном режиме (строки 1:1), статический запрос с binding входящими портами.
Запрос внутри - рабочий, все имена и типы портов соответствуют, в сессии - правильный источник для неё.
Но из доки не понятно нужно ли ещё что-то кроме настроек сессии. Как будто создать отдельный объект для соединения в Workflow.
может это я упускаю. потому что для каждой входной строки она упорно берёт пустоту. И в целевую таблицу ложатся пустые строки.
9 сен 20, 11:40    [22194062]     Ответить | Цитировать Сообщить модератору
 Re: Изучаю Informatica - вопросы для понимания  [new]
.Евгений
Member

Откуда:
Сообщений: 574
psamv
Спасибо всем, полезная инфа.
Надо будет поискать так же на search.informatica.com, вот о чём вы писали, как будет время - центральный ресурс - конечно полезен.

1) Возвращаясь к лукапам. Пока не очень понятно чем они хороши и почему сделаны отдельным инструментом. Кажется, что их почти всегда можно заменить SQL-транс-ями и это будет выгодней.
Исключение может - совсем простенькие лукапы, без Override.
Соединение двух потоков данных требует их обоюдной сортировки. Лукап - нет (хотя кешированный неявно сортирует себя). В результате денормализация звезды или снежинки в одну "простыню" через соединения фактически невозможна.
9 сен 20, 12:19    [22194106]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / OLAP и DWH Ответить