2017-05-19 2 views
0

Ich versuche, eine SQL Server-Datentabelle in R Server zu importieren. Die Datentabelle in SQL Server hat Datumsangaben wie Datetime formatiert, aber wenn ich den folgenden Code verwende, kommen die Tabellen nicht in R in einem geeigneten Format.R Server/SQL Server-Datenimport - Wie importiere ich Daten im passenden Format?

`xxx<- RxSqlServerData(table = "vwTCMSDataGPC", 
            connectionString = connStr, 
            colClasses = col)` 

kann ich rxGetVarInfo(xxx) verwenden zu zeigen, dass die Tabelle die Datetime-Dateien als Zeichenklassen importiert. Das bedeutet, ich habe diesen Code ausführen, um meine Daten in entsprechendem Format

xxx<- rxDataStep(inData = xxx, 
        transforms = list(BeginTime = as.POSIXct(BeginTime), 
             RestoreTime = as.POSIXct(RestoreTime), 
             ERTGeneratedTime = as.POSIXct(ERTGeneratedTime)), 
        maxRowsByCols = 1000000000) 

Aufgrund der Größe meiner Daten bekommen diese 30 bis 40 Minuten dauern. Das sind 10% meines Arbeitstages jedes Mal, wenn ich das ausführen muss. Ich würde gerne BeginTime = "POSIXct" usw. in meinem Objekt col im RxSqlServerData Schritt setzen können, aber das funktioniert nicht, und Sie erhalten einen Fehler, der die Konvertierung auf POSIXct vorschlägt, wie ich es tat.

Ich möchte es einfach meine SQL Server-Daten als ein Objekt mit geeigneten Formaten zu importieren, wenn ich rxGetVarInfo auf diese Weise ich muss nicht verbringen 10% meines Tages eine Datei formatieren. Dies ist auch wichtig, wenn diese Lösung in Produktion geht. Es gibt keine Zeit, diesen langweiligen Schritt zu machen.

Wie mache ich das so, wie ich es gerne hätte?

Antwort

0

ODBC unterstützt die Datetime-Konvertierung zu diesem Zeitpunkt nicht.

Hier sind einige Lösungen:

  1. Datatime korrekt in T-SQL zu POSIX umgewandelt werden, wie in diesem Beispiel gezeigt https://docs.microsoft.com/en-us/sql/advanced-analytics/tutorials/rtsql-r-and-sql-data-types-and-data-objects#cast-or-convert-sql-server-data

  2. Die langsame Bearbeitungszeit des Autors Beitrag gestoßen, da zu sein scheint der Ineffizienz von as.POSIXct(), wie das folgende Beispiel zeigt, verbessert die Angabe des Datumszeit-Formats vor der Hand oder die Verwendung des lubridate-Pakets die Effizienz erheblich.

df = rxImport (dt, transformiert = list (dt2 = as.POSIXct (DT1)))

Zeilen lesen: 1000000, Gesamt Zeilen verarbeitet: 1000000, Gesamt Chunk Zeit: 34,223 Sekunden

df = rxImport (dt, transformiert = list (dt2 = as.POSIXct (DT1, format = "% Y-% m-% d% H:% M:% S")))

Lesen Sie 10

Zeilen: 1000000, Gesamt Zeilen verarbeitet: 1000000, Gesamt Chunk Zeit: 18,733 Sekunden

df = rxImport (dt, transformiert = list (dt2 = lubridate :: ydm_hms (DT1)))

Zeilen gelesen: 1000000, Gesamtzahl der verarbeiteten Zeilen: 1000000, Gesamt-Chunk-Zeit: 3,319 Sekunden

Verwandte Themen