Instalação e configuração do driver ODBC para Linux

O Linux usa fontes de dados nomeadas (DSNs) para conectar aplicativos clientes baseados no ODBC ao Snowflake. Você pode optar por instalar o driver ODBC usando o arquivo TGZ, o pacote RPM ou o pacote DEB oferecido no Snowflake Client Repository.

Neste tópico:

Pré-requisitos

Sistema operacional

Para obter uma lista dos sistemas operacionais compatíveis com os clientes Snowflake, consulte Suporte ao sistema operacional.

Com ODBC versão 3.0.1, o driver não suporta mais versões do CentOS 6.

Gerenciador de driver: iODBC ou unixODBC

Um gerenciador de driver é necessário para gerenciar a comunicação entre o Snowflake e o driver ODBC. O driver oferece suporte ao uso do iODBC ou do unixODBC como gerenciador de driver.

iODBC

Se o iODBC não estiver instalado no CentOS, como sudo, execute o seguinte comando:

$ yum install libiodbc
Copy

unixODBC

O unixODBC fornece os utilitários de linha de comando odbcinst e isql usados para instalar, configurar e testar o driver. Para verificar se o unixODBC está instalado, execute os seguintes comandos:

$ which odbcinst

$ which isql
Copy

Se o unixODBC não estiver instalado:

  1. Como sudo, execute os seguintes comandos:

    $ yum search unixODBC
    
    $ yum install unixODBC.x86_64
    
    Copy
  2. Verifique o diretório onde odbcinst espera que os arquivos odbcinst.ini e odbc.ini estejam localizados:

    $ odbcinst -j
    
    Copy

    A localização deve ser /etc.

Etapa 1: verificar a assinatura do pacote (somente RPM ou DEB) — opcional

Nota

Se você estiver instalando o driver ODBC usando yum ou o arquivo TGZ, pule esta etapa.

Se você estiver instalando o driver ODBC usando o pacote RPM ou DEB e quiser verificar a assinatura do pacote antes da instalação, execute as seguintes tarefas:

1.1: Baixar e importar a última chave pública do Snowflake

A partir do servidor de chaves públicas, baixe e importe a chave pública do Snowflake GPG para a versão do ODBC que você está usando:

  • Para a versão 2.25.6 e superior:

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 630D9F3CAB551AF3
  • Para a versão 2.22.1 a 2.25.5:

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 37C7086698CB005C
  • Para a versão 2.18.2 até 2.22.0:

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys EC218558EABB25A1
  • Para a versão 2.18.1 e inferior:

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 93DB296A69BE019A

Nota

Se esse comando falhar com o seguinte erro:

gpg: keyserver receive failed: Server indicated a failure
Copy

depois especifique que você deseja usar a porta 80 para o servidor de chaves:

gpg --keyserver hkp://keyserver.ubuntu.com:80  ...
Copy

1.2: Baixar o pacote RPM ou DEB do driver

Baixe o pacote no Snowflake Client Repository. Para obter mais detalhes, consulte Download do driver ODBC.

1.3: Verificar a assinatura do pacote RPM ou DEB do driver

Assinatura do pacote RPM

  1. Verifique se a chave foi importada com sucesso:

    $ gpg --list-keys
    
    Copy

    O comando deve exibir a chave do Snowflake.

  2. Verifique a assinatura:

    $ rpm -K snowflake-odbc-<version>.x86_64.rpm
    
    Copy

    Nota

    Se rpm não tiver a chave GPG que você importou, o comando informará que as assinaturas não são OK e vai gerar um aviso NOKEY:

    $ rpm -K snowflake-odbc-<version>.x86_64.rpm
    
    snowflake-odbc-<version>.x86_64.rpm: digests SIGNATURES NOT OK
    
    $ rpm -Kv snowflake-odbc-<version>.x86_64.rpm
    
    snowflake-odbc-<version>.rpm:
        Header V4 RSA/SHA1 Signature, key ID 98cb005c: NOKEY
        Header SHA1 digest: OK
        V4 RSA/SHA1 Signature, key ID 98cb005c: NOKEY
        MD5 digest: OK
    
    Copy

    Se isso ocorrer, execute os seguintes comandos para exportar a chave GPG, importar a chave para o rpm e verificar novamente a assinatura:

    $ gpg --export -a <GPG_KEY_ID> > odbc-signing-key.asc
    $ sudo rpm --import odbc-signing-key.asc
    $ rpm -K snowflake-odbc-<version>.x86_64.rpm
    
    Copy

    onde <GPG_KEY_ID> é a ID da chave que você instalou em 1.1: Baixar e importar a última chave pública do Snowflake.

