R Server / SQL Server数据导入 - 如何以适当的格式导入日期?

时间:2017-05-19 12:32:03

标签: r sql-server-2016

我正在尝试将SQL Server数据表导入R Server。 SQL Server中的数据表具有格式化为datetime的日期时间,但是当我使用以下代码时,表格不会以适当的格式进入R.

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

我可以使用rxGetVarInfo(xxx)来表明该表将datetime文件作为字符类导入。这意味着我必须运行此代码才能以适当的格式获取日期

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"等放在col步骤中使用的名为RxSqlServerData的对象中,但这不起作用,并且您收到建议转换为POSIXct的错误我的方式。

我希望它只是将我的sql server数据导入为具有适当格式的对象,当我运行rxGetVarInfo时,我不必花费10%的时间来格式化文件。此外,这对于此解决方案投入生产非常重要。没有时间做这个乏味的步骤。

如何使这项工作成为我希望它的工作方式?

1 个答案:

答案 0 :(得分:0)

ODBC此时不支持日期时间转换。

以下是一些解决方案:

  1. 可以在T-SQL中正确地将Datatime转换为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. 所示
  3. 帖子作者遇到的处理时间慢似乎是因为as.POSIXct()效率低下,如下例所示,指定日期时间格式或使用lubridate包大大提高了效率。

  4.   

    df = rxImport(dt,transforms = list(dt2 = as.POSIXct(dt1)))

    行读取:1000000,已处理的总行数:1000000,总块时间:34.223秒

      

    df = rxImport(dt,transforms = list(dt2 = as.POSIXct(dt1,format =“%Y-%m-%d%H:%M:%S”)))

    行读取:1000000,已处理总行数:1000000,总块时间:18.733秒

      

    df = rxImport(dt,transforms = list(dt2 = lubridate :: ydm_hms(dt1)))

    行读取:1000000,已处理总行数:1000000,总块时间:3.319秒