Replacing SSIS Packages and ETL programs with .NET Console Applications (C# .NET)?












3















I want to know Stack overflow members thoughts on below scenario based on their experience and understanding.



We get 20-30 millions of records as input (input is usually csv or xls files and can be uploaded to DB if that helps) and we need to process those records and generate different files, which include output files and error files. So, base on some business logic those records are moved to output or error files.



Currently the process in place use SSIS packages and some ETL tool to perform that task. Those pkgs and ETL tool itself takes 5 to 15 min to process, depending upon the input size.



There are number of inputs and number of SSIS packages and ETL programs for them.



We want to replace those SSIS pkgs and ETL programs with some .NET application.
We are concerned about the speed and performance of those .net applications, as usually the I/O is slow in .net.



Or is there any better way to deal with this.










share|improve this question


















  • 2





    The question contains a lot of mistakes, fallacies and myths. IO slow in .NET? Really? Slow IO is caused by bad code, bad queries, and bad schemas, not because it's .NET. Why do you want to move away from SSIS? Do you think you can replicate the same functionality? Including monitoring and logging? Including stream processing? Why do you think a console application will be better? What are the actual requirements ?

    – Panagiotis Kanavos
    Oct 6 '17 at 14:42


















3















I want to know Stack overflow members thoughts on below scenario based on their experience and understanding.



We get 20-30 millions of records as input (input is usually csv or xls files and can be uploaded to DB if that helps) and we need to process those records and generate different files, which include output files and error files. So, base on some business logic those records are moved to output or error files.



Currently the process in place use SSIS packages and some ETL tool to perform that task. Those pkgs and ETL tool itself takes 5 to 15 min to process, depending upon the input size.



There are number of inputs and number of SSIS packages and ETL programs for them.



We want to replace those SSIS pkgs and ETL programs with some .NET application.
We are concerned about the speed and performance of those .net applications, as usually the I/O is slow in .net.



Or is there any better way to deal with this.










share|improve this question


















  • 2





    The question contains a lot of mistakes, fallacies and myths. IO slow in .NET? Really? Slow IO is caused by bad code, bad queries, and bad schemas, not because it's .NET. Why do you want to move away from SSIS? Do you think you can replicate the same functionality? Including monitoring and logging? Including stream processing? Why do you think a console application will be better? What are the actual requirements ?

    – Panagiotis Kanavos
    Oct 6 '17 at 14:42
















3












3








3








I want to know Stack overflow members thoughts on below scenario based on their experience and understanding.



We get 20-30 millions of records as input (input is usually csv or xls files and can be uploaded to DB if that helps) and we need to process those records and generate different files, which include output files and error files. So, base on some business logic those records are moved to output or error files.



Currently the process in place use SSIS packages and some ETL tool to perform that task. Those pkgs and ETL tool itself takes 5 to 15 min to process, depending upon the input size.



There are number of inputs and number of SSIS packages and ETL programs for them.



We want to replace those SSIS pkgs and ETL programs with some .NET application.
We are concerned about the speed and performance of those .net applications, as usually the I/O is slow in .net.



Or is there any better way to deal with this.










share|improve this question














I want to know Stack overflow members thoughts on below scenario based on their experience and understanding.



We get 20-30 millions of records as input (input is usually csv or xls files and can be uploaded to DB if that helps) and we need to process those records and generate different files, which include output files and error files. So, base on some business logic those records are moved to output or error files.



Currently the process in place use SSIS packages and some ETL tool to perform that task. Those pkgs and ETL tool itself takes 5 to 15 min to process, depending upon the input size.



There are number of inputs and number of SSIS packages and ETL programs for them.



We want to replace those SSIS pkgs and ETL programs with some .NET application.
We are concerned about the speed and performance of those .net applications, as usually the I/O is slow in .net.



Or is there any better way to deal with this.







c# sql-server performance ssis etl






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Oct 6 '17 at 13:44









narendra bagdwalnarendra bagdwal

306




306








  • 2





    The question contains a lot of mistakes, fallacies and myths. IO slow in .NET? Really? Slow IO is caused by bad code, bad queries, and bad schemas, not because it's .NET. Why do you want to move away from SSIS? Do you think you can replicate the same functionality? Including monitoring and logging? Including stream processing? Why do you think a console application will be better? What are the actual requirements ?

    – Panagiotis Kanavos
    Oct 6 '17 at 14:42
















  • 2





    The question contains a lot of mistakes, fallacies and myths. IO slow in .NET? Really? Slow IO is caused by bad code, bad queries, and bad schemas, not because it's .NET. Why do you want to move away from SSIS? Do you think you can replicate the same functionality? Including monitoring and logging? Including stream processing? Why do you think a console application will be better? What are the actual requirements ?

    – Panagiotis Kanavos
    Oct 6 '17 at 14:42










2




2





The question contains a lot of mistakes, fallacies and myths. IO slow in .NET? Really? Slow IO is caused by bad code, bad queries, and bad schemas, not because it's .NET. Why do you want to move away from SSIS? Do you think you can replicate the same functionality? Including monitoring and logging? Including stream processing? Why do you think a console application will be better? What are the actual requirements ?

– Panagiotis Kanavos
Oct 6 '17 at 14:42







The question contains a lot of mistakes, fallacies and myths. IO slow in .NET? Really? Slow IO is caused by bad code, bad queries, and bad schemas, not because it's .NET. Why do you want to move away from SSIS? Do you think you can replicate the same functionality? Including monitoring and logging? Including stream processing? Why do you think a console application will be better? What are the actual requirements ?

– Panagiotis Kanavos
Oct 6 '17 at 14:42














3 Answers
3






active

oldest

votes


















2














We have replaced our simplest SSIS packages with a .NET console application that imports data with BULKINSERT. The performance is satisfactorily fast.






share|improve this answer



















  • 1





    You don't need a console application to run BULK INSERT. That's what the bcp tool does. As for speed, it should be the same when you don't have any transformations - SSIS, BULK INSERT and bcp do the same job in this case

    – Panagiotis Kanavos
    Oct 6 '17 at 14:38













  • True, but putting it in a console app allows you to coordinate it with other logic.

    – Tab Alleman
    Oct 6 '17 at 15:30



















0














I personally prefer to use SSIS because of the ease of explaining what the package does to new people.



Every time I use C# components/tasks, I almost always own the package forever and my goal is to hand developed work off so I can work on new tasks.



That might be because I am in the BI environment and we hire database developers and report writers predominately and the .net people we usually have speciallize in web development.



I really taught myself c# in order to pull web services that returned XML and JSON. I found it easier to process as the data was paged and extremely complex by converting to c# classes vs trying to use SSIS XML Source. But now that I have the basics, I am able to learn quickly how to solve more and more problems.



All this being said, I like the envelope of SSIS and use script tasks and components when they are necessary, quicker, and sometimes even when they are more simple.






share|improve this answer































    -1














    Although my answer is a little late, we faced the same issue in the past: we wanted to go away from SSIS and do the whole ETL with C# code. But we also wanted to have some kind of Data Flow like in SSIS. I would recommend you the nuget package ETLBox (https://etlbox.net) which basically is a C# replacement for SSIS.



    E.g., you would have to do the following to load data from a CSV into a database:



    Defina a CSV source



    CSVSource sourceOrderData = new CSVSource("demodata.csv");


    Optionally define a row transformation:



    RowTransformation<string, Order> rowTrans = new RowTransformation<string, Order>(
    row => new Order(row)
    );


    Define the destination



    DBDestination<Order> dest = new DBDestination<Order>("dbo.OrderTable");


    Link your ETL data pipeline together



    sourceOrderData.LinkTo(rowTrans);
    rowTrans.LinkTo(dest);


    Finally start the dataflow (async) and wait for all data to be loaded.



    source.Execute();
    dest.Wait();





    share|improve this answer

























      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f46607200%2freplacing-ssis-packages-and-etl-programs-with-net-console-applications-c-net%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      3 Answers
      3






      active

      oldest

      votes








      3 Answers
      3






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      2














      We have replaced our simplest SSIS packages with a .NET console application that imports data with BULKINSERT. The performance is satisfactorily fast.






      share|improve this answer



















      • 1





        You don't need a console application to run BULK INSERT. That's what the bcp tool does. As for speed, it should be the same when you don't have any transformations - SSIS, BULK INSERT and bcp do the same job in this case

        – Panagiotis Kanavos
        Oct 6 '17 at 14:38













      • True, but putting it in a console app allows you to coordinate it with other logic.

        – Tab Alleman
        Oct 6 '17 at 15:30
















      2














      We have replaced our simplest SSIS packages with a .NET console application that imports data with BULKINSERT. The performance is satisfactorily fast.






      share|improve this answer



















      • 1





        You don't need a console application to run BULK INSERT. That's what the bcp tool does. As for speed, it should be the same when you don't have any transformations - SSIS, BULK INSERT and bcp do the same job in this case

        – Panagiotis Kanavos
        Oct 6 '17 at 14:38













      • True, but putting it in a console app allows you to coordinate it with other logic.

        – Tab Alleman
        Oct 6 '17 at 15:30














      2












      2








      2







      We have replaced our simplest SSIS packages with a .NET console application that imports data with BULKINSERT. The performance is satisfactorily fast.






      share|improve this answer













      We have replaced our simplest SSIS packages with a .NET console application that imports data with BULKINSERT. The performance is satisfactorily fast.







      share|improve this answer












      share|improve this answer



      share|improve this answer










      answered Oct 6 '17 at 13:55









      Tab AllemanTab Alleman

      26.4k52440




      26.4k52440








      • 1





        You don't need a console application to run BULK INSERT. That's what the bcp tool does. As for speed, it should be the same when you don't have any transformations - SSIS, BULK INSERT and bcp do the same job in this case

        – Panagiotis Kanavos
        Oct 6 '17 at 14:38













      • True, but putting it in a console app allows you to coordinate it with other logic.

        – Tab Alleman
        Oct 6 '17 at 15:30














      • 1





        You don't need a console application to run BULK INSERT. That's what the bcp tool does. As for speed, it should be the same when you don't have any transformations - SSIS, BULK INSERT and bcp do the same job in this case

        – Panagiotis Kanavos
        Oct 6 '17 at 14:38













      • True, but putting it in a console app allows you to coordinate it with other logic.

        – Tab Alleman
        Oct 6 '17 at 15:30








      1




      1





      You don't need a console application to run BULK INSERT. That's what the bcp tool does. As for speed, it should be the same when you don't have any transformations - SSIS, BULK INSERT and bcp do the same job in this case

      – Panagiotis Kanavos
      Oct 6 '17 at 14:38







      You don't need a console application to run BULK INSERT. That's what the bcp tool does. As for speed, it should be the same when you don't have any transformations - SSIS, BULK INSERT and bcp do the same job in this case

      – Panagiotis Kanavos
      Oct 6 '17 at 14:38















      True, but putting it in a console app allows you to coordinate it with other logic.

      – Tab Alleman
      Oct 6 '17 at 15:30





      True, but putting it in a console app allows you to coordinate it with other logic.

      – Tab Alleman
      Oct 6 '17 at 15:30













      0














      I personally prefer to use SSIS because of the ease of explaining what the package does to new people.



      Every time I use C# components/tasks, I almost always own the package forever and my goal is to hand developed work off so I can work on new tasks.



      That might be because I am in the BI environment and we hire database developers and report writers predominately and the .net people we usually have speciallize in web development.



      I really taught myself c# in order to pull web services that returned XML and JSON. I found it easier to process as the data was paged and extremely complex by converting to c# classes vs trying to use SSIS XML Source. But now that I have the basics, I am able to learn quickly how to solve more and more problems.



      All this being said, I like the envelope of SSIS and use script tasks and components when they are necessary, quicker, and sometimes even when they are more simple.






      share|improve this answer




























        0














        I personally prefer to use SSIS because of the ease of explaining what the package does to new people.



        Every time I use C# components/tasks, I almost always own the package forever and my goal is to hand developed work off so I can work on new tasks.



        That might be because I am in the BI environment and we hire database developers and report writers predominately and the .net people we usually have speciallize in web development.



        I really taught myself c# in order to pull web services that returned XML and JSON. I found it easier to process as the data was paged and extremely complex by converting to c# classes vs trying to use SSIS XML Source. But now that I have the basics, I am able to learn quickly how to solve more and more problems.



        All this being said, I like the envelope of SSIS and use script tasks and components when they are necessary, quicker, and sometimes even when they are more simple.






        share|improve this answer


























          0












          0








          0







          I personally prefer to use SSIS because of the ease of explaining what the package does to new people.



          Every time I use C# components/tasks, I almost always own the package forever and my goal is to hand developed work off so I can work on new tasks.



          That might be because I am in the BI environment and we hire database developers and report writers predominately and the .net people we usually have speciallize in web development.



          I really taught myself c# in order to pull web services that returned XML and JSON. I found it easier to process as the data was paged and extremely complex by converting to c# classes vs trying to use SSIS XML Source. But now that I have the basics, I am able to learn quickly how to solve more and more problems.



          All this being said, I like the envelope of SSIS and use script tasks and components when they are necessary, quicker, and sometimes even when they are more simple.






          share|improve this answer













          I personally prefer to use SSIS because of the ease of explaining what the package does to new people.



          Every time I use C# components/tasks, I almost always own the package forever and my goal is to hand developed work off so I can work on new tasks.



          That might be because I am in the BI environment and we hire database developers and report writers predominately and the .net people we usually have speciallize in web development.



          I really taught myself c# in order to pull web services that returned XML and JSON. I found it easier to process as the data was paged and extremely complex by converting to c# classes vs trying to use SSIS XML Source. But now that I have the basics, I am able to learn quickly how to solve more and more problems.



          All this being said, I like the envelope of SSIS and use script tasks and components when they are necessary, quicker, and sometimes even when they are more simple.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Oct 6 '17 at 14:16









          KeithLKeithL

          2,3651614




          2,3651614























              -1














              Although my answer is a little late, we faced the same issue in the past: we wanted to go away from SSIS and do the whole ETL with C# code. But we also wanted to have some kind of Data Flow like in SSIS. I would recommend you the nuget package ETLBox (https://etlbox.net) which basically is a C# replacement for SSIS.



              E.g., you would have to do the following to load data from a CSV into a database:



              Defina a CSV source



              CSVSource sourceOrderData = new CSVSource("demodata.csv");


              Optionally define a row transformation:



              RowTransformation<string, Order> rowTrans = new RowTransformation<string, Order>(
              row => new Order(row)
              );


              Define the destination



              DBDestination<Order> dest = new DBDestination<Order>("dbo.OrderTable");


              Link your ETL data pipeline together



              sourceOrderData.LinkTo(rowTrans);
              rowTrans.LinkTo(dest);


              Finally start the dataflow (async) and wait for all data to be loaded.



              source.Execute();
              dest.Wait();





              share|improve this answer






























                -1














                Although my answer is a little late, we faced the same issue in the past: we wanted to go away from SSIS and do the whole ETL with C# code. But we also wanted to have some kind of Data Flow like in SSIS. I would recommend you the nuget package ETLBox (https://etlbox.net) which basically is a C# replacement for SSIS.



                E.g., you would have to do the following to load data from a CSV into a database:



                Defina a CSV source



                CSVSource sourceOrderData = new CSVSource("demodata.csv");


                Optionally define a row transformation:



                RowTransformation<string, Order> rowTrans = new RowTransformation<string, Order>(
                row => new Order(row)
                );


                Define the destination



                DBDestination<Order> dest = new DBDestination<Order>("dbo.OrderTable");


                Link your ETL data pipeline together



                sourceOrderData.LinkTo(rowTrans);
                rowTrans.LinkTo(dest);


                Finally start the dataflow (async) and wait for all data to be loaded.



                source.Execute();
                dest.Wait();





                share|improve this answer




























                  -1












                  -1








                  -1







                  Although my answer is a little late, we faced the same issue in the past: we wanted to go away from SSIS and do the whole ETL with C# code. But we also wanted to have some kind of Data Flow like in SSIS. I would recommend you the nuget package ETLBox (https://etlbox.net) which basically is a C# replacement for SSIS.



                  E.g., you would have to do the following to load data from a CSV into a database:



                  Defina a CSV source



                  CSVSource sourceOrderData = new CSVSource("demodata.csv");


                  Optionally define a row transformation:



                  RowTransformation<string, Order> rowTrans = new RowTransformation<string, Order>(
                  row => new Order(row)
                  );


                  Define the destination



                  DBDestination<Order> dest = new DBDestination<Order>("dbo.OrderTable");


                  Link your ETL data pipeline together



                  sourceOrderData.LinkTo(rowTrans);
                  rowTrans.LinkTo(dest);


                  Finally start the dataflow (async) and wait for all data to be loaded.



                  source.Execute();
                  dest.Wait();





                  share|improve this answer















                  Although my answer is a little late, we faced the same issue in the past: we wanted to go away from SSIS and do the whole ETL with C# code. But we also wanted to have some kind of Data Flow like in SSIS. I would recommend you the nuget package ETLBox (https://etlbox.net) which basically is a C# replacement for SSIS.



                  E.g., you would have to do the following to load data from a CSV into a database:



                  Defina a CSV source



                  CSVSource sourceOrderData = new CSVSource("demodata.csv");


                  Optionally define a row transformation:



                  RowTransformation<string, Order> rowTrans = new RowTransformation<string, Order>(
                  row => new Order(row)
                  );


                  Define the destination



                  DBDestination<Order> dest = new DBDestination<Order>("dbo.OrderTable");


                  Link your ETL data pipeline together



                  sourceOrderData.LinkTo(rowTrans);
                  rowTrans.LinkTo(dest);


                  Finally start the dataflow (async) and wait for all data to be loaded.



                  source.Execute();
                  dest.Wait();






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Jan 19 at 20:46

























                  answered Jan 17 at 21:51









                  AndreasAndreas

                  545




                  545






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f46607200%2freplacing-ssis-packages-and-etl-programs-with-net-console-applications-c-net%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      Liquibase includeAll doesn't find base path

                      How to use setInterval in EJS file?

                      Petrus Granier-Deferre