Assinatura do pacote DEB

  1. Instale a ferramenta de verificação de assinatura do pacote:

    $ sudo apt-get install debsig-verify
    
    Copy
  2. Importe a chave pública para o token de autenticação:

    $ mkdir /usr/share/debsig/keyrings/<GPG_KEY_ID>
    $ gpg --export <GPG_KEY_ID> > snowflakeKey.asc
    $ touch /usr/share/debsig/keyrings/<GPG_KEY_ID>/debsig.gpg
    $ gpg --no-default-keyring --keyring /usr/share/debsig/keyrings/<GPG_KEY_ID>/debsig.gpg --import snowflakeKey.asc
    
    Copy

    onde <GPG_KEY_ID> é a ID da chave que você instalou em 1.1: Baixar e importar a última chave pública do Snowflake.

  3. Configure uma política para a chave. Para obter mais detalhes, consulte /usr/share/doc/debsig-verify. A política deve ser armazenada no diretório a seguir:

    /etc/debsig/policies/<GPG_KEY_ID>
    
    Copy

    onde <GPG_KEY_ID> é a ID da chave que você instalou em 1.1: Baixar e importar a última chave pública do Snowflake.

    Armazene a política em um arquivo chamado policy_name.pol, onde policy_name é o nome da política. Para o nome da política, você pode usar qualquer cadeia de caracteres, porém a cadeia não pode conter espaços em branco.

    Aqui está um exemplo de arquivo de política de uma chave com a ID 630D9F3CAB551AF3:

    <?xml version="1.0"?>
    <!DOCTYPE Policy SYSTEM "http://www.debian.org/debsig/1.0/policy.dtd">
    <Policy xmlns="https://www.debian.org/debsig/1.0/">
    <Origin Name="Snowflake Computing" id="630D9F3CAB551AF3"
    Description="Snowflake ODBC Driver DEB package"/>
    
    <Selection>
    <Required Type="origin" File="debsig.gpg" id="630D9F3CAB551AF3"/>
    </Selection>
    
    <Verification MinOptional="0">
    <Required Type="origin" File="debsig.gpg" id="630D9F3CAB551AF3"/>
    </Verification>
    
    </Policy>
  4. Verifique a assinatura:

    $ sudo debsig-verify snowflake-odbc-<version>.x86_64.deb
    
    Copy

Nota

Por padrão, a ferramenta de verificação de assinatura do pacote dpkg não verifica a assinatura quando você instala o pacote. Se você quiser verificar a assinatura toda vez que executar o dpkg, remova a linha --no-debsig no arquivo /etc/dpkg/dpkg.cfg.

1.4: Apagar a chave pública antiga do Snowflake — opcional

Seu ambiente local pode conter múltiplas chaves GPG. Entretanto, por razões de segurança, o Snowflake alterna periodicamente a chave pública GPG. Nossa prática recomendada é excluir a chave pública existente depois de confirmar que a última chave funciona com o último pacote assinado.

Para excluir a chave:

$ gpg --delete-key "Snowflake Computing"
Copy

Etapa 2: Instalar o driver ODBC

Instale o driver usando uma das seguintes abordagens:

Download e instalação do driver usando o yum

Com a versão 2.21.1 do driver ODBC (e versões posteriores), você pode usar o yum para baixar e instalar o driver.

