|
|
|
Домашний проект, DWH
|
|||
|---|---|---|---|
|
#18+
Ares_ekbalexdr, "умение готовить SSIS" - эта какая-то абстракция. Все просто. Есть задачи и есть инструмент, в данном случае "промышленный" (в отличие от самописного) ETL инструмент. С помощью него задачи либо решаются, либо нет. Процентов на 90% (если не больше) задачи вполне решаются этим инструментом при затрате вполне вменяемых ресурсов. А для особо изощренных случаев существует возможность прицепить к SSIS необходимый хитро закрученный код. Дебажить решение - легко, поддерживать тоже не проблема, опять же в отличие от самописного. Конечно, нет в мире совершенства и в чем-то иные инструменты сильнее, а в чем-то хуже. Я это к чему? К тому, что если у Вас лежит душа к какому-либо иному инструменту, это не означает что остальные никуда не годятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2019, 18:37 |
|
||
|
Домашний проект, DWH
|
|||
|---|---|---|---|
|
#18+
Ares_ekb, Лучше стандартные накликанные пакеты, чем какая-то (возможно гениальная) фигня, которую никто не знает. Просто задайте себе вопрос, что будет с вашей нетленкой, когда вы поменяете место работы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2019, 20:30 |
|
||
|
Домашний проект, DWH
|
|||
|---|---|---|---|
|
#18+
SSIS всего-лишь (одна из многих) среда с какими-то workflow элементами (для обывателей), никто ведь не запрещает вроде-бы использовать SSIS (как внешнюю оболочку), а внутри писать нормальные скрипты на C# и т.д., т.е. по факту развивать тот-же вполне продаваемый на рынке навык. Заодно и админы довольны т.к. всё по их фэншую будет: логи, прозрачность, (+ если в C# ещё свои логи на SQL таблицы), и пакеты, и наблюдение за ними. инструментов полно рынке и SSIS тоже далеко не из самых развиваемых, хорошо хоть что кодовая часть вполне гибка - остальное стратегическая политика организации по софту и ответственность за принятые риски ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2019, 20:49 |
|
||
|
Домашний проект, DWH
|
|||
|---|---|---|---|
|
#18+
КритикЛучше стандартные накликанные пакеты, чем какая-то (возможно гениальная) фигня, которую никто не знаетЭти ручные ETL написаны на C#. Само приложение тоже написано на нём. Разработчик C# там будет 100% и разобраться в 100-300 строках кода на один пакет он сможет, особенно если этот код практически полностью состоит из присваиваний. А, вот, шансов, что на таком проекте будет человек с опытом SSIS очень мало. Даже если будет, то в мешанине из SSIS и C# разбираться сложнее, чем просто в C#. К тому же SSIS привязан к MS SQL, а код на C# никак не привязан к одному вендору СУБД. alexdrПроцентов на 90% (если не больше) задачи вполне решаются этим инструментом при затрате вполне вменяемых ресурсовНу, вот, конкретный пример - реестр предельных цен на лекарства . Его нужно разложить в нормализованную схему данных (вот, как это реализовано у меня). Например, тут в одной строке "раствор для внутрикожного введения 0.1 мл/доза, 30 доз, 3 мл - флаконы (5) - упаковки ячейковые контурные - пачки картонные" указано следующее: 1) лекарственная форма: раствор для внутрикожного введения 2) дозировка: 0.1 3) ед. изм. дозировки: мл/доза 4) альтернативная мера лек. формы: 30 5) альтернативная ед. изм. лек формы: доз 6) мера лек. формы: 3 7) ед. изм. лек формы: мл 8) упаковки: 9.1а) номер: 1 9.1б) вид: флаконы (с признаком первичная) 9.1в) кол-во: 5 9.2а) номер: 2 9.2б) вид: упаковки ячейковые контурные (с признаком промежуточная) 9.3а) номер: 3 9.3б) вид: пачки картонные (с признаком вторичная) Естественно, что парсинг таких строк в любом случае будет писаться на C#, в том числе при использовании SSIS. Тут сложность в том, что одна строка раскладывается в несколько таблиц: 1) лекарственные средства 2) упаковки лекарственных средств 3) виды упаковок 4) единицы измерения со следующей логикой: если такой ед. измерения (или вида упаковок) ещё нет, то добавляем её, а если есть, то ссылаемся на существующую. И так для всех справочников. Мы реализовали эту процедуру парсинга на C#, встроили в SSIS пакет. Процедура должна возвращать объект с несколькими полями, в том числе со вложенным списком упаковок? И потом этот объект будет раскладываться по таблицам? Такое вообще возможно в SSIS? Я честно такое никогда не делал на SSIS, по-моему это жесть. Я могу ошибаться, но такая строка выглядит гораздо понятней и сопровождать её проще: Код: c# 1. Или что-нибудь подобное для заполнения таблицы с упаковками Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Но это только начало. Если мы для каждой ед. измерения (вида упаковок и т.п.) отдельным SELECT-запросом будем проверять есть уже такая запись в справочнике или её нужно добавить, то это будет работать очень медленно. В коде я легко реализую кеширование справочников при первом обращении к ним, причём, это повторно используемый код, который пишется один раз. Сложнее история с основной таблицей с лекарственными средствами. В исходном реестре нет первичного ключа, нет даты добавления/изменения записи, там просто помойка с полностью дублирующимися записями. Причём нельзя при каждом импорте полностью очищать таблицу и загружать в неё с нуля реестр. Загрузка должна быть инкрементальной. Для этого для каждой строки реестра вычисляет хеш по основным полям (суррогатный первичный ключ). При импорте данных мы проверяем есть ли уже в базе запись с таким хешем. Причём, делать это нужно одним запросом для всех импортируемых записей, чтобы работало быстро. Теоретически эту логику работы со справочниками, с кешированием можно нарисовать на диаграмме. Но это придется рисовать на каждой диаграмме, а у меня это реализовано один раз в базовом классе, и человек, который пишет процедуру просто задаёт один параметр: использовать кеширование или нет. vikkivа внутри писать нормальные скрипты на C# и т.д.SSIS для этого не удобен. Проще сразу писать нормальное приложение, а не делать мешанину из диаграмм и кода. Проще сразу в коде написать, что это поле равно этому полю (одна строка кода), чем накликивать этот мапинг на диаграмме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2019, 06:42 |
|
||
|
Домашний проект, DWH
|
|||
|---|---|---|---|
|
#18+
alexdrесть инструмент, в данном случае "промышленный" (в отличие от самописного) ETL инструментЭто не корректное сравнение. SSIS - это универсальный инструмент для описания ETL процедур. А у меня самописный не инструмент, а конкретные процедуры. Корректнее сравнивать: 1) что удобней использовать для описания ETL процедур: SSIS или язык программирования общего назначения типа C#? 2) что проще сопровождать: SSIS-диаграммы вперемешку с C# или просто C# код? SSIS не даёт каких-то существенных преимуществ. Вещи типа "возьми данные отсюда", "присвой значение этого поля этому полю", "сохрани данные сюда" занимают одну строку кода. Более сложные вещи типа "посмотри есть ли уже такая запись в справочнике, если есть, то используй её, иначе создай новую" - это всё ещё одна строка кода, а на SSIS-диаграмме - это уже целая история. Хотя, можно писать кастомные процедуры для SSIS, но это сложнее, чем просто написать метод в коде. Если бы можно было обходиться только диаграммами, наверное SSIS был бы удобнее. И то, не факт, нужно открывать много окон, куда-то кликать. Ещё всё это плохо работает с системами управления версиями. Привязано к одному вендору. Но когда нужно всё это ещё интегрировать с кусками на C#, то зачем вообще этот SSIS? Только лишние усложнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2019, 07:08 |
|
||
|
Домашний проект, DWH
|
|||
|---|---|---|---|
|
#18+
Ares_ekb, Если честно, выглядит так, что ты прочитал туториал по Asp.net Core (я даже догадываюсь какой) и пытаешься блеснуть этими знаниями. Хотя я не сказал что код прям гениален. ИМХО, делать etl на Asp.net - полный бред ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 22:36 |
|
||
|
Домашний проект, DWH
|
|||
|---|---|---|---|
|
#18+
T87Ares_ekb, Если честно, выглядит так, что ты прочитал туториал по Asp.net Core (я даже догадываюсь какой) и пытаешься блеснуть этими знаниями. Хотя я не сказал что код прям гениален. ИМХО, делать etl на Asp.net - полный бред Уточню. Я не имею в виду C# в принципе, а только конкретную технологию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2019, 22:44 |
|
||
|
Домашний проект, DWH
|
|||
|---|---|---|---|
|
#18+
T87, причем тут вообще ASP.NET? На нем в этом проекте только пользовательский интерфейс, который с ETL никак не связан. Более того, интерфейс (и WinForms, и ASP.NET) там генерятся автоматически, поэтому на ASP.NET там не написано ни одной строки. ETL - это маленький кусочек этого приложения. Сами процедуры можно запускать как угодно, они написаны просто на C# без использования вообще каких-либо фреймвоков. Даже к EntityFramework не привязаны. Потому что UI там сделан на DevExpress XAF, который не поддерживает .NET Core и соответственно для работы с базой используется EF. А API сделано под .NET Core и соответственно используется EF Core. Поэтому схема данных и мапинги абстрагированы и от EF, и от EF Core, и тем более от XPO (который обычно используется с DevExpress XAF). Это просто "плоские" классы. Конкретно в этой демке ETL процедуры запускаются тремя способами: 1) из пользовательского интерфейса (импорт/экспорт товарных накладных в XML формате) 2) из консольного приложения (импорт реестров лекарств) 3) через API (импорт/экспорт тех же товарных накладных и т.п.) Этот проект я делал в качестве демки для одной фирмы, поэтому в ней нет ещё одного варианта запуска ETL (который есть в других проектах): 4) запуск на сервере по расписанию через службы реализующие IHostedService (работать эти службы могут в разных контейнерах - IIS или в качестве обычной Windows-службы. У одного из клиентов удобнее всего было использовать IIS, потому что для этого не нужны права администратора на сервере, достаточно скопировать службу по FTP) Ни один из этих вариантов вообще никакого отношения к ASP.NET Core не имеет. Поэтому в чём претензия я не понимаю. Тем более, что 100% пунктов против SSIS, которые я привел раньше даже не упоминают ASP.NET Core и вообще про другое. Я правда чувствую, что мне сейчас напишут, что варианты 1-3 не имеют отношения к ETL :) Потому что тру ETL пишутся только с использованием ETL инструментов (типа SSIS) и запускаются только по расписанию на сервере. На мой взгляд разницы вообще никакой: откуда приходят данные, куда уходят и как всё это запускается. Код там везде один и тот же. Это ещё один довод в пользу того, что ETL проще сразу делать на C#. Справедливости ради, если в компании есть отдел или человек, который занимается исключительно базами данных и ETL и не имеет никакого отношения к разработке, то возможно есть смысл использовать SSIS. Наверное проще обучить аналитиков SSIS, чем нанимать C# разработчиков. Лично я так делать не стал бы. Задачи этого отдела возможно немного упрощаются, но в целом всё усложняется: процедуры мапинга данных будут размазаны по разным подсистемам, будут дублироваться. Например, те же товарные накладные могут попадать в систему откуда угодно (через UI, через API, загружаться пакетно по расписанию) и выгружаться могут куда и как угодно. В этом случае у нас и в приложении будет мапинг накладных из XML в нашу схему, и в SSIS будет дублироваться тот же самый мапинг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2019, 06:18 |
|
||
|
|

start [/forum/topic.php?fid=49&msg=39832549&tid=1857556]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
150ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 16ms |
| total: | 259ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...