Требование: подключить и выполнить RScript с подключением из R к SnowflakeDB.
Я пытаюсь настроить образ Docker, который может взаимодействовать с базой данных Snowflake через R (используя либо RODBC, либо ODBC).
Ошибка: Проблема заключается в том, что при установке соединения не удается установить (или найти) необходимые драйверы Snowflake.
Ошибка: nanodbc/nanodbc.cpp:1021: 00000: [unixODBC][Driver Manager]Can't open lib 'SnowflakeDSIIDriver': file not found
Дал подробности подключения ниже
# Load required libraries
library(paws)
library(DBI)
library(odbc)
library(anomalize)
con <- DBI::dbConnect(
odbc::odbc(),
Driver = "SnowflakeDSIIDriver",
Server = "account.snowflakecomputing.com",
Database = "DEV",
Schema = "SCHEMA",
Warehouse = "WH_XS",
UID = username,
PWD = password
)
Вот мой текущий шаблон DockerFile
ARG AIRFLOW_VERSION=2.3.3
ARG PYTHON_RUNTIME_VERSION=3.8
FROM apache/airflow:${AIRFLOW_VERSION}-python${PYTHON_RUNTIME_VERSION}
SHELL ["/bin/bash", "-o", "pipefail", "-e", "-u", "-x", "-c"]
USER 0
RUN sudo apt-get update && apt-get install -y r-base r-base-core r-base-dev libssl-dev libcurl4-openssl-dev libgdal-dev && \
rm -r /var/lib/apt/lists/*
RUN R -e "install.packages(c('httr','shiny','jsonlite','data.table','forecast','anomalize','tibbletime','DBI','dplyr','dbplyr','odbc','ggplot2','DT','getip','shinyTime','paws','RODBC'), repos = 'https://cran.rstudio.com/')"
Ваш шаблон Dockerfile выглядит хорошо, ему нужны только шаги по установке драйвера. Попробуй это:
ARG AIRFLOW_VERSION=2.3.3
ARG PYTHON_RUNTIME_VERSION=3.8
FROM apache/airflow:${AIRFLOW_VERSION}-python${PYTHON_RUNTIME_VERSION}
SHELL ["/bin/bash", "-o", "pipefail", "-e", "-u", "-x", "-c"]
USER 0
RUN sudo apt-get update && apt-get install -y r-base r-base-core r-base-dev libssl-dev libcurl4-openssl-dev libgdal-dev && \
rm -r /var/lib/apt/lists/*
RUN R -e "install.packages(c('httr','shiny','jsonlite','data.table','forecast','anomalize','tibbletime','DBI','dplyr','dbplyr','odbc','ggplot2','DT','getip','shinyTime','paws','RODBC'), repos = 'https://cran.rstudio.com/')"
RUN curl -L -O https://sfc-repo.snowflakecomputing.com/odbc/linux/2.25.7/snowflake-odbc-2.25.7.x86_64.deb
RUN dpkg -i snowflake-odbc-2.25.7.x86_64.deb
ENTRYPOINT ["/bin/bash"]%
В приведенном выше примере я жестко закодировал ссылку для загрузки последней версии драйвера, чтобы сделать пример более наглядным, но вы также можете заменить ее переменной.
Кроме того, в строке подключения параметры UID и PWD должны быть написаны маленькими буквами, например uid и pwd, см. ниже мой пример:
library(DBI)
library(odbc)
con <- DBI::dbConnect(
odbc::odbc(),
Driver = "SnowflakeDSIIDriver",
Server = "account.snowflakecomputing.com",
Database = "DEV",
Schema = "SCHEMA",
Warehouse = "WH_XS",
uid = "USERNAME",
pwd = 'password'
)
mydata <- DBI::dbGetQuery(con,"SELECT CURRENT_TIMESTAMP()")
mydata