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" 设置或明确指定查询架构。
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" 设置或明确指定查询架构。