Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

Er verkeleg SQL Server så håplaus på CSV import?


Anbefalte innlegg

Eg poster dette her, då databaseforumet er heilt dødt.

 

Eg har ein enkel kommaseparert CSV som dette

3081,2014-12-05 10:00:01,9.0100,100,100,10.5000,200,200
5265,2014-12-05 13:53:42,25.9500,6000,6000,30.5800,100,100
4952,2014-12-05 12:36:29,20.4100,100,100,29.2600,100,100
3081,2014-12-05 15:28:01,9.0200,100,100,10.4900,100,100
3397,2014-12-05 13:56:57,0.0100,100,100,199999.9900,100,100
5265,2014-12-05 14:35:44,2.5900,100,100,49.3900,100,100
3081,2014-12-05 15:29:23,9.0200,100,100,10.1000,100,100
4952,2014-12-05 12:39:33,20.4700,100,100,29.2600,100,100
3081,2014-12-05 15:29:53,9.0100,100,100,9.8500,200,200
3397,2014-12-05 14:00:01,15.5000,100,100,199999.9900,100,100

Dette er eksportert frå PostgreSQL og tabellen ser sånn ut:

 

 

      Column       |            Type             | Modifiers
-------------------+-----------------------------+-----------
 stock_id          | bigint                      |
 time              | timestamp without time zone |
 bid               | numeric(19,4)               |
 bid_depth         | bigint                      |
 bid_depth_total   | bigint                      |
 offer             | numeric(19,4)               |
 offer_depth       | bigint                      |
 offer_depth_total | bigint                      |
 

 

Nå har eg prøvd med SQL Server Import & Export Wizard og Bulk Copy

Begge feiler med noko datakonverting dilldall feilmelding som ikkje gir meining.

 

Dato feltet fikk eg til med å bruke datetime2 typen, men disse numeric feltene. Ikkje faen. Eg har prøvd alle datatyper, numeric, decimal, float osv. Men den greier ikkje å importere.

Endrer eg feltene til varchar/string, da går det fint. Og då kan eg oppdatere kolonnen etter og "konvertere" på den tradisjonelle måten. Problemet er at disse CSV filene er på fleire TB, og eg gidder ikkje å vente i all evigheit på noko som skulle fungert i første steg.

 

Eg kan aldri hugse eg har slitt så mykje for noko så enkelt, dokumentasjonen for CSV import i SQL Server er jo så dårleg at skulle trudd det var ein 5 åring som hadde skreve det.

 

Så då spør eg dykk, korleis får ein dette skikkeleg til. Dette er jo tross alt noregs mest populære database.

Endret av siDDis
Lenke til kommentar
Videoannonse
Annonse

Jepp, får mapping feilmeldinger. Feilmeldingen babler om noe alignment på kolonne 8. Og feilmeldingen kjem med ein gong. Altså noko er galt med SQL Server sin måte å mappe til riktig type.

 

Andre CSV-import programmer som Pandas eller PostgreSQL har ingen problemer med same fil.

Endret av siDDis
Lenke til kommentar

Jeg kjørte en kjapp test på dataene dine og dette fungerer fint.

 

CREATE TABLE #temp ( stock_id bigint, tme timestamp, bid numeric (19,4), bid_d bigint, bid_d_t bigint, offer numeric(19,4), offer_d bigint, offer_d_t bigint)
 
BULK INSERT #temp
   FROM 'd:\test.txt'
   WITH 
      (
         FIELDTERMINATOR =',',
         ROWTERMINATOR ='\n'
      );
Lenke til kommentar

[ code ] kutter ut alt som skrives etterpå visstnok....

 

Hvis jeg bytter ut en verdi fra siste kolonne med en bokstav får jeg følgende feilmelding. Den beskriver hvilken rad som det feiler på.

 

Msg 4864, Level 16, State 1, Line 6
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 4, column 8 (offer_d_t).
Lenke til kommentar

Mulig å kjøre replace på komma til semikolon for å hindre evt desimalforvirring?

 

Men, de jeg gjorde noe slikt for mange år siden benyttet jeg et ETL-verktøy som het Talend Open Studio. Der kunne man hente en input, konvertere og evt mappe til en output grafisk / javabasert. Deretter eksporterte man hele jobben til en liten java-pakke, og man fikk til og med en autogenerert bat-fil man kunne starte via schedulern til Windows.

 

Noe læringskurve, men husker muligheten til å teste jobbene på de 100 første linjene mens man utviklet sparte mye tid.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...