SSIS - Flat File File Mapping Tool / Technik mit fester Breite

7

Ich frage mich, ob es ein Tool (oder eine spezielle Technik) gibt, mit dem jemand Flatfiles mit fester Breite in SSIS-Flatfile-Verbindungsmanagern zugeordnet hat.

Normalerweise verwende ich einfach den Flat File Connection Manager-Editor (Registerkarte Erweitert) und füge die Spalteninformationen (Name, Breite, Datentyp usw.) für alle Spalten 1 zu 1 hinzu.

Das hat in der Vergangenheit gut funktioniert, aber jetzt muss ich eine Datei mit fester Breite zuordnen, die fast 500 Spalten enthält ...

Ich denke (in der Hoffnung), dass es ein Werkzeug oder eine Technik geben sollte, mit der ich das Mapping stromlinienförmiger durchführen kann ...

Mit dem Datenwörterbuch, das mir für die Datei zur Verfügung gestellt wurde, konnte ich problemlos ein Excel- (oder Text-) Dokument erstellen, beispielsweise mit einigen Spalten, die die erforderlichen Informationen enthalten, die SSIS benötigt (Spaltenname, Trennzeichen, InputColumnWidth, OutpuColumnWidth, DataType), um die Datei zuzuordnen .

Ich frage mich, ob es ein SSIS-Tool oder eine SSIS-Komponente gibt, die diese Datei lesen und automatisch die Zuordnungen im Flat File Connection Manager für mich erstellen kann ...

Wenn es kein solches Tool gibt, hat jemand Tricks oder Tipps, mit denen ich die Datei möglicherweise am effizientesten zuordnen kann?

Ich frage mich, ob ich die XML-Datei des SSIS-Pakets möglicherweise so ändern kann, dass ich einfach Code erstellen kann, der die Spalteninformationen für alle Spalten im XML-Format ausgibt, und sie dann einfach manuell kopieren und in die XML-Datei des Pakets einfügen kann Datei ... nicht sicher, ob dies funktionieren würde ....

Hinweis: Nach dem Zuordnen der Datei in SSIS wird sie in eine SQL Server-Tabelle geladen

Flat File Connection Manager Editor

Juan Velez
quelle
Kennen Sie die Spaltendefinitionen oder sind sie unbekannt oder können sich ändern?
Dave
@ Dave Ich weiß, was die Spaltendefinitionen sind und sie sollten sich nicht ändern.
Juan Velez
1
Ich denke, das gibt Ihnen im Grunde das, was Sie tun möchten. stackoverflow.com/questions/19260549/…
mskinner
@mskinner Ich denke, das könnte genau das Richtige tun. Probieren Sie es jetzt aus. Werde wieder einchecken. Danke!
Juan Velez

Antworten:

11

Zwei Optionen in den Sinn kommen, sind beide Merkmale der can not Say-genug-good-Dinge-über-das-Free-Tool Helper BIDS .

Spalten mit fester Breite erstellen

Die erste ist die Funktion Spalten mit fester Breite erstellen . Es ist so einfach wie Erstellen eines Flat File Managers, der auf die richtige Datei zeigt und 1 Spalte definiert.

Sobald dies erledigt ist, klicken Sie mit der rechten Maustaste zurück auf den Verbindungsmanager und verwenden die kontextsensitive Funktion "Spalten mit fester Breite erstellen ...".

Geben Sie hier die Bildbeschreibung ein

Im nächsten Fenster fügen Sie die tabulatorgetrennte Liste (Excel) in den Editor ein

Geben Sie hier die Bildbeschreibung ein

Oh ja, das ist einfach. Wenn Sie für Spaltentypen und dergleichen einige Anpassungen vornehmen müssen, ändern Sie diese wie gewohnt mit Bearbeiten.

Biml

Ich mag die Business Intelligence Markup Language für meine SSIS-Entwicklung. Es hat viele Vorteile, aber im Grunde genommen sollten Sie es für Dinge wie gottesfürchtige Flatfiles verwenden, insbesondere wenn sie keine Header-Zeilen enthalten (ich sehe Sie an, Sie Mainframes).

