Replacing SSIS Packages and ETL programs with .NET Console Applications (C# .NET)?
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
add a comment |
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
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
add a comment |
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
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
c# sql-server performance ssis etl
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
add a comment |
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
add a comment |
3 Answers
3
active
oldest
votes
We have replaced our simplest SSIS packages with a .NET console application that imports data with BULKINSERT. The performance is satisfactorily fast.
1
You don't need a console application to run BULK INSERT. That's what thebcp
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
add a comment |
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.
add a comment |
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();
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
We have replaced our simplest SSIS packages with a .NET console application that imports data with BULKINSERT. The performance is satisfactorily fast.
1
You don't need a console application to run BULK INSERT. That's what thebcp
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
add a comment |
We have replaced our simplest SSIS packages with a .NET console application that imports data with BULKINSERT. The performance is satisfactorily fast.
1
You don't need a console application to run BULK INSERT. That's what thebcp
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
add a comment |
We have replaced our simplest SSIS packages with a .NET console application that imports data with BULKINSERT. The performance is satisfactorily fast.
We have replaced our simplest SSIS packages with a .NET console application that imports data with BULKINSERT. The performance is satisfactorily fast.
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 thebcp
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
add a comment |
1
You don't need a console application to run BULK INSERT. That's what thebcp
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
add a comment |
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.
add a comment |
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.
add a comment |
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.
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.
answered Oct 6 '17 at 14:16
KeithLKeithL
2,3651614
2,3651614
add a comment |
add a comment |
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();
add a comment |
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();
add a comment |
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();
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();
edited Jan 19 at 20:46
answered Jan 17 at 21:51
AndreasAndreas
545
545
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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