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



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

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

我希望它只是在运行 rxGetVarInfo 时将我的 sql 服务器数据作为具有适当格式的对象导入,这样我就不必花费 10% 的时间来格式化文件。此外,当此解决方案投入生产时,这一点也很重要。没有时间做这个繁琐的步骤。

我如何使这项工作按照我希望的方式工作?

ODBC 目前不支持日期时间转换。

以下是一些解决方案:

  1. 数据时间可以在 T-SQL 中正确转换为 POSIX,如此示例所示 https://learn.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(),如下例所示,事先指定日期时间格式或使用润滑包大大提高了效率。

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 秒

最新更新