Ich habe eine ältere PostgreSQL-Datenbankquelle (ODBC), die ich mithilfe von SSIS auf ein neues SQL Server-Schema migrieren möchte. Ich erhalte eine Warnung mit den Worten:
Die Abrufmethode 'Zeile für Zeile' wird erzwungen, da die Tabelle LOB-Spalten enthält. Der Spalteninhalt ist LOB
Die Sache ist, keines der Spalte wirklich brauchen LOBs zu sein. Es gibt einige TEXT-Typen, die jedoch problemlos in einen Varchar (max) passen. Noch seltsamer, aber die meisten schon sind Varchars, aber es etwas über varchar scheint (128) behandelt wird , als ob es ein LOB war (im Voraus Eigenschaften, ist der Datentyp DT_NTEXT).
Ich habe versucht, einen manuellen SQL-Befehl auszuführen, bei dem ich jeden Zeichenfolgentyp explizit in einen varchar mit einer geeigneten Länge in der select-Anweisung umgewandelt habe und sie in der ODBC-Quelle immer noch als DT_NTEXT festgelegt sind.
Ich bin kein DBA, also ist es durchaus möglich, dass ich etwas wirklich Dummes mache. Ich möchte nur wissen, wie ich am besten sicherstellen kann, dass die Typen als Varchare enden, damit ich sie abrufen kann. Irgendwelche Ideen?
Falls es wichtig ist, verwende ich SSIS-BI 2014 in Visual Studio 2013.
quelle
varchar(max)
nur als Abkürzung, dass die Spaltendaten für SSIS-Zwecke in die maximale Varchar-Größe passen, die bei etwa 4000 liegt, denke ich. Ich besetze eigentlich nichtsvarchar(max)
; Allerdings habe ich einige Kolumnen gegossenvarchar(4000)
, nur um sicher zu gehen.Antworten:
Anscheinend läuft dies nur darauf hinaus, dass SSIS jeden Varchar, der größer als 128 ist, als NTEXT behandelt. Nicht sicher warum. Ich kann jedoch in die erweiterten Eigenschaften der ODBC-Quelle gehen und die Typen wieder in DT_WSTR ändern. Welches scheint zum größten Teil zu funktionieren.
Ich habe jedoch festgestellt, dass einige der Tabellen, mit denen ich mich befasse, in einigen ihrer TEXT-Spalten tatsächlich mehr als 4000 Byte enthalten. Daher muss ich diese Spalten leider als DT_NTEXT belassen, um ein Abschneiden zu verhindern (SSIS lässt dies nicht zu Sie setzen einen DT_WSTR-Typ mit mehr als 4000 Bytes. Ich nehme an, in diesen Fällen bin ich nur beim zeilenweisen Abrufen festgefahren, aber zumindest konnte ich ein paar Tabellen reparieren.
quelle
Ich habe die Datenkonvertierung für den varchar größer als 128 als NTEXT verwendet, aber was den Fehler für mich letztendlich beseitigt hat, ist die Einstellung Externe Daten validieren auf Falsch gesetzt.
quelle
Diese Lösung hat bei mir funktioniert:
Ich habe den Fehler behoben, indem ich den Parameter Max Varchar in der Datenquelleneigenschaft geändert habe. Gehen Sie zum Verbindungsmanager. Wählen Sie die Erstellungsoption neben der Verbindungszeichenfolge aus. Klicken Sie auf die Verbindungsschaltfläche, um auf weitere Optionen zuzugreifen. Ändern Sie den Wert des Max Varchar.
quelle
In meinem Fall ist die Quelle Filemaker ODBC, die auch Langtext als LOB-Datentyp behandelt. Mein Paket blieb lange Zeit hängen, da die Leistung für die zeilenweise Abrufmethode extrem abgenommen hat, da die Tabelle LOB-Spalten enthält. Während der Bereitstellung trat daher nach langer Zeit eine Zeitüberschreitung auf, die schließlich fehlschlug.
Ich teile die eigentliche Lösung, die für mich wie ein Zauber funktioniert hat. Ein Tag mit einem Datenabruf vom Typ über 30.000 LOB dauerte für mich ca. 10 Minuten ::
Verringern Sie die DefaultBufferMaxRows auf 1 und erhöhen Sie DefaultBufferSize auf maximal 100 MB. Ändern Sie dann den ODBC-DSN der Quelle, indem Sie die Option "Text als langen Varchar behandeln" aktivieren. Und ordnen Sie die Datentypen von Quelle zu Ziel zu (ohne Änderung des erweiterten Editors in der Quelle).
quelle