【问题标题】:Can't open lib 'FreeTDS' : file not found and /etc/odbcinst.ini is missing无法打开 lib 'FreeTDS':找不到文件并且 /etc/odbcinst.ini 丢失
【发布时间】:2020-11-14 07:59:12
【问题描述】:

我想将 R 连接到 AWS 中的 Athena,这样我就可以从数据库中获取一个表到 R 中。所以我上网搜索了如何做到这一点。我找到了这个网站here。那告诉我我需要安装驱动程序。我有一个mac(这对我来说也是新的),我在website 的mac 部分下发现我需要安装我所做的自制软件。然后我在终端中执行了这些后续步骤。

  1. 安装所有数据库都需要的UnixODBC

    brew 安装 unixodbc

  2. 安装常用数据库驱动程序(可选)

    brew install freetds --with-unixodbc

    brew 安装 psqlodbc

我通常不在终端工作。所以我对它不太熟悉。无论如何,我认为这样做了,所以我运行了以下代码。

con <- DBI::dbConnect(
  odbc::odbc(),
  Driver             = "FreeTDS",
  S3OutputLocation   = " etc..",
  AwsRegion          = "etc..",
  AuthenticationType = "...",
  Schema             = "...",
  UID                = rstudioapi::askForPassword("AWS Access Key"),
  PWD                = rstudioapi::askForPassword("AWS Secret Key")
  )

当我运行此代码时,出现以下错误:

Error: nanodbc/nanodbc.cpp:983: 00000: [unixODBC][Driver Manager]Can't open lib 'FreeTDS' : file not found 

当然,我用谷歌搜索了这个错误,并在堆栈交换上发现了一些有趣的东西。虽然我得到了这些回复,但在终端玩了之后:

sudo Rscript -e 'odbc::odbcListDrivers()'
[1] name      attribute value    
<0 Zeilen> (oder row.names mit Länge 0)

显示零行和长度为 0 的 row.names。

我也跑过这个

cp /etc/odbcinst.ini ~/.odbcinst.ini && Rscript -e 'odbc::odbcListDrivers()

我明白了

cmdand quote> '
cp: /etc/odbcinst.ini: No such file or directory

我不明白为什么会这样,因为我完成了第一步和第二步。

【问题讨论】:

  • 看起来您所包含的说明的第二个链接是用于连接到传统的 ODBC 数据库,例如 Microsoft SQL Server,这是 FreeTDS 用于连接的。您是否考虑过尝试为此制作的 RAthena 包? cran.r-project.org/web/packages/RAthena/readme/README.html
  • 感谢您将链接发送给我。这对我来说可能会更好,但我只是对这里显示的参数有疑问con &lt;- dbConnect(RAthena::athena(), aws_access_key_id='YOUR_ACCESS_KEY_ID', aws_secret_access_key='YOUR_SECRET_ACCESS_KEY', s3_staging_dir='s3://path/to/query/bucket/', region_name='eu-west-1') 是访问密钥 ID,只是我的用户登录详细信息,还是有人必须让我访问的特殊内容。跨度>
  • 我还想问你是否知道我在哪里可以看到查询存储桶的路径。例如,我在 Athena 中看到设置查询结果位置的路径,但我不知道这是否是同一件事
  • ACCESS_KEY_IDSECRET_ACCESS_KEY 在 Amazon Web Services IAM 中一起生成。它在某种程度上相当于 API 的用户名和密码。您需要生成一对,然后给它适当的权限。不幸的是,我的知识到此结束;我不是重度 R 或 AWS 用户。 :)

标签: r postgresql driver amazon-athena freetds


【解决方案1】:

这是对@FlipperPA 前面提到的内容的扩展。 s3_staging_dir 是 AWS Athena 输出结果的 AWS S3 存储桶。默认情况下,RAthena 尝试通过删除即席查询结果来保持整洁。但是,这可以通过使用查询缓存 (https://dyfanjones.github.io/RAthena/articles/aws_athena_query_caching.html) 来阻止。

如果您想获取查询的 AWS S3 路径,您可以执行以下操作:

library(DBI)

# connect to AWS Athena, credentials are stored in:
# .aws/credentials or environmental variables
con <- dbConnect(RAthena::athena(), s3_staging_dir="s3://athena/output/")

# Start caching queries
RAthena_options(cache_size = 10)

# Execute a query on AWS Athena
res <- dbExecuteQuery(con,  "select * from sampledb.elb_logs")

# AWS S3 Location of query
sprintf("%s%s.csv",res@connection@info$s3_staging, res@info$QueryExecutionId)

链接的stackoverflow问题:Can you use Athena ODBC/JDBC to return the S3 location of results?

【讨论】:

  • 感谢您的解释并展示了如何获得 s3_staging_dir。我还想为任何阅读 s3_staging_dir 的人补充一下,也可以在您编写 SQL 查询的雅典娜中找到。如果您单击设置,它将在“查询结果位置”旁边显示路径
猜你喜欢
  • 2018-04-21
  • 2020-04-12
  • 2013-05-02
  • 2014-10-14
  • 1970-01-01
  • 2020-04-20
  • 2013-12-05
  • 2016-04-03
  • 1970-01-01
相关资源
最近更新 更多