SQL hjælp?

Off topic - alt som ikke handler om musik eller studie.
Forumregler
Alt om musik, musikvideoer, kunstnere, udstyr og musikteori skal postes i de andre respektive fora.
Brugeravatar
Mike-air
Forum Superstar
Forum Superstar
Indlæg: 6364
Sted: Aarhus C

SQL hjælp?

Indlæg Skrevet: 5. jan 2017, 15:59

Hey guys,

Jeg ved der er nogle udviklere her inde, og nok især folk der kan deres SQL. Sagt meget kort; jeg havde det som fag sidste år, men på "business nieveau" dvs. ikke rigtigt noget omkring hvordan man uploader data til en database f.eks.

Jeg er en rimelig habil R-bruger, og står så nu med et problem, at de biblioteker der er skrevet til R, i forhold til at interagere med MS SQL server er ineffektive når det handler om at skrive/sende data. Hvis jeg skal lave en query på ~100.000 records så går der ofte under et minut med at hente data, men vil jeg skrive den samme mængde tager det > 2 timer.

Mit problem er især, at jeg gerne vil indgå at skulle lave en custom query der opretter alle variabelnavne og formater i tabellerne manuelt hver gang jeg vil uploade data. Det tager utroligt lang tid, og lige præcis de to faktorer ændrer sig meget fra gang til gang når jeg skal skrive data. Derfor har "RODBC" pakken været super indtil nu, da den bare har taget formaterne fra R og translateret dem over til formatet der skal skrives i, på SQL serveren.

Er der derfor nogen der kan fortælle mig, om der er en eller anden smart måde jeg kan uploade data til en MS SQL server forholdsvist hurtigt, og automatisk uden at skulle skrive en lang SQL syntax hver gang? Kan jeg eksportere til CSV og loade i et andet program og uploade derfra mon?

Gode råd modtages gerne,

Tak
"The weight of evidence for an extraordinary claim must be proportioned to its strangeness." - Simon Laplace
Brugeravatar
Joachip
Executive Producer
Executive Producer
Indlæg: 648
Sted: Vesterbro

Re: SQL hjælp?

Indlæg Skrevet: 5. jan 2017, 16:10

Såvidt jeg ved kan SQL læse csv format direkte. Det gælder vist både microsoft's SQL og MySQL.

Jeg ville gætte på at det nok går stærkt, men jeg har aldrig prøvet det, og aner ikke om man kan få den til at oprette kolonnenavne ud fra en evt. header i csv filen eller ej.

Som koder prøver man typisk at undgå csv fordi det er et alt for løst defineret format.
Brugeravatar
Mike-air
Forum Superstar
Forum Superstar
Indlæg: 6364
Sted: Aarhus C

Re: SQL hjælp?

Indlæg Skrevet: 5. jan 2017, 16:19

Okay, cool! Jeg læste mig til, at det var R-funktionen der arbejdede lidt ineffektivt fordi den gjorde et eller andet hver gang den lagde en ny række op, så en mulighed kunne være at gøre det i ren SQL syntax, det er bare ikke holdbart at skulle skrive en ny hvert 15. minut fordi data ændrer sig :-(
"The weight of evidence for an extraordinary claim must be proportioned to its strangeness." - Simon Laplace
Brugeravatar
Stopdenlarm
Forum Donator
Forum Donator
Indlæg: 40
Sted: Aarhus

Re: SQL hjælp?

Indlæg Skrevet: 5. jan 2017, 17:07

Ved ikke lige hvad det er for en R-funktion du bruger..
Men er du opmærksom på, om den kører dine inserts i samme transaktion (tx).. Hvis den for hver række både skal starte en tx, lave insert og efterfølgende committe, kan det blive langsomt..
Brugeravatar
amolin
Executive Producer
Executive Producer
Indlæg: 575
Sted: Hobro

Re: SQL hjælp?

Indlæg Skrevet: 5. jan 2017, 18:18

BULK INSERT SchoolsTemp
FROM 'C:\CSVData\Schools.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = '\n', --Use to shift the control to next row
ERRORFILE = 'C:\CSVDATA\SchoolsErrorRows.csv',
TABLOCK
)
Brugeravatar
Mike-air
Forum Superstar
Forum Superstar
Indlæg: 6364
Sted: Aarhus C

