我有一台安装了HANA客户端的64位Windows 7计算机以及与SAP HANA数据库的ODBC连接 . 在ODBC数据源管理员中,我已添加到所需数据库的连接,并且可以成功连接 .
我正在尝试使用RStudio检索数据以便使用R进行分析 . 我发现返回少量行(“TOP 1”到“TOP 17”)的查询成功返回所请求行数的所有71列数据,但当我查询“TOP 18”或更高行数时,我得到所有列 Headers ,但返回0行 .
所以查询:
res<-sqlQuery(ch, 'SELECT TOP 17 * FROM "SAPL2P"."/BIC/PZRPA_CNO" WHERE "/BIC/ZRPA_DCD"=\'CONFIRMED\'')
结果是17行数据,但是
res2<-sqlQuery(ch, 'SELECT TOP 18 * FROM "SAPL2P"."/BIC/PZRPA_CNO" WHERE "/BIC/ZRPA_DCD"=\'CONFIRMED\'')
有0行数据 .
什么可能导致数据不能返回超过17行的任何想法?
4 回答
我遇到过同样的问题 . 添加属性'CHAR_AS_UTF8'= 1对我来说不是一个选项,因为它必须在使用该代码的每个新用户的系统上定义 .
在我的解决方案中,我将列转换为NCLOB .
选择*时可能会很复杂 . 但是,大多数只有某些已知列受到不需要的字符的影响 .
好吧,这里的问题实际上是Windows上的R如何处理来自ODBC的UTF数据(如前所述) . 围绕SO的快速搜索表明,对于具有许多不同DBMS的Windows上的R来说,这个问题非常常见 .
对于SAP HANA,对我来说有用的是将以下参数添加到ODBC DSN(在ODBC驱动程序设置 - >设置... - >特殊属性设置中):
CHAR_AS_UTF8 |真正
这使SAP HANA ODBC将SQL_C_CHAR作为UTF8处理 .
我有类似的问题 . 起初我根本没有行返回 . 将believeNRows = FALSE和rows_at_time = 1添加到初始连接有助于至少恢复一些数据(直到发生故障) . 在我的情况下,我只能检索5行,第6行失败,这有助于我识别数据库中的问题行 .
最后我认为它与编码有关,根据你的建议 . 我发现我的问题是倒置的单引号字符 .
我在RODBC网站上找到了以下信息:
SAP HANA是一个以Unicode格式存储数据的数据库 .
我尝试了各种选项来设置编码:
将RODBS.odbcConnect proc中的DBMSencoding属性设置为UTF-8,latin1,ISO8859-1和UCS-2,没有任何运气
我也尝试过在没有运气的情况下在RStudio中设置编码
最后,我决定在SAP HANA中创建一个视图来替换SQL中的问题字符 .
replace(content,x,y) as content
其中x是问题字符,y是替换字符 .从那时起,RODBC可以毫无问题地检索数据 .
希望这可以帮助
由于SAP数据中的波罗的海字符引起问题,因此解决方案需要2个部分 . 这两个步骤是:
在ODBC DSN设置中将值为'TRUE'的属性'CHAR_AS_UTF8'添加为上面提到的Lars .
使用额外参数'DBMSencoding= 1272262 '在RStudio中打开 Channels
因此,现在打开通道到HANA数据的RStudio命令:ch <-odbcConnect(“HANA_QA_DS”,uid =“aaaaaaaa”,pwd =“bbbbbbbb”,DBMSencoding =“UTF-8”)
谢谢,拉尔斯 . 您的意见有助于解决这个问题!