首页 文章

如果请求18行或更多行,为什么使用RODBC的SAP HANA的sqlQuery不返回任何数据

提问于
浏览
0

我有一台安装了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 回答

  • 0

    我遇到过同样的问题 . 添加属性'CHAR_AS_UTF8'= 1对我来说不是一个选项,因为它必须在使用该代码的每个新用户的系统上定义 .

    在我的解决方案中,我将列转换为NCLOB .

    res<-sqlQuery(ch, 'SELECT TO_NCLOB("COLUMNNAME") as "COLUMNNAME" FROM "SAPL2P"."MYSCHEMA"')
    

    选择*时可能会很复杂 . 但是,大多数只有某些已知列受到不需要的字符的影响 .

  • 0

    好吧,这里的问题实际上是Windows上的R如何处理来自ODBC的UTF数据(如前所述) . 围绕SO的快速搜索表明,对于具有许多不同DBMS的Windows上的R来说,这个问题非常常见 .

    对于SAP HANA,对我来说有用的是将以下参数添加到ODBC DSN(在ODBC驱动程序设置 - >设置... - >特殊属性设置中):

    CHAR_AS_UTF8 |真正

    这使SAP HANA ODBC将SQL_C_CHAR作为UTF8处理 .

  • 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 . 因此,不保证交叉操作系统解决方案可以正常工作,但大多数情

    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可以毫无问题地检索数据 .

    希望这可以帮助

  • 0

    由于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”)

    谢谢,拉尔斯 . 您的意见有助于解决这个问题!

相关问题