Para baixar e instalar o driver ODBC do Snowflake para Linux usando o yum:

  1. Crie um arquivo chamado /etc/yum.repos.d/snowflake-odbc.repo e adicione o seguinte texto ao arquivo:

    [snowflake-odbc]
    name=snowflake-odbc
    baseurl=https://sfc-repo.snowflakecomputing.com/odbc/linux/<VERSION_NUMBER>/
    gpgkey=https://sfc-repo.snowflakecomputing.com/odbc/Snowkey-<GPG_KEY_ID>-gpg
    
    Copy

    em que VERSION_NUMBER é o número da versão específica do driver (por exemplo, 3.2.0) e GPG_KEY_ID é uma das seguintes IDs de chave:

    Versão do driver ODBC

    ID de chave GPG

    2.22.1 e superior

    630D9F3CAB551AF3

    Nas configurações acima, baseurl e gpgkey apontam para o Snowflake Client Repository no Amazon S3. Se você quiser usar o espelho nos blobs do Azure, mude o nome de host para https://sfc-repo.azure.snowflakecomputing.com/:

    [snowflake-odbc]
    name=snowflake-odbc
    baseurl=https://sfc-repo.azure.snowflakecomputing.com/odbc/linux/<VERSION_NUMBER>/
    gpgkey=https://sfc-repo.azure.snowflakecomputing.com/odbc/Snowkey-<GPG_KEY_ID>-gpg
    
    Copy
  2. Execute o seguinte comando para instalar o driver:

    yum install snowflake-odbc
    
    Copy

Instalação do arquivo TGZ

Para instalar o driver ODBC do Snowflake para Linux usando o arquivo TGZ que você baixou anteriormente.

  1. Copie o arquivo baixado (snowflake_linux_x8664_odbc-version.tgz) para um diretório de trabalho.

  2. Descompacte o arquivo:

    $ gunzip snowflake_linux_x8664_odbc-<version>.tgz
    
    Copy
  3. Extraia os arquivos do arquivo .tar:

    $ tar -xvf snowflake_linux_x8664_odbc-<version>.tar
    
    Copy
  4. Copie a pasta snowflake_odbc resultante para o diretório onde você deseja instalar o driver. Anote o nome desse diretório. Você precisará do local mais adiante nas instruções.

Instalação do pacote RPM

Nota

O pacote RPM requer o unixODBC como gerenciador de driver.

Para instalar o driver ODBC do Snowflake para Linux usando o pacote RPM que você baixou anteriormente, depois de verificar opcionalmente a assinatura do pacote, execute o seguinte comando:

$ yum install snowflake-odbc-<version>.x86_64.rpm
Copy

Nota

O diretório de instalação é /usr/lib64/snowflake/odbc/. Você precisará do local mais adiante nas instruções.

Se o driver não conseguir encontrar a biblioteca, ele exibirá um erro Unable to locate SQLGetPrivateProfileString function. Nesse caso, você deve definir ODBCInstLib=<driver_manager_path> manualmente no arquivo de configuração simba.snowflake.ini com o nome do gerenciador de driver em seu sistema. Para obter mais informações, consulte Configuração do driver ODBC.

Por exemplo, ODBCInstLib=/usr/lib/x86_64-linux-gnu/libodbcinst.so.2.

Instalação do pacote DEB

Nota

O pacote DEB requer o unixODBC como gerenciador de driver.

Para instalar o driver ODBC do Snowflake para Linux usando o pacote DEB que você baixou anteriormente, depois de verificar opcionalmente a assinatura do pacote, execute o seguinte comando:

$ sudo dpkg -i snowflake-odbc-<version>.x86_64.deb
Copy

O comando pode falhar se alguma dependência necessária para o gerenciador de pacotes não for instalada. Se isso acontecer, instale-as agora:

$ sudo apt-get install -f
Copy

Nota

O diretório de instalação é /usr/lib/snowflake/odbc/. Você precisará do local mais adiante nas instruções.

Etapa 3: configurar o ambiente (somente TGZ)

Nota

Se você instalou o driver ODBC usando o arquivo do pacote RPM ou DEB, pule esta etapa.

Se você instalou usando o arquivo TGZ, configure o ambiente usando o gerenciador de driver instalado (iODBC ou unixODBC).

Configuração com o iODBC

Em uma janela do terminal, mude para o diretório snowflake_odbc e execute o seguinte comando para instalar o ODBC do Snowflake:

