【问题标题】:R can not connect via RODBC to a working Teradat odbc connectionR 无法通过 RODBC 连接到正常工作的 Teradat odbc 连接
【发布时间】:2017-08-16 06:43:19
【问题描述】:

我在尝试通过 RODBC 将 R 连接到 Teradata 时遇到问题。

我的系统:Ubuntu 14.04; Teradata 14.10; ODBC 驱动程序 16.0; R 3.3.3; RStudio 1.0.136

我已经测试了 ODBC 驱动程序,它已安装并且工作正常(我已经测试了它通过 SQL 连接到 Teradata,使用 /tdxodbc64 )。我可以毫无问题地运行查询。

但是,当我尝试在 R 中做同样的事情时:

 library('RODBC')
 channel <- odbcConnect(dsn="MY_DSN_NAME",uid="MY_USER",pwd="MY_PASS")

我明白了:

Warning messages:
1: In RODBC::odbcDriverConnect("DSN=MY_DSN_NAME;UID=MY_USER;PWD=MY_PASS",  :
 [RODBC] ERROR: state tU, code 0, message ��������������������
2: In RODBC::odbcDriverConnect("DSN=MY_DSN_NAME;UID=MY_USER;PWD=MY_PASS",  :
 ODBC connection failed

如果我检查 R 中可用的数据源,我会得到以下信息:

odbcDataSources()
LADW_V01                testdsn
"Teradata ODBC Driver"             "tdata.so" 

任何建议都会非常受欢迎! 提前致谢。

【问题讨论】:

    标签: r teradata rodbc


    【解决方案1】:

    这是我用来连接到我的 Teradata DW 的。 即使在 RMarkdown 中也能很好地工作,并且没有硬编码密码。 相反,它从 Windows 数据库管理员那里获取凭据。

    注意:以下代码适用于 *.Rmd 文件

    ```{R}
    # Unfortunately, odbc is not on CRAN yet
    # So we will need devtools
    # install.packages(devtools)
    devtools::install_github("rstats-db/odbc")
    
    # Get connection info from Windows ODBC Data Source Administrator 
    # Using the name you set manually
    con <- dbConnect(odbc::odbc(), 'Your_Data_Warehouse_Name')
    ```
    
    ```{sql connection = con, output.var = result}
    -- This is sql code, comments need to be marked accordingly
    SELECT TOP 10 * FROM My_Table
    ```
    
    ```{R}
    # And the result is available in the next chunk!
    result
    ````
    

    更新:我注意到您正在运行 Linux。我还没有在我的 Linux VM 上设置这个,所以我不能从经验中说出来。但是,软件包作者在 Linux 系统上以等效方法给出了以下information

    MacOS/Linux

    在 MacOS 和 Linux 上,有两个单独的文本文件需要 编辑。 UnixODBC 包括一个命令行可执行文件 odbcinst,它 可用于查询和修改 DSN 文件。然而这些很简单 如果需要,您也可以手动编辑文本文件。

    有两个不同的文件用于设置 DSN 信息。 - odbcinst.ini - 定义驱动程序选项 - odbc.ini - 定义 连接选项

    可以为所有用户全局定义 DSN 配置文件 系统,通常位于 /etc/odbc.ini 或 /opt/local/etc/odbc.ini, 确切位置取决于编译时使用的选项 UnixODBC。 odbcinst -j 可用于查找确切位置。 或者,可以使用 ODBCSYSINI 环境变量 指定配置文件的位置。前任。 ODBCSYSINI=~/ODBC

    本地 DSN 文件也可以与文件 ~/.odbc.ini 和 ~/.odbcinst.ini.

    odbcinst.ini

    包含驱动程序信息,尤其是驱动程序的名称 图书馆。可以在同一个文件中指定多个驱动程序。

    [PostgreSQL 驱动程序] 驱动程序 = /usr/local/lib/psqlodbcw.so

    [SQLite 驱动程序] 驱动程序 = /usr/local/lib/libsqlite3odbc.dylib odbc.ini

    包含连接信息,特别是用户名、密码、 数据库和主机信息。 Driver行对应于 odbcinst.ini 中定义的驱动程序。

    [PostgreSQL] 驱动程序 = PostgreSQL 驱动程序数据库
    = test_db 服务器名 = localhost 用户名 = postgres 密码 = 密码端口 = 5432

    [SQLite] Driver = SQLite Driver Database=/tmp/testing 见 另外:没有 GUI 的 unixODBC 以获得更多信息和示例。

    【讨论】:

    • 谢谢,但我想问题出在其他地方,因为我可以在 ubuntu shell 中成功连接到 Teradata,但不能使用 R / RODBC 或 python ...即使我在 Rstudio 中打开 ubuntu shell我可以毫无问题地连接,但不能使用 R。
    • 是的,所以我说的是使用rstats-db/odbc 包而不是RODBC 包:)
    • 如果您想坚持使用 RODBC,这是另一种方法:library(RODBC); db &lt;- odbcDriverConnect("Driver=Teradata;DBCName=YourDB;UID=YourUserName;PWD=YourPassword"); Data &lt;- sqlQuery( db, "SELECT TOP 10 * FROM SOME_TABLE;"); odbcClose(db)
    • 是的,我已经测试了这两种类型的连接。这里真正的问题是 我可以通过 ubuntu shell 成功连接到 Teradata,但不能使用 R 或 Python(在每种情况下都使用适当的库,并使用 rigth sintax...)。我猜是 R 或 Python 之外的东西,但我对 Ubuntu/ODBCs 的了解非常有限。
    猜你喜欢
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多