делать простой поток данных в стиле SSIS в C # без каких-либо внешних библиотек - PullRequest
1 голос
/ 07 января 2012

Я ищу пример простого потока данных в C # без использования SSIS или внешних библиотек, таких как Rhino-ETL (это очень хорошая библиотека, кстати).

Требования:

  • Один произвольный источник данных ADO .Net
  • Одно произвольное назначение данных ADO .Net
  • Не требует одновременной загрузки всего набора данных в память, чтобы он мог обрабатывать произвольно большие наборы данных. Это должно было бы полагаться на некоторый буфер или «возвращение доходности», как это делает Rhino ETL.
  • Используется массовая вставка (то есть SqlBulkCopy)
  • Минимальное преобразование. Нет поиска, нет объединения слиянием.
  • Многопоточность не требуется, если однопоточность может выполнять эту работу.

Другой способ сформулировать вопрос ... как Rhino ETL делает это, но без всех абстракций и унаследованных классов, и без словаря кряка? Я хотел бы видеть это в простом неабстрактном классе.

И еще одно перефразирование вопроса: я ищу фундаментальный пример получения потока данных запроса «select» и массовой вставки его по 10 000 или 50 000 записей за раз в место назначения без загрузки весь результат в память, которая потенциально может превышать доступную оперативную память.

Ответы [ 2 ]

1 голос
/ 19 января 2012

Боюсь, далеко не полный ответ.

Вы можете «пролистать» результаты произвольного запроса выбора в .Net, используя один или несколько методов, описанных здесь.

http://msdn.microsoft.com/en-us/library/ff650700.aspx

Это должно позволить вам упорядочить данные и избежать проблем с оперативной памятью.

В качестве альтернативы - если ваши существующие пакеты служб SSIS достаточно просты / похожи, то, возможно, стоит взглянуть на автоматическое создание пакетов служб SSIS на основе шаблона. Например, я поддерживаю более 100 пакетов, которые автоматически создаются небольшим приложением c # с использованием API EzAPI для SSIS.

1 голос
/ 13 января 2012

Похоже, вы хотите узнать, как работает программа etl, чтобы расширить свои знания в области программирования.Rhino ETL - это проект с открытым исходным кодом, поэтому вы можете получить его здесь:

https://github.com/ayende/rhino-etl

и посмотреть, как именно они это делают.Существуют также другие пакеты ETL с открытым исходным кодом, поэтому вы можете увидеть, как они работают по-другому.Например, источник talend можно найти по адресу:

http://www.talend.com/resources/source-code.php

Конечно, если вы пытаетесь написать собственный код для коммерческого использования, вы не захотите видеть исходный коддругие, так что вам нужно будет придумать свой процесс самостоятельно.

Надеюсь, это поможет вам!

...