$ ./iodbc_setup.sh
Copy

Esse script realiza as seguintes etapas:

  • Adiciona uma conexão do Snowflake ao seu arquivo /etc/odbc.ini de nível de sistema.

  • Adiciona as informações do driver do Snowflake ao seu arquivo /etc/odbcinst.ini de nível de sistema.

  • Adiciona todos os certificados da autoridade de certificação (CA) exigidos pelo driver ODBC do Snowflake ao seu arquivo simba.snowflake.ini de nível de sistema.

Ao executar iodbc_setup.sh, você não precisa definir nenhuma variável de ambiente.

Alternativamente, se você não quiser que o Snowflake mude suas configurações de sistema, adicione as seguintes variáveis de ambiente ao seu arquivo de configuração do shell (por exemplo, .profile, .bash_profile):

  • ODBCINI = <caminho>/conf/odbc.ini

  • ODBCINSTINI = <caminho>/conf/odbcinst.ini

Onde path é a localização do diretório snowflake_odbc. Se você tiver configurado outros drivers ODBC em seu sistema e planejar adicionar as entradas ODBC do Snowflake aos arquivos odbc.ini e odbcinst.ini existentes na próximo etapa, então aponte ODBCINI e ODBCINSTINI para a localização desses arquivos.

Configuração com o unixODBC

Em uma janela do terminal, mude para o diretório snowflake_odbc e execute o seguinte comando para instalar o ODBC do Snowflake:

$ ./unixodbc_setup.sh
Copy

Esse script realiza as seguintes etapas:

  • Adiciona uma conexão do Snowflake ao seu arquivo /etc/odbc.ini de nível de sistema.

  • Adiciona as informações do driver do Snowflake ao seu arquivo /etc/odbcinst.ini de nível de sistema.

  • Adiciona todos os certificados da autoridade de certificação (CA) exigidos pelo driver ODBC do Snowflake ao seu arquivo simba.snowflake.ini de nível de sistema.

Ao executar unixodbc_setup.sh, você não precisa definir nenhuma variável de ambiente.

Alternativamente, se você não quiser que o Snowflake mude suas configurações de sistema, adicione as seguintes variáveis de ambiente ao seu arquivo de configuração do shell, por exemplo .profile, .bash_profile:

  • ODBCSYSINI = <caminho>/conf/

Onde path é a localização do diretório snowflake_odbc. Se você configurou outros ODBC drivers em seu sistema e planeja adicionar as entradas ODBC do Snowflake aos seus arquivos odbc.ini e odbcinst.ini existentes no próximo passo, então aponte ODBCSYSINI para a localização desses arquivos.

Etapa 4: Configurar o driver ODBC

A configuração do driver ODBC requer a adição de entradas aos seguintes arquivos:

  • <caminho>/lib/simba.snowflake.ini

  • /etc/odbcinst.ini (ou <caminho>/conf/odbc.ini, se você estiver usando variáveis de ambiente)

  • /etc/odbc.ini (ou <caminho>/conf/odbcinst.ini, se você estiver usando variáveis de ambiente)

Onde path é a localização do diretório snowflake_odbc.

4.1: Arquivo simba.snowflake.ini (gerenciador de driver e registro em log)

Adicione as seguintes entradas ao arquivo simba.snowflake.ini:

ErrorMessagesPath=<path>/ErrorMessages/
LogPath=/tmp/
ODBCInstLib=<driver_manager_path>
CABundleFile=<path>/lib/cacert.pem
ANSIENCODING=UTF-8
Copy

Onde:

  • path é a localização do diretório snowflake_odbc.

  • driver_manager_path é a localização do diretório do gerenciador de driver:

    • iODBC: ODBCInstLib=libiodbcinst.so.2

    • unixODBC: ODBCInstLib=libodbcinst.so

    Nota

    Se o diretório do gerenciador de driver não estiver incluído na variável de ambiente LD_LIBRARY_PATH, especifique aqui o caminho completo para a biblioteca do gerenciador de driver.

Verifique se você tem permissões de gravação no caminho do log.

