UGISS Community

Il sito della community dello User Group Italiano di SQL Server
Welcome to UGISS Community Sign in | Join | Help
in Search

Alessandro Alpi's blog

Parliamo di integration services e non solo..

febbraio 2008 - Posts

  • [SSIS] Dataflow - Le trasformazioni - Conditional Split

    Abbiamo già accennato in questo post l'utilizzo del Conditional Split transform per saltare le righe in un determinato flusso di input. Le principali caratteristiche sono quindi già state evidenziate, e sono:
    - In quanto trasformazione, sta all'interno di un dataflow e non può essere il primo task della trasformazione stessa.
    - In quanto trasformazione, possiede un input ed n output (uno per condizione creata più uno per la condizione di default)
    - In input riceve quello che arriva da un task precedente e lo gestisce in base alle condizioni create
    - Possiamo indicare nelle espressioni di condizione sia variabili che colonne

    In aggiunta ad esse vi è l'advanced editor anche se le proprietà avanzate non sono molto importanti. Diciamo che l'editor di default è più che sufficiente per configurare il componente al meglio.
    Solo un'opzione, la ValidateExternalMetadata, può esserci di aiuto nell'editor avanzato. Essa serve infatti per decidere se validare i metadati esterni al componente a design time:

    IDTSComponentMetaData90.ValidateExternalMetadata Property

    Può essere utile, ad esempio, se le condizioni del componente sono create a runtime e quindi per quelle condizioni i cui metadatai ancora non esistono. Lasciando a true la proprietà ValidateExternalMetadata in un caso come questo, otterremmo un errore in fase di design, il che impedirebbe il corretto caricamento del pacchetto in fase di editing e, a volte, anche di esecuzione. Ricordiamo che questa proprietà non è riservata al task Conditional Split, bensì a tutti i task di trasformazione di SSIS (tutti i task di un dataflow).

    Per dare una ulteriore overview del task, vediamo come esso può risultare utile per la gestione dei NULL.

    Scenario
    Partendo da un foglio excel contenente i contatti di una rubrica, dobbiamo caricare questi dati su SQL Server 2005. Il campo email sul foglio excel può essere non riempito ma su SQL Server non è consentito l'inserimento di NULL. Se la email risulta mancante, si dovrà inserire su sql server il valore stringa "N/A".

    Ecco come procedere:

    1) creare un connection manager per i contatti
    2) creare un dataflow che conterrà la trasformazione
    3) aggiungere una sorgente Excel e definire il record
    4) legare all'output della sorgente il conditional split per gestire i NULL
    5) mettere unione i dati non NULL con quelli NULL gestiti dal conditional split
    6) inserire su tabella SQL Server


    1) Per creare il connection manager dobbiamo aggiungerne uno non presente nel menu rapido. Dovremo utilizzare New Connection..:


    Ho spuntato il flag proprio perchè la prima riga del mio excel ha i nomi delle colonne. Ricordarsi di deselezionarlo nel caso contrario
    Dopo aver confermato, ho rinominato il connection manager in Contatti.

    3) Ecco i dati in anteprima ottenuti legando il connection manager alla sorgente Excel:



    Come possiamo notare i dati con id 5,6,7,8,9 non hanno la mail valorizzata e l'informazione è NULL.

    4) Ecco come gestire il null nella conditional split:



    Avremo in output due rami, uno, che per noi è quello corretto, con le email valorizzate, l'altro, da gestire poichè la colonna email è NULL. Possiamo ad esempio aggiungere un derived column per inserire nel valore NULL la stringa "N/A":



    A questo punto siamo pronti ad unire i risultati per ottenere un resultset "pulito" e pronto da inserire su SQL Server.

    5) Utilizzando il task Union All andiamo ad unire i dati gestiti dal Derived Column con quelli già "puliti" uscenti dalla condizione di default del Conditional Split:



    Come possiamo vedere dal primo data viewer (ricordiamo che un dataviewer è un insieme di informazioni che ci consentono di eseguire debug e stime sui dati) abbiamo i dati gestiti dal Derived Column "Stringa Not Available". Nel secondo abbiamo i dati uscenti dal Conditional Split "email NULL" mentre nel terzo abbiamo l'unione dei due resultset in uno solo. Questi ultimi sono i dati che effettivamente saranno inseriti in SQL Server.

    Stay Tuned!
     

  • [SSIS] Qualche problema con SP2

    L'altro giorno ho riscontrato un problema noioso sul service pack 2 di sql server per quanto riguarda Integration Services.

    Scenario
    Sistema cluster windows 2003, failover di SQL Server 2005 a 64bit. Installazione nuovo ambiente, e quindi installazione SQL Server in cluster, installazione dei client tools, di SSIS e di VSBIDS (Business Intelligence Development Studio). Successivamente, Service Pack 2, per tutto.

    Ebbene, dopo l'installazione di SP2, sembra andare tutto bene fino a che mi accorgo che Visual Studio BIDS non funziona più.. Non riesco a creare package nuovi, non riesco a fare debug di già esistenti, ed ottengo errori di vario genere, come ad esempio:

    "Microsoft Visual Studio is unable to load this document:
    The package failed to load due to error 0xC0010014 “One or more error occurred. There should be more specific errors preceding this one that explains the details of the errors. This message is used as a return value from functions that encounter errors.”. This occurs when CPackage::LoadFormXML fails."

    Partendo da questo messaggio non ho trovato nulla che potesse aiutarmi.
    Davide, non conoscendo bene il problema che avevo di fronte, mi ha passato un paio di link, che purtroppo non erano adatti al mio scopo..

    Il week end è passato e questa mattina mi arriva una email simpatica di Leo, un mio "amico/collega/cliente" che mi insulta un po' e mi dona questo link:

    http://support.microsoft.com/kb/919224

    CAUSE

    loadTOCNode(1, 'cause');"This problem occurs because the installer unregisters the 32-bit Dts.dll file when the installer installs the 64-bit Dts.dll file. The 64-bit Dts.dll file is installed together with SQL Server 2005 SP2. Additionally, the 64-bit Dts.dll file may be installed together with any SSIS hotfix package that contains the 64-bit Dts.dll file."

    Semplicemente risolto con il metodo indicato..
    Comunque un "bel" bug.. voi che ne pensate?

    Stay tuned!