【问题标题】:Connecting to Teradata with R through DBI and ODBC通过 DBI 和 ODBC 使用 R 连接到 Teradata
【发布时间】:2023-03-24 15:59:01
【问题描述】:

我使用 Teradata SQL 助手连接到 Teradata。连接参数包括一个服务器地址和一个驱动程序(服务器信息因隐私原因而改变),如下图:

Name: my_teradata_connection
Teradata Server Info: 00.11.22.333
Data Source: Teradata Database ODBC Driver 16.20
UID: My_User_ID
PWD: My_PWD

我正在尝试使用 R 连接到 Teradata,使用 DBIodbc 包。

con <- DBI::dbConnect(odbc::odbc(),
                      Driver = "[your driver's name]",
                      Host   = "[your server's path]",
                      DBCName = "[IP Address or Alias]"
                      UID    = rstudioapi::askForPassword("Database user"),
                      PWD    = rstudioapi::askForPassword("Database password"))

显然Driver 应该是Teradata Database ODBC Driver 16.20。但是我应该把Teradata Server Info 放在哪里,我们会说是00.11.22.333?它应该填充Host 还是DBCName 参数?无论哪个没有填充,都会去那里?

【问题讨论】:

  • DBCName 是 IP 地址(即 00.11.22.333)或 Teradata 系统的网络名称(由 DNS/等解析为所有 Teradata 节点的 IP 地址列表)
  • @dnoeth 当我使用 Teradata SQL 助手 连接时,我不记得曾经被要求提供Host = "[your server's path]"。需要这个吗?或者我可以放弃那个论点吗?
  • 我认为这是针对本地 DBMS 的,例如访问,因此不需要
  • 另请注意,Teradata 提供了一个 Teradata SQL Driver for R 以及 Teradata R package 分析库,它们不依赖于 ODBC。见downloads.teradata.com

标签: r odbc teradata teradata-sql-assistant r-dbi


【解决方案1】:

通常,在包括 ODBC 连接的大多数 DB-API 中,serverhost 是同义词,您不会同时看到它们,而只能看到一个(当然也有例外)。具体来说,根据odbcdocumentationdbConnect 维护 可选 server 参数:

dbConnect(
     drv,
     dsn = NULL,
     ...,
     timezone = "UTC",
     timezone_out = "UTC",
     encoding = "",
     bigint = c("integer64", "integer", "numeric", "character"),
     timeout = 10,
     driver = NULL,
     server = NULL,
     database = NULL,
     uid = NULL,
     pwd = NULL,
     dbms.name = NULL,
     .connection_string = NULL
)

但是,... 表示特定于相应驱动程序的附加 ODBC 驱动程序关键字,这里是 Terdata ODBC 驱动程序。

...       额外的 ODBC 关键字,这些关键字将与其他参数连接到 形成最终的连接字符串


从 Teradata 16.20 的 ODBC 驱动程序中,documentationDriverDBCName必需关键字。DBCName 似乎是 server 的同义词em>host 给出了 IP 地址或别名指示。

DBCName = &lt;IP-addr-or-alias&gt;

| Keyword/Synonym                                             | Description                                                                             |
|-------------------------------------------------------------|-----------------------------------------------------------------------------------------|
| Driver=<driver-path>                                        | [Required] The full path to the ODBC Driver for Teradata shared objects…                |
| Description=<data-source-desc>                              | [Optional] Descriptive text about the data source.                                      |
| DBCName=<IP-addr-or-alias>                                  | [Required] The IP address or FQDN (fully qualified domain name) of the Teradata server… |
| Username=<name> or UID=<name>                               | [Optional] The default username for logging onto a Teradata server system.              |
| Password=<password>                                         | [Optional] The password required for the default Username.                              |
| DefaultDatabase=<database-name> Or Database=<database-name> | [Optional] The default database associated with the specified data source…              |
| UPTMode                                                     | Default = NOTSET…                                                                       |

因此,在 R 中,仅使用 DBCName。下面添加了可选的Database关键字。

# KEYWORD APPROACH
con <- DBI::dbConnect(odbc::odbc(),
                      Driver   = "Teradata Database ODBC Driver 16.20",
                      DBCName  = "00.11.22.333",
                      Database = "myDatabase",
                      UID      = rstudioapi::askForPassword("Database user"),
                      PWD      = rstudioapi::askForPassword("Database password"))

# CONNECTION STRING APPROACH
con_str = "Driver={Teradata Database ODBC Driver 16.20};DBCName=00.11.22.333;Database=myDatabase;"

con <- DBI::dbConnect(odbc::odbc(),
                      .connection_string = con_str,
                      UID = rstudioapi::askForPassword("Database user"),
                      PWD = rstudioapi::askForPassword("Database password")

【讨论】:

    猜你喜欢
    • 2019-06-17
    • 2019-10-25
    • 2019-06-23
    • 2016-06-25
    • 1970-01-01
    • 2016-12-17
    • 2018-09-06
    • 2011-02-11
    • 2012-01-04
    相关资源
    最近更新 更多