sql >> Database >  >> RDS >> Sqlserver

Met behulp van SSIS, hoe vind ik de steden met de grootste bevolking?

Volledig eens met @PaulStock dat aggregaten het beste aan bronsystemen kunnen worden overgelaten. Een aggregaat in SSIS is een volledig blokkerende component, net als een soort en ik heb heb mijn argument op dat punt al gemaakt .

Maar er zijn momenten waarop het doen van die bewerkingen in het bronsysteem gewoon niet gaat werken. Het beste wat ik heb kunnen bedenken, is om de gegevens in feite dubbel te verwerken. Ja, maar ik heb nooit een manier kunnen vinden om een ​​column onaangetast door te laten. Voor Min/Max-scenario's zou ik dat als optie willen, maar het is duidelijk dat zoiets als een Som het voor de component moeilijk zou maken om te weten aan welke "bron"-rij het zou worden gekoppeld.

2005

Een implementatie uit 2005 zou er als volgt uitzien. Je prestaties zullen niet goed zijn, in feite een paar ordes van grootte van goed, omdat je al deze blokkeringstransformaties zult hebben naast het opnieuw verwerken van je brongegevens.

Samenvoegen

2008

In 2008 heeft u de mogelijkheid om de Cache Connection Manager te gebruiken wat zou helpen de blokkeringstransformaties te elimineren, tenminste waar het ertoe doet, maar je zult nog steeds de kosten moeten betalen van dubbele verwerking van je brongegevens.

Sleep twee gegevensstromen naar het canvas. De eerste zal de cache-verbindingsbeheerder vullen en zou de plaats moeten zijn waar de aggregatie plaatsvindt.

Nu de cache de geaggregeerde gegevens bevat, laat u een opzoektaak in uw hoofdgegevensstroom vallen en voert u een zoekopdracht uit met de cache.

Tabblad Algemeen opzoeken

Selecteer de cacheverbindingsbeheerder

Wijs de juiste kolommen toe

Groot succes

Scripttaak

De derde benadering die ik kan bedenken, 2005 of 2008, is om het zelf te schrijven. Als algemene regel probeer ik de scripttaken te vermijden, maar dit is een geval waarin het waarschijnlijk logisch is. Je moet er een asynchrone scripttransformatie maar handel daar eenvoudig uw aggregaties af. Meer code om te onderhouden, maar u kunt uzelf de moeite besparen om uw brongegevens opnieuw te verwerken.

Tot slot, als algemeen voorbehoud, zou ik onderzoeken wat de impact van banden op uw oplossing zal doen. Voor deze dataset zou ik verwachten dat zoiets als Guelph plotseling zou opzwellen en Toronto zou binden, maar als dat zo was, wat zou het pakket dan moeten doen? Op dit moment zullen beide resulteren in 2 rijen voor Ontario, maar is dat het beoogde gedrag? Script stelt u natuurlijk in staat om te definiëren wat er gebeurt in het geval van banden. Je zou waarschijnlijk de 2008-oplossing op zijn kop kunnen zetten door de "normale" gegevens in de cache te plaatsen en die als je opzoekconditie te gebruiken en de aggregaten te gebruiken om slechts een van de banden terug te trekken. 2005 kan waarschijnlijk hetzelfde doen door het aggregaat als de linkerbron voor de samenvoegverbinding te plaatsen

Bewerkingen

Jason Horner had een goed idee in zijn commentaar. Een andere benadering zou zijn om een ​​multicast-transformatie te gebruiken en de aggregatie in één stroom uit te voeren en weer bij elkaar te brengen. Ik kon er niet achter komen hoe ik het met een vakbond kon laten werken, maar we konden soorten gebruiken en samenvoegen, net zoals in het bovenstaande. Dit is waarschijnlijk een betere benadering omdat het ons de moeite bespaart om de brongegevens opnieuw te verwerken.



  1. Mysql Ruimtelijke index ongebruikt

  2. Tabelvariabele is slechts met één waarde gevuld

  3. 2 manieren om het compatibiliteitsniveau in Oracle te controleren (SQLcl &SQL*Plus)

  4. Verschillen tussen utf8 en latin1