Showing posts with label grouping. Show all posts
Showing posts with label grouping. Show all posts

Wednesday, March 21, 2012

Fuzzy Grouping: Any success with > 3 million records?

I have tried to process > 3 million Fuzzy grouping records on two different servers with no success. 3 mill works but anything above 4 mill doesn't. Some background:

We are trying to de-dup our customer table on: name (.5 min), address1 (.5 min), city (.5 min), state (exact). .8 overall record min score.

Output includes additional fields: customerid, sourceid, address2, country, phonenumber

Without SP1 installed I couldn't even get a few hundred thousand records to process

Two different servers - same problems. Note that SSIS and SQL Server are running locally on both

The higher end server has 4GB RAM, the other 2.5 GB RAM. Plenty of free disk space on both

SQL Server is configured to use 2 GB of RAM max

The page file is currently at 15GB

After running a number of test on both servers trying different batch sizes etc. the one thing I noticed is that it seems to always error out when SSIS takes over and starts chewing up all the available RAM. This happens after the index is created and SSIS starts "warming caches". On both servers SQL Server uses up about 1.6GB of RAM at this point while SSIS keeps taking over RAM until all physical RAM is used up.

Some questions:

Has anyone been able to process more then 3 million records and if so what is your hardware configuration?

Should we try running SSIS from a different server so it has access to the full amount of physical RAM? (so it doesn't have to fight for RAM with SQL Server)

Should we install Win 2003 Enterprise Server so we can add more RAM?

Any ideas why switching to the page file might be causing errors?

Thanks!!

Keith Doyle

It's not so much the number of records as the size of the records that may be the issue. What size of record are you matching?

Do you have any standard (non-fuzzy) lookups? What else is the package doing?

Has anyone been able to process more then 3 million records and if so what is your hardware configuration?|||

Thanks for the info Donald. I am still having problems and there appears to be another user from the following thread that is having the same issues (this is another thread I started):

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=412813&SiteID=1&mode=1.

I ask them to join this thread so we have all the info in one place. Below are my latest test results.

I decided to concentrate on getting this to work on one server at a time. Here is the detailed configuration of the server I am starting with:

Single P4 2.4 GHz CPU|||

I'll have someone investigate at this end and we'll get back to these threads. Thanks for the grat info.

One thing would be to try executing using DTExec outside the debug environment. Or try "Start without Debugging." I doubt this will solve the problem entirely, but it will reduce any effect of the IDE on the problem.

Donald

|||

All testing was done using DTExec. I even went back and tried removing all the "pass through" fields and that didn't help either.

Hopefully you are able to find something out - thanks!!

Keith

|||donald,

is it true that a 64 bit box would resolve this issue?|||

Indeed - 64-bit systems with sufficient memory available (physical or virtual) should not see these issues. I do expect that over the next few years we'll see 64-bit become the standard platform for data integration - but meanwhile I still want to fix this problem!

Donald

|||

Hi,

Fuzzy Grouping uses Fuzzy Lookup underneath, so the following comments apply to both.

FL/FG maintain multiple caches which use up memory in the client process, eg. DTExec.exe. These caches contain recently used portions of the Match Index and also the Reference Table. The caches reduce the number of queries that must be issued against the SQL Server. The Warm Caches phase pre-loads the caches by doing a sequential load of the Match Index/Reference Table instead of bringing over rows one-by-one, as needed (which results in more random access I/O). You should be able to control the size (in MB) of these caches by setting the MaxMemoryUsage property on the transform. If this property is not specified, then FL/FG will continue to consume memory until only a small % of physical memory is free; it should reduce its cache usage if physical memory drops below a threshold. One issue, is that both SQL Server and FL/FG contend for physical memory and it is possible that their caches will end up containing the same rows. One way to reduce this contention, is to set the min & max memory usage for SQL Server as well. This can be done as follows:

sp_configure 'show advanced options', 1

reconfigure

sp_configure 'max server memory', 768

reconfigure

sp_configure 'min server memory', 100

reconfigure

If you still see physical memory being used up after the DTExec.exe process has exited, this is likely because SQL Server is holding the memory. Unfortunately, sqlserver.exe does not fully report its memory usage in TaskMgr. You must issue the commands above to get it to release memory, short of restarting the SQL process or the machine.

Note that SP1 contained a fix to a major memory leak in FL/FG. It appears that there could still be memory leaks that we did not find, or the problem could be the contention with SQL Server for memory. Try setting the MaxMemoryUsage property and see if DTExec.exe memory usage levels off after running for a few minutes in the Process Input phase. If the memory usage continues to grow dramatically, we may need to work with you to isolate a new memory leak.

One more thing to try, would be to change the Exact Match join columns to be Fuzzy Match with MinSimilarity at the column level to be 1.0. FL/FG has a different code path for Exact Match columns, which could be the culprit.

A workaround, which isn't ideal for sure, would be to partition your input into smaller batches based upon an attribute such as State if you believe that it is unlikely that two records sharing the same value for State will be duplicates.

Please let us know if you still see problems after trying the above.

-Kris

|||

Hi - just ran another test with these changes:

SQL Server min memory = 100|||

Hi:

I'm the guy in the other thread that Keith mentioned. My scenario is almost the same i.e. Name and Address De-dup. I'm on

Win2003R2Enterprise,

SQL2005SPI Enterprise,

X64 (Single Proc 3.0 GHz HT, with 2 GB RAM). (Do you mean Itanium or X64, Donald?)

12 GB on two partitions to Paging.

My input data is already scrubbed, so my FG just has a basic Data Source, FG, and Destination. And all I have is a Client ID(pass thro), Name(Fuzzy), Address(Fuzzy). I cannot partition the data state-wise or any other way for business reasons. I also dont have any standard lookups.

I used an assembly and executed it from DTexecUI, so no debugger there.

I got past 1.5 million records once, but have had failures again later. I always manage to get past the "finding similar records" phase, "Post Execute" and "Cleanup".

Picking Canonical Records is where I get Buffer Manager errors. I also saw the spike in page faults that Keith mentioned, but didnt observe which phase it happened. During this "canonical" phase, my CPU use is very low as compared to before this phase. PF usage never crossed 2 GB. Available physical memory stayed at around 40000k.

I had an error on SP1 Install for SSIS (Message - Service Failed to Start). My SSIS Version is 9.0.2047, which seems ok. Does the install error mean anything? Does it make a difference who is the owner of SSIS service? I have Network as the owner by default, and the service does not even start up on boot. Gives timeout error. Will making it System owned help by reducing LSASS activity? Manually starting the service works.

I once also ran into tempdb growth issues, and pre-setting the file sizes to a big number (like 8 GB) seemed to help a bit.

This combination of low PF Usage, Low CPU and maxed out RAM seem to indicate that FG/FL is not swapping RAM/Paging efficiently. I will also try out the Memory Settings that Kris suggested.

Does indexing help at all? I saw all that stuff in MSDN on FTI pre-creation for FL, but dont know how to do that in FG, if at all it is possible.

Thanks, Donald, hope you nail this one!

|||

Have changed over to a two-server config. One runs SSIS and DTexecUI or DTexec, and the other runs the Source and Destination DB.

The DTEXECUI server seems to be fine, really, with over a GB of RAM free, and with hardly a GB of paging used. CPU Utilization stayed at around 50 % all through, which is expected for a HT proc.

The database server had a CPU util of hardly 5% all through, but page file kept growing(max of 2GB), and tempdb kept growing and went upto 50 GB almost, before my disk maxed out. This was immediately after the "Finding Similar Records" phase was 100% completed. I had hardly 40000K of Physical Memory left at this point ( From an initial value of almost 1.4 GB).

What exactly is the relation between the tempDB and the package? From Kris's post it sounds like the FG works in memory. If that is the case, why is my tempdb server disk getting maxed? And I assume this is related only to the destiation DB?

Rows Per batch and Max Insert Commit Size - how exactly does this work? Is it equivalent to partitioning the data i.e. is grouping carried out only within the batch? Books OnLine has nothing substantial about these things :-(

The strange part is that I got this to work on a single server with Client ID + Name + Address, but it has failed thrice on a two server setup.

Thanks a lot for your help.

Kar

|||

Hi,

I have observed another run, a little more carefully this time. I set a Rows per Batch of 100000 and a Commit Size of 200000. I ran on 1.5 million rows with just Client ID and address. The size of my input data table (Client ID, Name, Address) is around 0.4 GB.

DTExec and source DB were on server 1, which ran fine until about 50 % completion of "Finding Similar Records". Almost .6 GB of RAM free, and almost no network activity. "Finding .." was moving along at about 1 % point every 8 min. Page Fault Delta was almost nil. Then all of a sudden, "Finding" stalled, Page Faults Delta for Dtexec just shot up into the thousands, network activity shot up to 50 % almost.

Destination DB on Server 2 was also normal initially, though RAM Available dropped to around 100MB. Then the effects were felt on this server too. Network traffic shot up, and tempdb logs started exploding. The Data files remained stable.

What is the kind of explosion to expect? Could .4 GB of input lead to almost 50 GB of tempdb logs?

Why is page fault delta shooting up at a certain point? And what exactly is DTExec pushing to tempdb when the page faults explode?

Thanks in anticipation!

Kar

|||

Firstly, perhaps you should narrow down the issues. I suggest the following technique:

Measure the perf of the full package - source, transform logic, destination (S+T+D).

Now replace the SQL Server destination with a Row Count component that will simply count the rows into a variable. You do not need to do anything with those rows. You now effectively have a package that is just S+T.

So, the perf of (S+T+D)-(S+T) will give you the impact your destination is having on your package.

If the destination is having a great impact, you may want to consider the following possibilities ...

Do you have indexes on your target table? The OLEDB client for SQL Server uses effectively the same interfaces as Bulk Load and there can be issues with heavy use of tempdb when bulk loading to an indexed table. See http://www.microsoft.com/technet/prodtechnol/sql/2000/maintain/incbulkload.mspx#E2D for more information - for SQL 2000 admittedly, but I believe the same applies for 2005.

As I often say, SSIS is a client of it's adapters - the performance of SSIS is often largely an effect of its source and destination. In the case of the OLEDB destination, the Rows per Batch and Commit Size settings are effectively the same as those properties of SQL Server itself for Bulk Import. So have a look at http://msdn2.microsoft.com/en-us/library/ms188267.aspx which describes the optimization of Bulk Import - bearing in mind that SSIS is just another client. So I suggest reading that information and trying some different batch sizes.

When using BOL, please remember that you can add comments (and vote) using the controls at the foot of the BOL page - this will help us to improve the documentation for future use.

hth

Donald

|||

Thanks a lot, Donald. Am looking up the two articles, though my destination table has no index. So I just hope to optimize the Rows per batch and Commit Size.

I want to try out your S+T+D suggestion, but will have to find a time-slot, this can run for 16 plus hours! Meanwhile, I have also ordered an extra disk!

Anyways, I had already physically isolated the three parts, because S+T was on one machine and D on the other machine. And I could see that S was hardly a factor. So doe it still make sense to try your experiment?

I would also like to try and see if I can get past without transactions, so that everything gets commited, instead of being batched. Will the Fuzzy Transform allow that? Or does it need "Transactions Supported"? I have a feeling that there is a very large width transaction here. Please see my prev post. Network traffic suddenly surged, and tempdb.log grew suddenly and things like that. It was not a secular growth over the entire processing period.

On the BOL part, I think the gaps are too numerous for me to go make individual comments. I started sending comments in the September CTP, but found that almost every page was inadequate. I am only referring to SSAS here, because that is what I regularly need. Take a look at help on THIS, for example. I many cases, even a basic code sample is missing, and the text description is very very sketchy.

|||

This thread almost died a natural death :-)

I have succeeded at doing my stuff, but there are still performance and resource issues not quite clear to me.

Especially when I see the performance states in the Fuzzy article on MSDN. (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/FzDTSSQL05.asp).

This article shows great performance for Fuzzy Lookup with 2.5 million rows. Fuzzy grouping is supposed to involve creation of an ETI (like in Lookup), before it starts grouping. Somehow, the performance I see does not match up to what I see in the article. Makes me wonder what I am doing wrong.

Help, anyone?

Fuzzy Grouping: Any success with > 3 million records?

I have tried to process > 3 million Fuzzy grouping records on two different servers with no success. 3 mill works but anything above 4 mill doesn't. Some background:

We are trying to de-dup our customer table on: name (.5 min), address1 (.5 min), city (.5 min), state (exact). .8 overall record min score. Output includes additional fields: customerid, sourceid, address2, country, phonenumber Without SP1 installed I couldn't even get a few hundred thousand records to process Two different servers - same problems. Note that SSIS and SQL Server are running locally on both The higher end server has 4GB RAM, the other 2.5 GB RAM. Plenty of free disk space on both SQL Server is configured to use 2 GB of RAM max The page file is currently at 15GB

After running a number of test on both servers trying different batch sizes etc. the one thing I noticed is that it seems to always error out when SSIS takes over and starts chewing up all the available RAM. This happens after the index is created and SSIS starts "warming caches". On both servers SQL Server uses up about 1.6GB of RAM at this point while SSIS keeps taking over RAM until all physical RAM is used up.

Some questions:

Has anyone been able to process more then 3 million records and if so what is your hardware configuration? Should we try running SSIS from a different server so it has access to the full amount of physical RAM? (so it doesn't have to fight for RAM with SQL Server) Should we install Win 2003 Enterprise Server so we can add more RAM? Any ideas why switching to the page file might be causing errors?

Thanks!!

Keith Doyle

It's not so much the number of records as the size of the records that may be the issue. What size of record are you matching?

Do you have any standard (non-fuzzy) lookups? What else is the package doing?

Has anyone been able to process more then 3 million records and if so what is your hardware configuration?|||

Thanks for the info Donald. I am still having problems and there appears to be another user from the following thread that is having the same issues (this is another thread I started):

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=412813&SiteID=1&mode=1.

I ask them to join this thread so we have all the info in one place. Below are my latest test results.

I decided to concentrate on getting this to work on one server at a time. Here is the detailed configuration of the server I am starting with:

Single P4 2.4 GHz CPU|||

I'll have someone investigate at this end and we'll get back to these threads. Thanks for the grat info.

One thing would be to try executing using DTExec outside the debug environment. Or try "Start without Debugging." I doubt this will solve the problem entirely, but it will reduce any effect of the IDE on the problem.

Donald

|||

All testing was done using DTExec. I even went back and tried removing all the "pass through" fields and that didn't help either.

Hopefully you are able to find something out - thanks!!

Keith

|||donald,

is it true that a 64 bit box would resolve this issue?|||

Indeed - 64-bit systems with sufficient memory available (physical or virtual) should not see these issues. I do expect that over the next few years we'll see 64-bit become the standard platform for data integration - but meanwhile I still want to fix this problem!

Donald

|||

Hi,

Fuzzy Grouping uses Fuzzy Lookup underneath, so the following comments apply to both.

FL/FG maintain multiple caches which use up memory in the client process, eg. DTExec.exe. These caches contain recently used portions of the Match Index and also the Reference Table. The caches reduce the number of queries that must be issued against the SQL Server. The Warm Caches phase pre-loads the caches by doing a sequential load of the Match Index/Reference Table instead of bringing over rows one-by-one, as needed (which results in more random access I/O). You should be able to control the size (in MB) of these caches by setting the MaxMemoryUsage property on the transform. If this property is not specified, then FL/FG will continue to consume memory until only a small % of physical memory is free; it should reduce its cache usage if physical memory drops below a threshold. One issue, is that both SQL Server and FL/FG contend for physical memory and it is possible that their caches will end up containing the same rows. One way to reduce this contention, is to set the min & max memory usage for SQL Server as well. This can be done as follows:

sp_configure 'show advanced options', 1

reconfigure

sp_configure 'max server memory', 768

reconfigure

sp_configure 'min server memory', 100

reconfigure

If you still see physical memory being used up after the DTExec.exe process has exited, this is likely because SQL Server is holding the memory. Unfortunately, sqlserver.exe does not fully report its memory usage in TaskMgr. You must issue the commands above to get it to release memory, short of restarting the SQL process or the machine.

Note that SP1 contained a fix to a major memory leak in FL/FG. It appears that there could still be memory leaks that we did not find, or the problem could be the contention with SQL Server for memory. Try setting the MaxMemoryUsage property and see if DTExec.exe memory usage levels off after running for a few minutes in the Process Input phase. If the memory usage continues to grow dramatically, we may need to work with you to isolate a new memory leak.

One more thing to try, would be to change the Exact Match join columns to be Fuzzy Match with MinSimilarity at the column level to be 1.0. FL/FG has a different code path for Exact Match columns, which could be the culprit.

A workaround, which isn't ideal for sure, would be to partition your input into smaller batches based upon an attribute such as State if you believe that it is unlikely that two records sharing the same value for State will be duplicates.

Please let us know if you still see problems after trying the above.

-Kris

|||

Hi - just ran another test with these changes:

SQL Server min memory = 100|||

Hi:

I'm the guy in the other thread that Keith mentioned. My scenario is almost the same i.e. Name and Address De-dup. I'm on

Win2003R2Enterprise,

SQL2005SPI Enterprise,

X64 (Single Proc 3.0 GHz HT, with 2 GB RAM). (Do you mean Itanium or X64, Donald?)

12 GB on two partitions to Paging.

My input data is already scrubbed, so my FG just has a basic Data Source, FG, and Destination. And all I have is a Client ID(pass thro), Name(Fuzzy), Address(Fuzzy). I cannot partition the data state-wise or any other way for business reasons. I also dont have any standard lookups.

I used an assembly and executed it from DTexecUI, so no debugger there.

I got past 1.5 million records once, but have had failures again later. I always manage to get past the "finding similar records" phase, "Post Execute" and "Cleanup".

Picking Canonical Records is where I get Buffer Manager errors. I also saw the spike in page faults that Keith mentioned, but didnt observe which phase it happened. During this "canonical" phase, my CPU use is very low as compared to before this phase. PF usage never crossed 2 GB. Available physical memory stayed at around 40000k.

I had an error on SP1 Install for SSIS (Message - Service Failed to Start). My SSIS Version is 9.0.2047, which seems ok. Does the install error mean anything? Does it make a difference who is the owner of SSIS service? I have Network as the owner by default, and the service does not even start up on boot. Gives timeout error. Will making it System owned help by reducing LSASS activity? Manually starting the service works.

I once also ran into tempdb growth issues, and pre-setting the file sizes to a big number (like 8 GB) seemed to help a bit.

This combination of low PF Usage, Low CPU and maxed out RAM seem to indicate that FG/FL is not swapping RAM/Paging efficiently. I will also try out the Memory Settings that Kris suggested.

Does indexing help at all? I saw all that stuff in MSDN on FTI pre-creation for FL, but dont know how to do that in FG, if at all it is possible.

Thanks, Donald, hope you nail this one!

|||

Have changed over to a two-server config. One runs SSIS and DTexecUI or DTexec, and the other runs the Source and Destination DB.

The DTEXECUI server seems to be fine, really, with over a GB of RAM free, and with hardly a GB of paging used. CPU Utilization stayed at around 50 % all through, which is expected for a HT proc.

The database server had a CPU util of hardly 5% all through, but page file kept growing(max of 2GB), and tempdb kept growing and went upto 50 GB almost, before my disk maxed out. This was immediately after the "Finding Similar Records" phase was 100% completed. I had hardly 40000K of Physical Memory left at this point ( From an initial value of almost 1.4 GB).

What exactly is the relation between the tempDB and the package? From Kris's post it sounds like the FG works in memory. If that is the case, why is my tempdb server disk getting maxed? And I assume this is related only to the destiation DB?

Rows Per batch and Max Insert Commit Size - how exactly does this work? Is it equivalent to partitioning the data i.e. is grouping carried out only within the batch? Books OnLine has nothing substantial about these things :-(

The strange part is that I got this to work on a single server with Client ID + Name + Address, but it has failed thrice on a two server setup.

Thanks a lot for your help.

Kar

|||

Hi,

I have observed another run, a little more carefully this time. I set a Rows per Batch of 100000 and a Commit Size of 200000. I ran on 1.5 million rows with just Client ID and address. The size of my input data table (Client ID, Name, Address) is around 0.4 GB.

DTExec and source DB were on server 1, which ran fine until about 50 % completion of "Finding Similar Records". Almost .6 GB of RAM free, and almost no network activity. "Finding .." was moving along at about 1 % point every 8 min. Page Fault Delta was almost nil. Then all of a sudden, "Finding" stalled, Page Faults Delta for Dtexec just shot up into the thousands, network activity shot up to 50 % almost.

Destination DB on Server 2 was also normal initially, though RAM Available dropped to around 100MB. Then the effects were felt on this server too. Network traffic shot up, and tempdb logs started exploding. The Data files remained stable.

What is the kind of explosion to expect? Could .4 GB of input lead to almost 50 GB of tempdb logs?

Why is page fault delta shooting up at a certain point? And what exactly is DTExec pushing to tempdb when the page faults explode?

Thanks in anticipation!

Kar

|||

Firstly, perhaps you should narrow down the issues. I suggest the following technique:

Measure the perf of the full package - source, transform logic, destination (S+T+D).

Now replace the SQL Server destination with a Row Count component that will simply count the rows into a variable. You do not need to do anything with those rows. You now effectively have a package that is just S+T.

So, the perf of (S+T+D)-(S+T) will give you the impact your destination is having on your package.

If the destination is having a great impact, you may want to consider the following possibilities ...

Do you have indexes on your target table? The OLEDB client for SQL Server uses effectively the same interfaces as Bulk Load and there can be issues with heavy use of tempdb when bulk loading to an indexed table. See http://www.microsoft.com/technet/prodtechnol/sql/2000/maintain/incbulkload.mspx#E2D for more information - for SQL 2000 admittedly, but I believe the same applies for 2005.

As I often say, SSIS is a client of it's adapters - the performance of SSIS is often largely an effect of its source and destination. In the case of the OLEDB destination, the Rows per Batch and Commit Size settings are effectively the same as those properties of SQL Server itself for Bulk Import. So have a look at http://msdn2.microsoft.com/en-us/library/ms188267.aspx which describes the optimization of Bulk Import - bearing in mind that SSIS is just another client. So I suggest reading that information and trying some different batch sizes.

When using BOL, please remember that you can add comments (and vote) using the controls at the foot of the BOL page - this will help us to improve the documentation for future use.

hth

Donald

|||

Thanks a lot, Donald. Am looking up the two articles, though my destination table has no index. So I just hope to optimize the Rows per batch and Commit Size.

I want to try out your S+T+D suggestion, but will have to find a time-slot, this can run for 16 plus hours! Meanwhile, I have also ordered an extra disk!

Anyways, I had already physically isolated the three parts, because S+T was on one machine and D on the other machine. And I could see that S was hardly a factor. So doe it still make sense to try your experiment?

I would also like to try and see if I can get past without transactions, so that everything gets commited, instead of being batched. Will the Fuzzy Transform allow that? Or does it need "Transactions Supported"? I have a feeling that there is a very large width transaction here. Please see my prev post. Network traffic suddenly surged, and tempdb.log grew suddenly and things like that. It was not a secular growth over the entire processing period.

On the BOL part, I think the gaps are too numerous for me to go make individual comments. I started sending comments in the September CTP, but found that almost every page was inadequate. I am only referring to SSAS here, because that is what I regularly need. Take a look at help on THIS, for example. I many cases, even a basic code sample is missing, and the text description is very very sketchy.

|||

This thread almost died a natural death :-)

I have succeeded at doing my stuff, but there are still performance and resource issues not quite clear to me.

Especially when I see the performance states in the Fuzzy article on MSDN. (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/FzDTSSQL05.asp).

This article shows great performance for Fuzzy Lookup with 2.5 million rows. Fuzzy grouping is supposed to involve creation of an ETI (like in Lookup), before it starts grouping. Somehow, the performance I see does not match up to what I see in the article. Makes me wonder what I am doing wrong.

Help, anyone?

Fuzzy Grouping Transform Corrupts Pass-through Data

We are working with a client and are using Fuzzy Group transform for de-duping, and hierarchy creation for a national account list.

I've found that if a large number of pass through columns are sent to the Fuzzy Grouping transforms it randomly corrupts the char columns.

Our work around was to only pass through ID columns and then build out the attributes needed from views against the Fuzzy group output however product team should take a look at this.
By corruption I mean random characters from other records would show up in character columns (we had address and name corruption in about 10% of a 1.5 million record dataset).

Thanks.

Michael Slater
Software Architects

Michael,

Thanks for your post. We have been unable to reproduce the problem you have reported in the new test cases that we have created for this issue. We would very much like to get to the bottom of what you are seeing. Can you please contact me directly so that we might work with you to find a better repro case that can be used to further investigate and fix this problem?

Please send an email to KrisGan@.microsoft.com

Thanks,
Kris Ganjamsql

Fuzzy grouping matching nulls to empty strings/spaces

Will the fuzzy grouping task match a null value to an empty string (or spaces)? I've got 5 columns I'm matching on, and one of them may be null for certain rows but an empty string for others. Given the 4 other columns may match, will this difference stop similar columns being grouped together?

(Someone's modified my grouped data since it was deduped, which takes a while, and I'm hoping for a quick answer on this).

Thanks in advance.

Ben

Not sure, but building a quick package and adding a data viewer should give you the answer.

I would hope that a NULL wouldn't match to spaces...

Couldn't you run an update query to "fix" the data?|||

Computer says "no"

<cough>

No duplicate matching between null and empty string/spaces, as you suspected. Thanks for the idea of the quick test - seems obvious in retrospect, if only it had been beforehand Smile Unfortunately I can't fix the data, other than rerunning the grouping task, but good to know the source of the problem - thanks Phil!

Fuzzy Grouping in SSIS

hi focks,

WHAT IS THE USE OF Fuzzy Grouping IN SSIS

and please give me the example

regards

koti

Koti,

I have seen several questions similar to this one coming from you. I would recommend you to go through the help files, books on line and other resources to get familiar with the tool. Then If you have any issue or doubts, please come back for help.

Thanks

Fuzzy Grouping in parallel

Hello,

I have created a project to do de-dupification of addresses.

I understand that Fuzzy Grouping will take less time if it has lesser data volume to process.

My source feed file is sometimes huge. So I am splitting the input into multiple branches based on

the first letter of the city. There are 7 branches in the process.

Source File Feed

|

Split data into 7 groups

|

| | | | | | |

FzGrpg FzGrpg FzGrpg FzGrpg FzGrpg FzGrpg FzGrpg

| | | | | | |

Split Split Split Split Split Split Split

| | | | | | |

- -- -- -- -- -- --

| | | | | | | | | | | | | |

<- - - - - - - Write the Canonicals and Dupes from each of these splits into database - - - - - - - - ->

When I designed this I was hoping that each of the Fuzzy Grouping tasks will execute in parallel.

But in reality they are processing one after the other.

Is there anyway to make them execute in parallel?

Appreciate your help.

Thanks

KM

How do you know they are not going in parallel and what kind of machine are you using?

I haven't use Fuzzy groups before, but parallel processing would depend on the hardware you are using. If the machine you use is a single processor, I doubt you can see parallelism on the process.

|||

Its a 4 dual core CPU machine with 8 GB RAM.

When I run in the debug mode you could see the data flowing in the pipelines at runtime.

|||

Which component are you using right before to fuzzy groups? I *think*, you should be using a multicast in order to get the parallelism you want; as it would generate 7 identical data sets to be consumed by each fuzzy grouping component. See if this article gives you some tips (Parallelism section):

http://www.microsoft.com/technet/prodtechnol/sql/2005/ssisperf.mspx

[Microsoft follow-up] perhaps somebody at MSFT can give you a better explanation

|||

Yes, I believe the current pipeline engine will not do a great job in optimizing this one. It would most probably end up using a single thread as Conditional Split is synchronous. You could try to artificially break synchronicity of the fuzzy grouping branches by adding a fake asynchronous transform (Union All with one input and one output should be good).

The next version of the pipeline scheduler should be able to better optimize distribution of threads.

Thanks.

|||

Bob and Rafael, thanks a lot for your input. So you are saying it should be like this?

Source File Feed

|

Split data into 7 groups

|

| | | | | | |

UnionAll UnionAll UnionAll UnionAll UnionAll UnionAll UnionAll

| | | | | | |

FzGrpg FzGrpg FzGrpg FzGrpg FzGrpg FzGrpg FzGrpg

| | | | | | |

Split Split Split Split Split Split Split

| | | | | | |

- -- -- -- -- -- --

| | | | | | | | | | | | | |

<- - - - - - - Write the Canonicals and Dupes from each of these splits into database - - - - - - - - ->

|||

As an alternative, could you do the split in one data flow, dumping each branch to a raw file, and then use a seperate data flow (or 7 data flows) to read in the raw files and do the Fuzzy Grouping?

The engine seems to optimize better with multiple data flows, than with multiple paths in the same data flow.

|||

Yes, that is how I meant to use Union Alls.

The idea of using raw files sounds good too. I would try both and see which one works better for youe scenario.

Thanks.

|||

Thanks a lot guys.

I tried the UnionAll approach and it works perfectly fine. I am able to see that all the threads go in parallel.

A run that used to take around 10 hours got completed in 2.5 hours and that's a lot of saving.

And utilitzation of the CPUs was 100%.

As and when I tweak this more I will keep you all posted.

Thanks again.

|||

KM68 wrote:

Thanks a lot guys.

I tried the UnionAll approach and it works perfectly fine. I am able to see that all the threads go in parallel.

A run that used to take around 10 hours got completed in 2.5 hours and that's a lot of saving.

And utilitzation of the CPUs was 100%.

As and when I tweak this more I will keep you all posted.

Thanks again.

[Microsoft follow-up] This sounds like a possitive feedback.

KM68,

We all will appreciate your updates.

|||

I am glad it worked.

Hopefully, with the next version of the data flow engine you will not need this workaround and the execution time can be trimmed even more.

Thanks.

|||

Thanks.

Any idea when the next version is scheduled for release?

Fuzzy Grouping in parallel

Hello,

I have created a project to do de-dupification of addresses.

I understand that Fuzzy Grouping will take less time if it has lesser data volume to process.

My source feed file is sometimes huge. So I am splitting the input into multiple branches based on

the first letter of the city. There are 7 branches in the process.

Source File Feed

|

Split data into 7 groups

|

| | | | | | |

FzGrpg FzGrpg FzGrpg FzGrpg FzGrpg FzGrpg FzGrpg

| | | | | | |

Split Split Split Split Split Split Split

| | | | | | |

- -- -- -- -- -- --

| | | | | | | | | | | | | |

<- - - - - - - Write the Canonicals and Dupes from each of these splits into database - - - - - - - - ->

When I designed this I was hoping that each of the Fuzzy Grouping tasks will execute in parallel.

But in reality they are processing one after the other.

Is there anyway to make them execute in parallel?

Appreciate your help.

Thanks

KM

How do you know they are not going in parallel and what kind of machine are you using?

I haven't use Fuzzy groups before, but parallel processing would depend on the hardware you are using. If the machine you use is a single processor, I doubt you can see parallelism on the process.

|||

Its a 4 dual core CPU machine with 8 GB RAM.

When I run in the debug mode you could see the data flowing in the pipelines at runtime.

|||

Which component are you using right before to fuzzy groups? I *think*, you should be using a multicast in order to get the parallelism you want; as it would generate 7 identical data sets to be consumed by each fuzzy grouping component. See if this article gives you some tips (Parallelism section):

http://www.microsoft.com/technet/prodtechnol/sql/2005/ssisperf.mspx

[Microsoft follow-up] perhaps somebody at MSFT can give you a better explanation

|||

Yes, I believe the current pipeline engine will not do a great job in optimizing this one. It would most probably end up using a single thread as Conditional Split is synchronous. You could try to artificially break synchronicity of the fuzzy grouping branches by adding a fake asynchronous transform (Union All with one input and one output should be good).

The next version of the pipeline scheduler should be able to better optimize distribution of threads.

Thanks.

|||

Bob and Rafael, thanks a lot for your input. So you are saying it should be like this?

Source File Feed

|

Split data into 7 groups

|

| | | | | | |

UnionAll UnionAll UnionAll UnionAll UnionAll UnionAll UnionAll

| | | | | | |

FzGrpg FzGrpg FzGrpg FzGrpg FzGrpg FzGrpg FzGrpg

| | | | | | |

Split Split Split Split Split Split Split

| | | | | | |

- -- -- -- -- -- --

| | | | | | | | | | | | | |

<- - - - - - - Write the Canonicals and Dupes from each of these splits into database - - - - - - - - ->

|||

As an alternative, could you do the split in one data flow, dumping each branch to a raw file, and then use a seperate data flow (or 7 data flows) to read in the raw files and do the Fuzzy Grouping?

The engine seems to optimize better with multiple data flows, than with multiple paths in the same data flow.

|||

Yes, that is how I meant to use Union Alls.

The idea of using raw files sounds good too. I would try both and see which one works better for youe scenario.

Thanks.

|||

Thanks a lot guys.

I tried the UnionAll approach and it works perfectly fine. I am able to see that all the threads go in parallel.

A run that used to take around 10 hours got completed in 2.5 hours and that's a lot of saving.

And utilitzation of the CPUs was 100%.

As and when I tweak this more I will keep you all posted.

Thanks again.

|||

KM68 wrote:

Thanks a lot guys.

I tried the UnionAll approach and it works perfectly fine. I am able to see that all the threads go in parallel.

A run that used to take around 10 hours got completed in 2.5 hours and that's a lot of saving.

And utilitzation of the CPUs was 100%.

As and when I tweak this more I will keep you all posted.

Thanks again.

[Microsoft follow-up] This sounds like a possitive feedback.

KM68,

We all will appreciate your updates.

|||

I am glad it worked.

Hopefully, with the next version of the data flow engine you will not need this workaround and the execution time can be trimmed even more.

Thanks.

|||

Thanks.

Any idea when the next version is scheduled for release?

Fuzzy Grouping errors

Hi - we have been evaluating using Fuzzy Grouping and Lookup for maintaining our large list of customer records. Initial testing with Grouping on about 300K records went great but now with a larger sample of 7.3 million records we are running into problems. It doesn't appear to be system limitation - the index is built reasonably quickly and without errors but when it starts the matching we get these errors:

[Fuzzy Grouping Inner Data Flow : DTS.Pipeline] Error: The ProcessInput method on component "Fuzzy Lookup" (86) failed with error code 0x8000FFFF. The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running.

[Fuzzy Grouping Inner Data Flow : DTS.Pipeline] Error: Thread "WorkThread0" has exited with error code 0x8000FFFF.

[Fuzzy Grouping Inner Data Flow : DTS.Pipeline] Error: Thread "WorkThread1" received a shutdown signal and is terminating. The user requested a shutdown, or an error in another thread is causing the pipeline to shutdown.

[Fuzzy Grouping Inner Data Flow : OLE DB Source [1]] Error: The attempt to add a row to the Data Flow task buffer failed with error code 0xC0047020.

[Fuzzy Grouping Inner Data Flow : DTS.Pipeline] Error: Thread "WorkThread1" has exited with error code 0xC0047039.

[Fuzzy Grouping Inner Data Flow : DTS.Pipeline] Error: The PrimeOutput method on component "OLE DB Source" (1) returned error code 0xC02020C4. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing.

[Fuzzy Grouping Inner Data Flow : DTS.Pipeline] Error: Thread "SourceThread0" has exited with error code 0xC0047038.

One thing we did find is that our test server didn't have SP1 installed and that seemed to help a lot (we were getting buffer errors prior to SP1). One other note - the desination table is populated with all the data but no scoring has been applied to it.

Does anyone have any ideas what could be causing this?

Thanks!

Keith Doyle

Had the same problem, and thanks to you, I managed to get this running by doing multiple passes on around 200k rows in each pass.

I also get lots of errors that say"Buffer Manager found Virtual Memory Low but unable to swap out any buffer". The package works inspite of these errors when rowcount is low enough.

DTSDebugHost.exe consumes a lot of Memory during processing. LSASS also seems unnaturally high. I added a lot of Paging memory and that seemed to improve things to the extent that DTSDebugHost usage increased even further :-). But from the PerfMon stats, it looks to me like DTSDebug isnt using paging memory. The other processes actually released memory instead.

I use SQL2005Ent SP1 on Win2003R2 - on Intel X-64.

I hope and pray that there is a fix on the way. Bcos I found Fuzzy quite useful.

|||

I tried out a few things:

1. Added RAM

2. Used DTEXec instead of running in Debug mode in BIDS

3. Reduced columns

Have so far succeeded in 600k rows and am running 1.5 million now, and havent encountered any Buffer Manager errors so far (WIP, and fingers crossed)

My perfmon observations are however repeated. I have a suspicion Fuzzy does not use File Paging efficiently (or not at all). I had more than 8 GB of pagefile space allocated, but my Memory utilization never went beyond Physical Ram. If anything, all other running processes got squeezed out.

I have run some heavy mining stuff on the same infrastructure, without any crashes(even before I added RAM). So why is Fuzzy Grouping crashing? Or is it SSIS?

Another observation - Memory usage did not drop back after closing Devenv or DTExec. Memory gets freed only after a machine restart.

I hope someone at Microsoft tells us what the problem is. And gives us a fix please!!!

|||

Great info - I am seeing the exact same thing. See the other thread I opened for "Fuzzy Grouping: Any success with > 3 million records?". I'll post my latest test results there - please copy your info from this thread to that one.

Thanks!!

|||

I'll have someone investigate at this end and we'll get back to these threads. Thanks for the grat info.

One thing would be to try executing using DTExec outside the debug environment. Or try "Start without Debugging." I doubt this will solve the problem entirely, but it will reduce any effect of the IDE on the problem.

Donald

|||

Please see the follow up to this thread at:

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=417880&SiteID=1&mode=1

sql

Fuzzy Grouping error when progress: Finding similar records

I get this errors when progress is : Finding similar records

[DTS.PIPELINE] Information: The buffer manager detected that the system was low on virtual mermory, but was unable to swap out any buffers. 6 buffers where considered and 6 where locked. Either not enough memory is available to the pipeline because not enough is installed, other processes are using it, or too many buffers are locked.

I'm triying to fuzzy match in a table with 1.000.000 records.

My computer RAM is 1GB.

How can I resolve the problem?

Tanks,

Eusebio.

There was a known memory issue in FuzzyLookup which will become more evident in certain circumstance(long running pkg against a large reference table) - FuzzyGrouping uses FuzzyLookup underneath, so it shares the problem. This was fixed for SP1.

For now you can try the possilbe work arounds of setting BufferTempStoragePath or/and inreasing virtual memory size which were discussed in this thread http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=122391&SiteID=1

Thanks

Wenyang

Fuzzy Grouping error

I am using the Sept CTP, I am doing a fuzzy grouping on 1.5Mil records.
I continue to receive
Error: 0xC0047022 at Data Flow Task, Fuzzy Grouping Inner Data Flow : DTS.Pipeline: The ProcessInput method on component "Fuzzy Lookup" (97) failed with error code 0x8007000E. The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running.
Error: 0xC0047021 at Data Flow Task, Fuzzy Grouping Inner Data Flow : DTS.Pipeline: Thread "WorkThread0" has exited with error code 0x8007000E.
Error: 0xC02020C4 at Data Flow Task, Fuzzy Grouping Inner Data Flow : OLE DB Source [1]: The attempt to add a row to the Data Flow task buffer failed with error code 0xC0047020.
Error: 0xC0047038 at Data Flow Task, Fuzzy Grouping Inner Data Flow : DTS.Pipeline: The PrimeOutput method on component "OLE DB Source" (1) returned error code 0xC02020C4. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing.
Error: 0xC0047039 at Data Flow Task, Fuzzy Grouping Inner Data Flow : DTS.Pipeline: Thread "WorkThread1" received a shutdown signal and is terminating. The user requested a shutdown, or an error in another thread is causing the pipeline to shutdown.
Error: 0xC0047021 at Data Flow Task, Fuzzy Grouping Inner Data Flow : DTS.Pipeline: Thread "SourceThread0" has exited with error code 0xC0047038.
Error: 0xC0047021 at Data Flow Task, Fuzzy Grouping Inner Data Flow : DTS.Pipeline: Thread "WorkThread1" has exited with error code 0xC0047039.
Error: 0xC020828A at Data Flow Task, Fuzzy Grouping [130]: A Fuzzy Grouping transformation pipeline error occurred and returned error code 0x8000FFFF: "An unexpected error occurred.".
Information: 0x402090DF at Data Flow Task, Matches [875]: The final commit for the data insertion has started.
Information: 0x402090E0 at Data Flow Task, Matches [875]: The final commit for the data insertion has ended.
Information: 0x40043008 at Data Flow Task, DTS.Pipeline: Post Execute phase is beginning.
Information: 0x40043009 at Data Flow Task, DTS.Pipeline: Cleanup phase is beginning.
Information: 0x4004300B at Data Flow Task, DTS.Pipeline: "component "Matches" (875)" wrote 1572785 rows.
Warning: 0x80019002 at Package: The Execution method succeeded, but the number of errors raised (8) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
SSIS package "Package.dtsx" finished: Failure.

I have set the maximumerrorcount =10000 on the data flow task and still get the same error. Server is a dual 3.6ghz with 3.5gb ram AWE is off
Any ideas?Brian,

Increasing the value of MaximumErrorCount will not cause the error to go away. If you set MaximumErrorCount on package (not data flow task) to any integer larger than 8, package will finish successfully despite of the error.

That is, instead of

Warning: 0x80019002 at Package: The Execution method succeeded, but the number of errors raised (8) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
SSIS package "Package.dtsx" finished: Failure.

It will return:

SSIS package "Package.dtsx" finished: Success.

The error in Fuzzy Lookup is still there. Can you shed more details about your package? How is Fuzzy Lookup transform configured? It will be very helpful if you can share your package.
|||Its actually a fuzzy grouping, not a lookup. I tried to put the XML for the project in this reply, but it is too big, any ideas on how I can send you the package?
Its pretty simple: I have a OLE DB Source with 7 fields selected, ID, First Name, Last Name, Mother Maiden, Birthdate, Gender and SSN.
I pipe that to the fuzzy grouping where all but the ID are using fuzzy logic. ID is just a pass through. I have a minimum match of .65.
I pipe the results back to the OLEDB datasource that is a new table.
Pretty straight forward, with a couple weights on gender, dob, ssn and last name.
This worked with 45K records, but so far has not worked with 1.5 Million.
I turned on AWE and re-ran which also failed - same error
This package usually runs for 7 hours before failing.|||The current implementation of FuzzyGrouping invokes FuzzyLookup. From the error you post, it seems FuzzyLookup is causing trouble.

Please send the package to Runying.Mao at microsoft dot com

Could you please send some sample data besides the package?|||I'm having a similar problem. I'm trying to achieve a Fuzzy Lookup with a source table of 650000 records (people) and a reference table of 24 million records (on two fields: social security number and complete name). When I use about one million records rather than 24 million in the reference table everything works fine. Similarly when I reduce the rows in the source table and maintain size of the reference table everything works ok (but I still get in all cases warnings about low virtual memory).
Here's my output (when trying the full job):

SSIS package "Package.dtsx" starting.
Information: 0x4004300A at Data Flow Task, DTS.Pipeline: Validation phase is beginning.
Information: 0x4004300A at Data Flow Task, DTS.Pipeline: Validation phase is beginning.
Information: 0x40043006 at Data Flow Task, DTS.Pipeline: Prepare for Execute phase is beginning.
Information: 0x40043007 at Data Flow Task, DTS.Pipeline: Pre-Execute phase is beginning.
Information: 0x4004300C at Data Flow Task, DTS.Pipeline: Execute phase is beginning.
Warning: 0x8000FFFF at Data Flow Task, Fuzzy Lookup [15]: Catastrophic failure
Warning: 0x8000FFFF at Data Flow Task, Fuzzy Lookup [15]: Catastrophic failure
Warning: 0x800470E9 at Data Flow Task, DTS.Pipeline: A call to the ProcessInput method for input 16 on component "Fuzzy Lookup" (15) unexpectedly kept a reference to the buffer it was passed. The refcount on that buffer was 2 before the call, and 1 after the call returned.
Error: 0xC0047022 at Data Flow Task, DTS.Pipeline: The ProcessInput method on component "Fuzzy Lookup" (15) failed with error code 0x8000FFFF. The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running.
Error: 0xC02020C4 at Data Flow Task, OLE DB Source [1]: The attempt to add a row to the Data Flow task buffer failed with error code 0xC0047020.
Error: 0xC0047038 at Data Flow Task, DTS.Pipeline: The PrimeOutput method on component "OLE DB Source" (1) returned error code 0xC02020C4. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing.
Error: 0xC0047021 at Data Flow Task, DTS.Pipeline: Thread "SourceThread0" has exited with error code 0xC0047038.
Error: 0xC0047039 at Data Flow Task, DTS.Pipeline: Thread "WorkThread1" received a shutdown signal and is terminating. The user requested a shutdown, or an error in another thread is causing the pipeline to shutdown.
Error: 0xC0047021 at Data Flow Task, DTS.Pipeline: Thread "WorkThread0" has exited with error code 0x8000FFFF.
Error: 0xC0047021 at Data Flow Task, DTS.Pipeline: Thread "WorkThread1" has exited with error code 0xC0047039.
Information: 0x40043008 at Data Flow Task, DTS.Pipeline: Post Execute phase is beginning.
Information: 0x402090DF at Data Flow Task, OLE DB Destination [35]: The final commit for the data insertion has started.
Information: 0x402090E0 at Data Flow Task, OLE DB Destination [35]: The final commit for the data insertion has ended.
Information: 0x40043009 at Data Flow Task, DTS.Pipeline: Cleanup phase is beginning.
Information: 0x4004300B at Data Flow Task, DTS.Pipeline: "component "OLE DB Destination" (35)" wrote 0 rows.
Task failed: Data Flow Task
Warning: 0x80019002 at Package: The Execution method succeeded, but the number of errors raised (7) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
SSIS package "Package.dtsx" finished: Failure.

Please any help will be appreciated.

Regards and thanks.

GV

german @. NO amepla . SPAM com|||

Runying has been able to narrow down this problem and identified the issue.

A possible workaround is to ensure that the BufferTempStoragePath property of your data flow task is set to a drive with large enough empty space.

Thanks

Donald

|||Additionally I would increase Windows virtual memory size because I was getting lots of these warnings before package failure:

Information: 0x4004800C at Data Flow Task, DTS.Pipeline: The buffer manager detected that the system was low on virtual memory, but was unable to swap out any buffers. 6372 buffers were considered and 6372 were locked. Either not enough memory is available to the pipeline because not enough is installed, other processes are using it, or too many buffers are locked.

It is clear to me now that when the reference table (for fuzzy lookup) is huge the package needs a lot of memory for building the fuzzy index. If you are using the same reference table all the time and the data there is rather static you should consider saving the index for future use which will save you a lot of time when running the package again. In my case a fuzzy lookup with a source table of 650000 rows and a reference table of 24 million rows took 72 hours and had to be done in 3 steps of aprox. 220000 source records otherwise the package always failed.
(P4 HT 2.6Ghz, 2Gb RAM, 160Gb SATA HD and lots of coffee =)

Regards,

GV

Fuzzy Grouping - First Name Similarities; Bill = William, etc...

Hello,

I was wondering how Fuzzy Grouping deals with and handles first name similarities.Is there a way to configure it so that Anthony = Tony, Bill = William, etc…?I created a simple package with several rows containing similar first names and ran the fuzzy grouping on the first name column.I received only one possible duplicate of Will = William which was at 56%.I lowered the threshold down to 1% and still only one match.

Now I understand and appreciate the reasons for this but was wondering if this type of situation was considered and a way of dealing with it is available.

Thanks,
Beac

Just a thought as my former employer was in the business of matchingpreserve the name provided but look at making a substitution for name matching so that everything is standardized. Thus, Will, Willy, Willie, Bill, Billy, Liam, Wm are all converted to the base name of William before matching is attempted. Store what was provided but use the standardized name for matching purposes.

We had a sizeable table of 2500 name substitutions and it worked well for us.
|||Thanks for the feedback Charles.

Fuzzy Group Updates?

Hi there,

Quick Background: I have an SSIS package that reads data from a flat file then runs it through a Fuzzy Grouping component. The result of this Fuzzy Group is put into a SQL server 2005 table.

Question: Over time, the flat file will be adding new records (some that should be added to existing groups) and so I'll need to update my Fuzzy Group table to include these new records. Is there anyway to simply add these new records to the existing Fuzzy Group without changing all of the _key_out values? If I completely regenerate the Fuzzy Group table that will potentially give me different _key_out values correct?

Does this make sense?

Any help would be greatly appreciated!

>>" If I completely regenerate the Fuzzy Group table that will potentially give me different _key_out values correct?"

Correct.

wenyang

|||

Thanks for the reply!

Anyway to preserve the _key_out while still adding records to the groups? Sounds like a complete rebuild of the Fuzzy group is out of the question. Anyway to do this incrementally?

|||

Hi,

Yes, each time you run Fuzzy Grouping with a different set of input rows (or with a different threshold), it is possible that different groupings will result.

If you have run FG once and would like to keep the existing groups, one alternative would be to use Fuzzy Lookup for the incremental input rows. You would basically perform a fuzzy lookup against the output of FG and return the _key_out of the best matching row. You have thus effectively found a group for the new input row. If no match is found above the FL match threshold, then just assign a new unique _key_out to the input row to create a new group.

A slight problem with this approach is that over time all the incremental rows may not be grouped as well as they could be, as the clustering algorithm that Fuzzy Grouping uses to globally pick groupings is not being employed. At that point you may want to just rerun FG and switch to the new groupings.

We are considering adding a feature in the next version that will allow you keep all the old groupings intact.

Let us know if you have any more questions.

Regards,

-Kris

|||Thanks Kris, that will probably suffice for now. Yeah put that in the next version, the FG component is great but it doesn't have much use after the initial run because of this limitation.