Не удается открыть библиотеку FreeTDS: файл не найден и /etc/odbcinst.ini отсутствует

Я хочу подключить R к Athena в AWS, чтобы получить таблицу из базы данных в R. Я подключился к Интернету и искал в Google, как это сделать. Я нашел этот веб-сайт здесь. Это подсказало мне, что мне нужно установить драйверы. У меня есть Mac (который также является новым для меня), и я нашел в разделе mac на этом сайт, что мне нужно установить homebrew, что я и сделал. Затем я выполнил следующие шаги в терминале.

  1. Установите UnixODBC, который требуется для всех баз данных.

    варить установить unixodbc

  2. Установите общие драйверы БД (необязательно)

    brew install freetds --with-unixodbc

    варить установить 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.

Я также запустил это

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

и я понял это

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

Я не понимаю, почему это так, потому что я выполнил шаги один и два.


person Nick    schedule 24.07.2020    source источник
comment
Похоже, что вторая ссылка для инструкций, которые вы включили, предназначена для подключения к традиционным базам данных ODBC, таким как Microsoft SQL Server, к которому FreeTDS используется для подключения. Вы не думали попробовать пакет RAthena, который был создан для этого? cran.r-project.org/web/packages/RAthena/ readme / README.html   -  person FlipperPA    schedule 25.07.2020
comment
Спасибо, что прислали мне ссылку. Это, вероятно, сработает для меня лучше, но у меня только что возник вопрос о параметрах, которые он показывает здесь con <- 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') Является ли идентификатор ключа доступа просто данными моего входа в систему, или это что-то особенное, к чему кто-то должен предоставить мне доступ.   -  person Nick    schedule 31.07.2020
comment
Я также хотел спросить, знаете ли вы, где я могу увидеть путь к ведру запросов. Я вижу, например, в Афине в настройке есть путь для местоположения результата запроса, но я не знаю, то же ли это   -  person Nick    schedule 31.07.2020
comment
ACCESS_KEY_ID и SECRET_ACCESS_KEY создаются вместе в Amazon Web Services IAM. Это в некоторой степени эквивалентно имени пользователя и паролю для API. Вам нужно будет сгенерировать пару, а затем дать ей соответствующие разрешения. К сожалению, на этом мои знания заканчиваются; Я не заядлый пользователь R или AWS. :)   -  person FlipperPA    schedule 31.07.2020


Ответы (1)


Это расширение того, о чем ранее упоминал @FlipperPA. s3_staging_dir - это сегмент AWS S3, в котором AWS Athena выводит свои результаты. По умолчанию 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)

Связанный вопрос о переполнении стека: Можно ли использовать Athena ODBC / JDBC для возврата местоположения результатов S3?

person Dyfan Jones    schedule 13.08.2020
comment
Спасибо за объяснение и показ, как можно получить s3_staging_dir. Я также просто хотел добавить для всех, кто читает, что s3_staging_dir также можно найти в athena, где вы пишете SQL-запросы. Если вы нажмете на настройки, он покажет вам путь прямо рядом с тем, где указано местоположение результата запроса. - person Nick; 24.08.2020