【问题标题】:R HANA sql query selecting certain column names is returning column names as dataframe valuesR HANA sql查询选择某些列名将列名作为数据框值返回
【发布时间】:2020-02-25 17:34:16
【问题描述】:

当我在 R 中从 HANA 运行 sql 查询时,提取所有列,数据正确返回。

sql <- "SELECT TOP 10 *
        FROM \"ccf-edw.self-service.DOIP::R_CA_B_DemandPlan\"( 
            'PLACEHOLDER' = ('$$IP_ExtractionWeekFrom$$', '201943'), 
            'PLACEHOLDER' = ('$$IP_ExtractionWeekTo$$', '201943')) "

SpringVisitAll <- dbGetQuery(jdbcConnection, sql)

这为我提供了包含实际数据的列。

但是,如果我尝试仅调用几列,则数据将仅填充列名

sql <- "SELECT TOP 10 'SalesOffice', 'CalendarMonth'
        FROM \"ccf-edw.self-service.DOIP::R_CA_B_DemandPlan\"( 
            'PLACEHOLDER' = ('$$IP_ExtractionWeekFrom$$', '201943'), 
            'PLACEHOLDER' = ('$$IP_ExtractionWeekTo$$', '201943')) "

SpringVisitAll <- dbGetQuery(jdbcConnection, sql)

提供两列,其中每一列的内容一直是​​ SalesOffice 和 CalendarMonth。

这是怎么回事?

【问题讨论】:

  • 请检查 SAP Hana 数据库的规则以引用列名。这个'SalesOffice' 是一个literal 而不是列引用。如果需要,请尝试删除引号或使用(转义)双引号来引用混合大小写的列名称。
  • 正如 Marmite Bomber 所说,当您的查询中有 'SalesOffice' 时,它是字符串文字,而不是列引用。因此查询的结果是预期的。您需要使用列引用(例如SalesOffice"SalesOffice")。
  • 这与您的last question 相关,我commented。双引号和单引号在 SQL 中的含义不同,而在 R 中是同义词。不要混淆两者。
  • Marmite Bomber 是正确的,评论应该是答案!

标签: sql r jdbc hana rjdbc


【解决方案1】:

基于Naming Conventions for SAP HANA

名称不区分大小写。例如,CUSTOMER 和 Customer 相同,但对象名称在存储到 SAP HANA 数据库时会转换为大写。但是,如果将名称括在引号中,则区分大小写。

因此,取决于您在 CREATE TABLE 语句中定义列的方式(带或不带引号),您有两个选项可以引用它们

不带引号的列名 - 不区分大小写

不带分隔符的简单写列名:

 sql <- "SELECT TOP 10  SalesOffice ,  CalendarMonth  ...

双引号列名 - 区分大小写

您必须用双引号将列名括起来。此外,在双引号 R 字符串中,您必须使用 \"

转义双引号
 sql <- "SELECT TOP 10  \"SalesOffice\" ,  \"CalendarMonth\"  ...

【讨论】:

    猜你喜欢
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多