我有一台安装了HANA客户端的64位Windows 7计算机以及与SAP HANA数据库的ODBC连接。在ODBC数据源管理员中,我已添加到所需数据库的连接,并且可以成功连接。
我正在尝试使用RStudio检索数据以便使用R进行分析。我发现返回少量行(“TOP 1”到“TOP 17”)的查询成功返回所请求数字的所有71列数据行,但当我查询“TOP 18”或更高行数时,我得到所有列标题,但返回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行不返回数据的想法?
答案 0 :(得分:0)
我有类似的问题。起初我根本没有行返回。将believeNRows = FALSE和rows_at_time = 1添加到初始连接有助于至少恢复一些数据(直到发生故障)。在我的情况下,我只能检索5行,第6行失败,这有助于我识别数据库中的问题行。
最后,我认为根据您的建议,它与编码有关。我发现我的问题是倒置的单引号字符。
我在RODBC网站上找到了以下信息:
另一个 国际化问题是使用的字符编码。当R和 DBMS在同一台机器上运行,这不太可能 问题,在许多情况下,ODBC驱动程序有一些翻译选项 字符集。 SQL是ANSI(美国)标准,DBMS倾向于 假设字符数据是ASCII或者当前可能是 由ODBC驱动程序中的错误阻止,因此SQLColumns无法报告 在指定数据库中的表上。最近,DBMS已经开始 (可选地或默认情况下)以Unicode格式存储数据 不幸的是,Windows上的UCS-2和其他地方的UTF-8。所以跨OS 解决方案不能保证有效,但大多数解决方案都可以。
SAP HANA是一个以Unicode格式存储数据的数据库。
我尝试了各种选项来设置编码:
最后,我决定在SAP HANA中创建一个视图来替换SQL中的问题字符。
replace(content,x,y) as content
其中x是问题字符,y是替换字符。
从那时起,RODBC可以毫无问题地检索数据。
希望这有帮助
答案 1 :(得分:0)
好的,这里的问题实际上是Windows上的R如何处理来自ODBC的UTF数据(如前所述)。 围绕SO的快速搜索表明,对于具有许多不同DBMS的Windows上的R来说,这个问题非常常见。
对于SAP HANA,对我有用的是将以下参数添加到ODBC DSN(在ODBC驱动程序设置 - &gt;设置... - &gt;特殊属性设置中):
CHAR_AS_UTF8 | TRUE
这使SAP HANA ODBC将SQL_C_CHAR作为UTF8处理。
答案 2 :(得分:0)
由于SAP数据中存在波罗的海字符,因此问题解决方案需要2个部分。这两个步骤是:
现在,用于打开HANA数据通道的RStudio命令: ch&lt; -odbcConnect(&#34; HA NA_QA_DS&#34;,uid =&#34; aaaaaa aa&#34;,pwd =&#34; bbbbbbbb&#34;,DBMSencoding =&#34; UTF-8&# 34)
谢谢,拉尔斯。您的意见有助于解决这个问题!
答案 3 :(得分:0)
我有同样的问题。 添加属性'CHAR_AS_UTF8'= 1对我来说不是一个选项,因为必须使用代码在每个新用户的系统上定义它。
在我的解决方案中,我将列转换为NCLOB。
res<-sqlQuery(ch, 'SELECT TO_NCLOB("COLUMNNAME") as "COLUMNNAME" FROM "SAPL2P"."MYSCHEMA"')
选择*时可能会很复杂。但是,大多数只有某些已知列会受到不需要的字符的影响。