Re: SQL hjælp?

Indlæg Skrevet: 5. jan 2017, 21:06

amolin skrev:BULK INSERT SchoolsTemp
FROM 'C:\CSVData\Schools.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = '\n', --Use to shift the control to next row
ERRORFILE = 'C:\CSVDATA\SchoolsErrorRows.csv',
TABLOCK
)

Cool!

Men når jeg kører:

Kode: Vælg alt

write.csv(Dim_Answers, file="C:/users/mri/desktop/answers_CSV.csv", row.names = FALSE)        #gemmer først til csv fra R

#Laver herefter en SQL query fra RODBC-pakken:
sqlQuery(myconn, "BULK INSERT ANSWERSTemp
FROM 'C:/users/mri/desktop/answers_CSV.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = '\n', --Use to shift the control to next row
ERRORFILE = 'C:/users/mri/desktop/ErrorRows.csv',
TABLOCK
)")


Får jeg desværre en error:

Kode: Vælg alt

[1] "42S02 208 [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'ANSWERSTemp'."                                                                                                                                                                                                                     
[2] "[RODBC] ERROR: Could not SQLExecDirect 'BULK INSERT ANSWERSTemp\nFROM 'C:/users/mri/desktop/answers_CSV.csv'\nWITH\n(\nFIRSTROW = 2,\nFIELDTERMINATOR = ',', --CSV field delimiter\nROWTERMINATOR = '\n', --Use to shift the control to next row\nERRORFILE = 'C:/users/mri/desktop/ErrorRows.csv',\nTABLOCK\n)'"
"The weight of evidence for an extraordinary claim must be proportioned to its strangeness." - Simon Laplace
Brugeravatar
amolin
Executive Producer
Executive Producer
Indlæg: 575
Sted: Hobro

Re: SQL hjælp?

Indlæg Skrevet: 5. jan 2017, 22:42

Findes 'ANSWERSTemp' tabellen?
Brugeravatar
Mike-air
Forum Superstar
Forum Superstar
Indlæg: 6364
Sted: Aarhus C

Re: SQL hjælp?

Indlæg Skrevet: 5. jan 2017, 22:46

amolin skrev:Findes 'ANSWERSTemp' tabellen?

Nopes- det er lidt der hovedpinen ligger...

Jeg har et lokalt datasæt som jeg gerne vil uploade i en ruf, men uden at skulle skrive syntax der definerer alle variablene i den nye tabel der skal laves.......
"The weight of evidence for an extraordinary claim must be proportioned to its strangeness." - Simon Laplace
Brugeravatar
SIDwave
Forum Donator
Forum Donator
Indlæg: 1744
Sted: Denmark

Re: SQL hjælp?

Indlæg Skrevet: 5. jan 2017, 23:22

du mangler vist bare at DIM answerstemp
Brugeravatar
Mike-air
Forum Superstar
Forum Superstar
Indlæg: 6364
Sted: Aarhus C

Re: SQL hjælp?

Indlæg Skrevet: 5. jan 2017, 23:46

SIDwave skrev:du mangler vist bare at DIM answerstemp


Altså sådan her?

Kode: Vælg alt

sqlQuery(myconn, "BULK INSERT DIM ANSWERSTemp
FROM 'C:/users/mri/desktop/answers_CSV.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = '\n', --Use to shift the control to next row
ERRORFILE = 'C:/users/mri/desktop/ErrorRows.csv',
TABLOCK
)")
"The weight of evidence for an extraordinary claim must be proportioned to its strangeness." - Simon Laplace

Tilbage til "After Party"

Hvem er online

Brugere der læser dette forum: Ingen og 1 gæst