2016-03-22 6 views
0

Ich habe Daten, die ich aus SQL Server extrahiert mit BCP die Datei ist ASCII CSV.
Daten im Format 2016-03-03T23: 00: 00.U-SQL-Fehler Extrahieren von BCP-CSV-Datei

Wenn der Extrakt läuft ich

Zusätzliche Informationen:

{ "diagnosticCode": 195887127, "Schwere": "Fehler", "Komponente": "LAUFZEIT", "Quelle": "User", "errorId": "E_RUNTIME_USER_EXTRACT_COLUMN_CONVERSION_INVALID_ERROR", "Nachricht": "Ungültiges Zeichen bei dem Versuch, Spaltendaten zu konvertieren.", "Description": "HEX: \" 223022 \ "Ungültiges Zeichen beim Konvertieren des Eingabedatensatzes. \ nPosition: Zeile 1, Spalte 21. "," Auflösung ":" Überprüfen Sie die Eingabe auf Fehler oder verwenden Sie \ "silent \" swi tch, um über (unter) -große Zeilen im Eingang zu ignorieren. \ nÜberprüfen Sie, dass das Ignorieren von "ungültigen" Zeilen die Ergebnisse des Jobs beeinflussen kann und dass die Typen für Konvertierungsfehler nullable sein können, um ignoriert zu werden. "," helpLink " : "", "details": "========================================== ================================================= = \ nHex: 5432333B35313B34362D323031362E30332E30335432333B30303B30302D302D352D323031362E30332E30335432333B35313B34392F3536372D302D323031362E30332E3033 \ n ^ \ ntext-: T23: 51: 46,2016-03-03T23: 00: 00,0,5,2016-03-03T23: 51: 49.567,0,2016-03-03 \ n

Wie gehen Sie beim Extrahieren mit Daten richtig um? Es ist mir unklar, warum es mitten in einer Datumsspalte spaltet.

Eine Probenreihe sieht wie

50CA2FBB-95C3-4216-A729-999BE2DB491A, 2016-03-03T23: 51: 49.567,1001464881,1001464795,1001464795,00000000-0000-0000-0000-000000000000,00000000 -0000-0000-0000-00000000000000,100, 100,, 12643, bCAwvRnNVwrKDXKxZkVed2Z1zHY =, o2lsnhueDApmvSbm31mh3aetYnc =, 2016-03-03T23: 50: 46,2016-03-03T23: 00: 00,2016-03-03T23: 51: 46,2016-03-03T23: 00: 00,0,5,2016-03-03T23: 51: 49.567,0,2016-03-03T00: 00: 00,2016-03-03T23: 59: 59,00000000- 0000-0000-0000-000000000000

Extract Statement is 
@res = 
EXTRACT 
     LicenseId Guid, 
     EntryDate DateTime, 
     UltimateId long, 
     SiteId string, 
     VirtualId string, 
     ProjectId Guid, 
     DocumentId Guid, 
     MasterId string, 
     ProductId string, 
     FeatureString string, 
     VersionId long, 
     ComputerSid string, 
     UserSid string, 
     AppStartTime DateTime, 
     StartHour DateTime, 
     AppStopTime DateTime, 
     StopHour DateTime, 
     GmtDelta int, 
     RecordedGmtDelta int, 
     LastUpdated DateTime, 
     Processed bool, 
     StartDate DateTime, 
     EndDate DateTime, 
     ImsId Guid 
FROM @dataFile 
USING Extractors.Csv(); 
+0

Interessant Wenn ich alle bis auf zwei der Daten in der BCP-Datei auslasse und die Extract-Anweisung entsprechend ändere ... Es funktioniert. –

Antwort

0

Die Standard-Codierung der Einbau-Extraktoren ist Encoding.UTF-8. Wahrscheinlich wird die drei Byte-Sequenz, die Sie sehen, als UTF-8 und nicht als ASCII interpretiert.

Wenn Ihre BCP Ausgabe wirklich nur Codepunkte im ASCII-Bereich enthält (0-127) (und ANSI nicht 8-Bit-Zeichen), können Sie Extractors.Csv(encoding:Encoding.[ASCII]) angeben (beachten Sie die [] um ASCII sie aus der reservierten Schlüsselwort Regel zu entkommen) .

Wenn Ihre Daten jedoch Zeichen im ANSI-Bereich enthalten, müssen Sie entweder UTF-16 (ich glaube nicht, dass BCP UTF-8 unterstützt) oder das Ergebnis von BCP in UTF-8 konvertieren.

Beachten Sie, dass bei einer Dateigröße von mehr als 250 MB derzeit ein Fehler bei der Erkennung der Datensatzbegrenzung beim Hochladen der Datei vorliegt, wenn sie in der UTF-16-Codierung vorliegt. Bis wir diesen Fehler behoben haben, schlage ich vor, dass Sie in diesem Fall die Datei mit UTF-8-Kodierung hochladen.

Wenn Sie die vollständige unterstützte ANSI-Codepage benötigen, stimmen Sie bitte Ihre Unterstützung für das Benutzerstimulationselement unter https://feedback.azure.com/forums/327234-data-lake/suggestions/13077555-add-ansi-code-page-support-for-built-in-extractors ab und stellen Sie die Codepage bereit, die Sie unterstützen müssen (z. B. Windows-1254 oder ISO-Latin-1). .