我正在尝试将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%的时间来格式化文件。此外,这对于此解决方案投入生产非常重要。没有时间做这个乏味的步骤。
如何使这项工作成为我希望它的工作方式?
答案 0 :(得分:0)
ODBC此时不支持日期时间转换。
以下是一些解决方案:
可以在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
帖子作者遇到的处理时间慢似乎是因为as.POSIXct()效率低下,如下例所示,指定日期时间格式或使用lubridate包大大提高了效率。
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秒