R,SQL,现有对象不存在

R, SQL, and existing objects not existing

DBI::dbListFields(con, "ibin_acq")
#>  [1] "MANDT"           "IN_RECNO"        "VALFR"           "VALTO"          
#>  [5] "AENNR"           "DELFLAG"         "IN_STANCE"       "MLANG"          
#>  [9] "SORTF"           "OBJNR"           "IBASE"           "AMOUNT"         
#> [13] "UNIT"            "DATUV"           "TECHS"           "IN_OBJNR"       
#> [17] "IN_GUID"         "OBJECTTYP"       "VOID"            "CSTATUS"        
#> [21] "CUCOCNT"         "EXPERT"          "MAT_VARIANT"     "ATAUT"          
#> [25] "KLART"           "CRNAM"           "CRTIM"           "UPNAM"          
#> [29] "UPTIM"           "SOURCE_ID"       "EXTRACTION_DATE"

我上面使用 DBI 包的 R 命令工作正常(查询 Teradata SQL table)。当我尝试查看此 table 的前十行时,出现以下错误:

DBI::dbGetQuery(con, "select top 10 * from ibin_acq")
#> Error in new_result(connection@ptr, statement) : 
#>   nanodbc/nanodbc.cpp:1344: 42S02: [Teradata][ODBC Teradata Driver]
#> [Teradata Database](-3807)Object 'ibin_acq' does not exist. 

错误表明 ibin_acq 对象不存在,但我的第一个代码块(上图)证明该对象确实存在。没有?

DBI::dbReadTable(con, "ibin_acq")
#> Error in new_result(connection@ptr, statement) : 
#>   nanodbc/nanodbc.cpp:1344: 42S02: [Teradata][ODBC Teradata Driver]
#> [Teradata Database](-3807)Object 'ibin_acq' does not exist. 

上面的代码块也不起作用。为什么我可以 dbListFields(con, "ibin_acq") 但我不能 dbReadTable(con, "ibin_acq")


为@Fred 编辑 - 这是该命令和输出:

DBI::dbGetQuery(con, "SELECT CURRENT_USER, DATABASE, DatabaseName, 
                TableName FROM DBC.TablesV WHERE TableName='ibin_acq'")
#>   Current_User         Database    DataBaseName TableName
#> 1      6841794 P0_IM_DL_QCM02_V P0_IM_ACQ_GCS_T  IBIN_ACQ
#> 2      6841794 P0_IM_DL_QCM02_V        DBA_DATA  ibin_acq
#> 3      6841794 P0_IM_DL_QCM02_V P0_IM_ACQ_GCS_V  IBIN_ACQ

那肯定是 access 问题。通过类似于 Grant n 的方式授予对您想要的那些对象的访问权,然后使用它。

针对 DBC.TablesV 的元数据查询返回的 "DATABASE" P0_IM_DL_QCM02_V 是会话默认限定符(模式)。但是您打算访问的视图似乎在 P0_IM_ACQ_GCS_V DatabaseName.

更改连接的默认 "DATABASE" 设置或明确指定查询架构。