sqlSave in R zu erstellen und speichern Sie ein dataframe zu einer sql-Tabelle
Hallo, ich bin mit R speichern eines Daten-frame in einer DB2-SQL-Tabelle. Ich scheine in der Lage sein, um die Tabelle zu erstellen Skelett, aber nicht fügen Sie die Daten in der Tabelle
>df <- read.csv("dat.csv")
wo dat.csv eine csv ohne Header, nur raw-Daten in zwei Spalten
dann habe ich die Tabelle erstellen:
>sqlQuery(channel, "create table sqltable
(
col1 int,
col2 float
)"
(
wo ich bestätigen, die Tabelle wird erstellt, indem Sie in der Lage, wählen Sie die leere Tabelle "sqltable" auf die Datenbank
so, jetzt brauche ich um die Daten von "dat.csv" in "sqltable" by doing:
>sqlSave(channel, df, "sqltable", verbose=T, fast=T, append=T)
no: 1 rownames 1/***/no: 2 col1 31105/***/no: 3 col2 0.001/***/
no: 2 rownames 1/***/no: 2 col1 31106/***/no: 3 col2 0.023/***/
no: 3 rownames 1/***/no: 2 col1 31107/***/no: 3 col2 1.456/***/
no: 4 rownames 1/***/no: 2 col1 31108/***/no: 3 col2 0.001/***/
no: 5 rownames 1/***/no: 2 col1 31109/***/no: 3 col2 2.102/***/
alles scheint gut, bis ich tun:
>sqlQuery(channel,"select * from sqltable")
[1] COL1 COL2
<0 rows> or 0-length row.names
den sqlSave Befehl eindeutig nimmt die Daten aus dat.csv, also warum ist es nicht in der Tabelle Hinzugefügt? was mache ich falsch?
Ich weiß nicht, etwas über
Was für eine Art Verbindung Sie nutzen und welche Art von OS wird Ihre DB2-server am laufen?
R
, aber haben Sie vielleicht zu COMMIT
Ihr einfügen, sonst wird es automatisch zurück?Was für eine Art Verbindung Sie nutzen und welche Art von OS wird Ihre DB2-server am laufen?
InformationsquelleAutor brucezepplin | 2014-02-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wäre es eine gute Idee, um zu definieren, varTypes innerhalb sqlSave. Hier ist, wie ich es mache. 🙂
Diese definiert die Spalte für Arten von Daten, so können Sie das argument in sqlSave. So können die sqlSave jetzt.
ist und wenn die Tabelle bereits Hinzugefügt wurde, dann würde ich eine sqlDrop vor.
Warum ist das eine Antwort?
Gut, ich hatte das gleiche problem. Ich wurde immer Fehlermeldungen, die besagen, es könnte nicht führen sqlSave aber es war putting in meine Spalten in der Datenbank. Also musste ich fix die columnTypes. R versucht, es manuell zu tun aber es ist nicht perfekt. 🙂
InformationsquelleAutor NealC
Verwenden
rownames = FALSE
in IhremsqlSave()
.Da Sie nicht bieten ein Beispiel der Daten aus dem dat.csv, nehme ich an es hat 2 Spalten basierend auf Ihrem sqlSave code-block. Aus der create-Anweisung, sqltable hat nur 2 Spalten; sqlSave standardmäßig
rownames = TRUE
machen wird, die Daten, die Sie eingeben, aus dem dataframe haben 3 Spalten, statt der 2, die Sie wünschen. Durch den Versuch um Platz 3 Spalten in einer Microsoft SQL Server-Tabelle mit 2 Spalten, ohnerownames = FALSE
mein R-Sitzung wird abgebrochen mit Fehler."Error in cbind_all(x) : Argument 1 must have names".
Einstellungrownames = F
den Fehler behoben oder michin Fall, dass Sie versuchen, herauszufinden, was ODBC-connector für den Einsatz im R, ich empfehle die Verwendung von DBI statt RODBC . DBI ermöglicht eine feinere Kontrolle des Schemas verwendet, während RODBC ist sqlSave nur nutzt das Standard-schema. DBI wahrscheinlich auch mehr aktive Entwickler als RODBC.
Danke Jared, das ist so nachdenklich!
InformationsquelleAutor Jared Marx