R中通过odbcConnect连接Hive多库环境时选择指定数据库的咨询
处理方案
注意:R中函数名区分大小写,你示例代码中的大写
Library需要改为小写library才能正常加载依赖包。
方法1:拆分SQL语句单独执行切换库操作
你当前遇到的USE语句不生效的核心原因是Hive ODBC驱动不支持单批次执行多条SQL语句,把USE和查询语句拆分执行即可:
library("RODBC") # 初始化连接 conn <- odbcConnect(dsn="Mydsn") # 先单独执行USE语句切换到目标数据库 sqlQuery(conn, "USE MY_SPECIFIC_DATABASE") # 再执行查询,直接使用表名即可 query <- "SELECT * FROM MY_TABLE" res <- sqlQuery(conn, query) # 操作完成后关闭连接 odbcClose(conn)
方法2:连接时直接指定目标数据库(无需修改DSN配置)
即使没有修改DSN的权限,也可以在建立连接时传入数据库参数,覆盖DSN的默认配置:
library("RODBC") # 连接时新增DATABASE参数指定目标库,不需要改动原有DSN conn <- odbcConnect(dsn="Mydsn", DATABASE="MY_SPECIFIC_DATABASE") query <- "SELECT * FROM MY_TABLE" res <- sqlQuery(conn, query) odbcClose(conn)
方法3:切换为DBI标准odbc包(兼容性更强)
如果RODBC的适配仍存在问题,可以换用官方维护的odbc包,对Hive的兼容性更稳定:
library("DBI") library("odbc") # 连接时通过schema参数指定Hive数据库 conn <- dbConnect(odbc(), dsn="Mydsn", schema="MY_SPECIFIC_DATABASE") # 也支持后续动态切换库:dbExecute(conn, "USE MY_SPECIFIC_DATABASE") res <- dbGetQuery(conn, "SELECT * FROM MY_TABLE") # 关闭连接 dbDisconnect(conn)
内容的提问来源于stack exchange,提问作者Phong Nguyễn
相关产品推荐
相关产品推荐

