2017-05-19 30 views
0

我正在嘗試將SQL Server數據表導入R Server。 SQL Server中的數據表具有格式化爲日期時間的datetimes,但是當我使用以下代碼時,表格不會以適當的格式進入R。R服務器/ SQL Server數據導入 - 如何以適當的格式導入日期?

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

我可以使用rxGetVarInfo(xxx)來顯示錶導入日期時間文件作爲字符類。這意味着我必須運行此代碼,讓我的日期以適當的格式

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

由於我的數據的大小,這需要30-40分鐘。每次我必須運行這個工作時,我的工作時間就有10%。我希望能夠簡單地將BeginTime = "POSIXct"等放入我在RxSqlServerData步驟中使用的名爲col的對象中,但這不起作用,您會收到一個錯誤消息,提示我以這種方式轉換爲POSIXct。

我希望它能夠以適當的格式將我的sql服務器數據作爲對象導入,當我運行rxGetVarInfo時,我無需花一天時間格式化文件的10%。此外,這對解決方案投入生產時非常重要。沒有時間做這個乏味的步驟。

我該如何使這項工作如何讓我工作?

回答

0

ODBC此時不支持日期時間轉換。

這裏有一些解決方案:

  1. DATATIME可以正確地在T-SQL如本例所示轉換爲POSIX 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. 緩慢的處理時間遇到了這篇文章的作者似乎是因爲as.POSIXct()的低效率,如下面的例子所示,在指定日期時間格式之前或使用lubridate包可大大提高效率。

DF = rxImport(DT,轉換=名單(DT2 = as.POSIXct(DT1)))

讀取的行數:1000000,共行加工:1000000,總大塊時間: 34.223秒

DF = rxImport(DT,變換=列表(DT2 = as.POSIXct(DT1,格式= 「%Y-%間 - %d%H:%M:%S」)))

行閱讀:1000000,共行加工:1000000,總大塊時間:18.733秒

DF = rxImport(DT,轉換=名單(DT2 = lubridate :: ydm_hms(DT1)))

行閱讀:1000000,處理的總行數:1000000,總大塊時間:3.319秒

相關問題