Es war oft meine Erfahrung im Umgang mit Legacy-Systemen, dass sie ihre Dateidefinitionen in COBOL-Copybooks haben. Diese Entwickler senden mir Excel-Dateien mit dem Spaltenlayout wie

DATABASE FIELD NAME    START LOC   LENGTH
SEND.DT                 1          STRING(08)
SEND.TIME               9          STRING(08)
DT                     17          STRING(08)
TERM                   25          STRING(04)
%ZONE                  29          STRING(01)

Es ist nichts Besonderes, aber Excel-Formeln haben es kurz gemacht. Also würde ich 4 neue Spalten basierend auf den oben genannten erstellen.

Bereinigter Name (ungültige Zeichen für Spaltennamen entfernt)

=SUBSTITUTE(SUBSTITUTE(B3, ".", "_"), "%", "PCT_")

Länge (extrahiert die Zahlen, beachten Sie, dass dies immer noch eine führende 0 hat, aber es tut nicht weh)

=MID(E3,LEN("STRING(")+1,LEN(E3)-LEN("STRING(")-1)

XML (dies erstellt das tatsächliche XML für eine Flatfile-Definition)

=CONCATENATE("<Column Name=""",F3,""" Length=""",G3,"""  DataType=""AnsiString""  ColumnType=""FixedWidth""  CodePage=""1252"" />")

DDL (Könnte auch die Zieltabelle erstellen, während ich dabei bin)

=CONCATENATE(",   ", F3, " varchar(", G3, ")")

In der ersten Spalte der DDL wird das Bleikomma gelöscht und dann umbrochen CREATE TABLE dbo.FOO()

Letztendlich führt dieses XML zu etwas, das in ein FlatFileFormatTag geklatscht wird, und dann ist es einfach, die Connections-Sammlung und schließlich das Paket selbst zu erstellen. Sieht viel aus, ist aber eigentlich ziemlich einfach, sobald Sie ein Muster haben.

<Biml xmlns="http://schemas.varigence.com/biml.xsd">

    <FileFormats>
        <FlatFileFormat
            Name="FFF Pickup"
            CodePage="1252"
            RowDelimiter="CRLF"
            IsUnicode="false"
            FlatFileType="RaggedRight">
            <Columns>
                <Column Name="SEND_DT" Length="08"  DataType="AnsiString"  ColumnType="FixedWidth"  CodePage="1252" />
                <Column Name="SEND_TIME" Length="08"  DataType="AnsiString"  ColumnType="FixedWidth"  CodePage="1252" />
                <Column Name="DT" Length="08"  DataType="AnsiString"  ColumnType="FixedWidth"  CodePage="1252" />
                <Column Name="TERM" Length="04"  DataType="AnsiString"  ColumnType="FixedWidth"  CodePage="1252" />
                <!--
                ad nauseum
                --> 
                <Column Name="RPRTD_PU_PCS" Length="5"  DataType="AnsiString"  ColumnType="FixedWidth"  CodePage="1252" />
            </Columns>
        </FlatFileFormat>
    </FileFormats>

    <Connections>
        <FlatFileConnection
            Name="FF Pickup"
            FileFormat="FFF Pickup"
            FilePath="C:\ssisdata\Operations\Input\Pickup Report Pickups.txt"
            CreateInProject="false"
        />
    </Connections>

<Packages>
    <Package Name="PickupLoad" ConstraintMode="Linear" ProtectionLevel="DontSaveSensitive">
        <Tasks>
            <Dataflow Name="DFT Load Pickups" >
                <Transformations>
                    <FlatFileSource 
                        Name="OLE_SRC Pickup" 
                        ConnectionName="FF Pickup" 
                        RetainNulls="true">
                    </FlatFileSource>
                </Transformations>
            </Dataflow>
        </Tasks>
    </Package>
</Packages>

Oh und eine ähnliche Frage von SO mit einer beunruhigend ähnlichen Antwort. Ich wünschte, ich hätte mir Skinners Kommentare angesehen, bevor ich diese Antwort umschrieb.

billinkc
quelle
2
Ich versuche im Allgemeinen, SSIS-Fragen mit dem entsprechenden Biml zu beantworten. Schauen Sie sich also meine Antworten hier auf SO an, um Beispiele für "Wie mache ich X
?