O parâmetro ANSIENCODING especifica a codificação de caracteres do aplicativo. O padrão é UTF-8. O parâmetro é destinado ao uso somente pelo Snowflake. Os clientes não devem alterar o valor.

4.2: Arquivo odbcinst.ini (registro do driver)

Adicione as seguintes entradas ao arquivo odbcinst.ini:

[ODBC Drivers]
SnowflakeDSIIDriver=Installed

[SnowflakeDSIIDriver]
APILevel=1
ConnectFunctions=YYY
Description=Snowflake DSII
Driver=/<path>/lib/libSnowflake.so
DriverODBCVer=03.52
SQLLevel=1
Copy

Onde path é a localização do diretório snowflake_odbc.

4.3: Arquivo odbc.ini (entradas DSN)

Para cada DSN, adicione as seguintes entradas ao arquivo odbc.ini:

  • DSN Nome e nome do driver (SnowflakeDSIIDriver), na forma de <nome_dsn> = <nome_driver>.

  • Parâmetros:

    • Parâmetros de conexão necessários, tais como server.

    • Qualquer parâmetro adicional e opcional, como role, database e warehouse padrão.

    Os parâmetros são especificados no formato <nome_parâmetro> = <valor>. Para obter mais detalhes sobre os parâmetros que podem ser definidos para cada DSN, consulte Parâmetros de configuração e conexão do ODBC.

O exemplo a seguir ilustra um arquivo odbc.ini que configura duas fontes de dados que utilizam formas diferentes de um identificador de conta no server URL:

  • testodbc1 usa um identificador de conta que usa um identificador de conta que especifica a conta myaccount na organização myorganization.

  • testodbc2 usa o localizador de conta xy12345 como identificador de conta.

    Note que testodbc2 utiliza uma conta no AWS na região Oeste dos US (Oregon). Se a conta estiver em uma região diferente ou se a conta usar um provedor de nuvem diferente, será necessário especificar segmentos adicionais após o localizador de conta.

    [ODBC Data Sources]
    testodbc1 = SnowflakeDSIIDriver
    testodbc2 = SnowflakeDSIIDriver
    
    
    [testodbc1]
    Driver      = /usr/jsmith/snowflake_odbc/lib/libSnowflake.so
    Description =
    server      = myorganization-myaccount.snowflakecomputing.com
    role        = sysadmin
    
    
    [testodbc2]
    Driver      = /usr/jsmith/snowflake_odbc/lib/libSnowflake.so
    Description =
    server      = xy12345.snowflakecomputing.com
    role        = analyst
    database    = sales
    warehouse   = analysis
    
    Copy

Observe o seguinte:

  • Ambos testodbc1 e testodbc2 têm funções padrão.

  • testodbc2 também tem um banco de dados e um warehouse padrão.

Etapa 5: Testar o driver ODBC

Teste o driver usando o gerenciador de driver instalado (iODBC ou unixODBC).

Teste com o iODBC

Teste as DSNs que você criou. Na linha de comando, especifique o nome da DSN, nome de login de usuário e senha do usuário, usando o seguinte formato:

iodbctest "DSN=<nome_dsn>;UID=<nome_usuário>;PWD=<senha>"

Por exemplo:

$ iodbctest "DSN=testodbc2;UID=mary;PWD=password"
iODBC Demonstration program
This program shows an interactive SQL processor
Driver Manager: 03.52.0709.0909
Driver: 2.12.70 (Snowflake)

SQL>
Copy

Teste com o unixODBC

Teste as DSNs que você criou usando o utilitário de linha de comando isql fornecido com o unixODBC.

Na linha de comando, especifique o nome da DSN, o nome de login de usuário e a senha do usuário.

Por exemplo:

$ isql -v testodbc2 mary <password>

Dec 14 22:57:50 INFO  2022078208 Driver::LogVersions: SDK Version: 09.04.09.1013
Dec 14 22:57:50 INFO  2022078208 Driver::LogVersions: DSII Version: 2.12.36
Dec 14 22:57:50 INFO  2022078208 SFConnection::connect: Tracing level: 4

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>
Copy