Linux用 ODBC ドライバーのインストールおよび構成

Linuxは、 ODBC ベースのクライアントアプリケーションをSnowflakeに接続するために、名前付きデータソース(DSNs)を使用します。Snowflakeクライアントリポジトリで提供される TGZ ファイル、 RPM パッケージ、または DEB パッケージを使用して、 ODBC ドライバーをインストールすることを選択できます。

このトピックの内容:

前提条件

オペレーティングシステム

Snowflakeクライアントでサポートされているオペレーティングシステムのリストについては、 オペレーティングシステムのサポート をご参照ください。

ODBC バージョン 3.0.1より、ドライバーは CentOS 6バージョンをサポートしなくなりました。

ドライバーマネージャー: iODBC または unixODBC

Snowflakeおよび ODBC ドライバー間の通信を管理するには、ドライバーマネージャーが必要です。ドライバーは、ドライバーマネージャーとして iODBC または unixODBC の使用をサポートしています。

iODBC

CentOS に sudo として iODBC がインストールされていない場合、次のコマンドを実行します。

$ yum install libiodbc
Copy

unixODBC

unixODBC ドライバのインストール、構成、およびテストに使用される odbcinst および isql コマンドラインユーティリティを提供します。unixODBC がインストールされているかどうかを確認するには、次のコマンドを実行します。

$ which odbcinst

$ which isql
Copy

unixODBC がインストールされていない場合、

  1. sudo として、次のコマンドを実行します。

    $ yum search unixODBC
    
    $ yum install unixODBC.x86_64
    
    Copy
  2. odbcinst.ini および odbc.ini ファイルが配置されると予想される odbcinst のディレクトリを確認します。

    $ odbcinst -j
    
    Copy

    場所は /etc である必要があります。

ステップ1: パッケージ署名を確認する(RPM または DEB のみ)--- オプション

注釈

yum または TGZ ファイル を使用して ODBC ドライバーをインストールする場合は、このステップをスキップしてください。

RPM または DEB パッケージを使用して ODBC ドライバーをインストールする際、インストール前にパッケージ署名を確認する場合は、次のタスクを実行します。

1.1: 最新のSnowflake公開キーをダウンロードおよびインポートする

公開キーサーバーから、使用している ODBC ドライバーのバージョンのSnowflake GPG 公開キーをダウンロードしてインポートします。

  • バージョン2.25.6以上の場合、

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 630D9F3CAB551AF3
  • バージョン2.22.1から2.25.5までの場合:

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 37C7086698CB005C
  • バージョン2.18.2から2.22.0までの場合:

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys EC218558EABB25A1
  • バージョン2.18.1以下の場合:

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

注釈

このコマンドが次のエラーを発生して失敗した場合、

gpg: keyserver receive failed: Server indicated a failure
Copy

次に、キーサーバーにポート80を使用することを指定します。

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

1.2: RPM または DEB ドライバーパッケージをダウンロードする

Snowflake Client Repositoryからパッケージをダウンロードします。詳細については、 ODBC ドライバーのダウンロード をご参照ください。

1.3: RPM または DEB ドライバーパッケージの署名を確認する

RPM パッケージ署名

  1. キーが正常にインポートされたことを確認します。

    $ gpg --list-keys
    
    Copy

    コマンドはSnowflakeキーを表示する必要があります。

  2. 署名を確認します。

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

    注釈

    rpm にインポートした GPG キーがない場合、コマンドは署名が OK でないことを報告し、 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

    これが発生した場合は、次のコマンドを実行して GPG キーをエクスポートし、キーを rpm にインポートして、署名を再度確認します。

    $ 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

    <GPG_KEY_ID>1.1: 最新のSnowflake公開キーをダウンロードおよびインポートする にインストールしたキーの ID です。

DEB パッケージ署名

  1. パッケージ署名確認ツールをインストールします。

    $ sudo apt-get install debsig-verify
    
    Copy
  2. 公開キーをキーリングにインポートします。

    $ 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

    <GPG_KEY_ID>1.1: 最新のSnowflake公開キーをダウンロードおよびインポートする にインストールしたキーの ID です。

  3. キーのポリシーを構成します。詳細については、 /usr/share/doc/debsig-verify をご参照ください。ポリシーは次のディレクトリに保存する必要があります。

    /etc/debsig/policies/<GPG_KEY_ID>
    
    Copy

    <GPG_KEY_ID>1.1: 最新のSnowflake公開キーをダウンロードおよびインポートする にインストールしたキーの ID です。

    ポリシーを policy_name.pol という名前のファイルに保存します。ここで、 policy_name はポリシーの名前です。ポリシー名には、任意のテキスト文字列を使用できますが、文字列に空白スペースを含めることはできません。

    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. 署名を確認します。

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

注釈

デフォルトでは、dpkgパッケージ署名確認ツールは、パッケージのインストール時に署名をチェックしません。dpkgを実行するたびに署名を確認する場合は、 /etc/dpkg/dpkg.cfg ファイルの --no-debsig 行を削除します。

1.4: 古いSnowflakeの公開キーを削除する --- オプション

ローカル環境には複数の GPG キーを含めることができます。ただし、セキュリティ上の理由から、Snowflakeは定期的に公開 GPG キーをローテーションします。ベストプラクティスとして、最新の署名済みパッケージで最新のキーが機能することを確認した後、既存の公開キーを削除することをお勧めします。

キーを削除するには、

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

ステップ2: ODBC ドライバーをインストールする

次のアプローチのいずれかを使用してドライバーをインストールします。

yumを使用したドライバーのダウンロードとインストール

ODBC ドライバーのバージョン2.21.1(およびそれ以降のバージョン)では、 yum を使用してドライバーをダウンロードし、インストールできます。

yum を使用してLinux用Snowflake ODBC ドライバーをダウンロードし、インストールするには、

  1. /etc/yum.repos.d/snowflake-odbc.repo という名前のファイルを作成し、次のテキストをファイルに追加します。

    [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

    ここで、 VERSION_NUMBER はドライバーの特定のバージョン番号(例: 3.1.4)であり、 GPG_KEY_ID は次のキー IDs のいずれかです。

    ODBC ドライバーのバージョン

    GPG キー ID

    2.22.1以上

    630D9F3CAB551AF3

    上記の設定では、 baseurlgpgkey は、Amazon S3の Snowflakeクライアントリポリトジ を指しています。代わりにAzure BLOBでミラーを使用する場合は、ホスト名を 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. 次のコマンドを実行して、ドライバーをインストールします。

    yum install snowflake-odbc
    
    Copy

TGZ ファイルのインストール

前にダウンロードした TGZ ファイル を使用してLinux用Snowflake ODBC ドライバーをインストールするには、

  1. ダウンロードしたファイル(snowflake_linux_x8664_odbc-version.tgz)を作業ディレクトリにコピーします。

  2. ファイルを解凍します。

    $ gunzip snowflake_linux_x8664_odbc-<version>.tgz
    
    Copy
  3. .tarファイルからファイルを抽出します。

    $ tar -xvf snowflake_linux_x8664_odbc-<version>.tar
    
    Copy
  4. 結果の snowflake_odbc フォルダーを、ドライバーをインストールするディレクトリにコピーします。このディレクトリをメモします。後の手順で場所が必要になります。

RPM パッケージのインストール

注釈

RPM パッケージには、ドライバーマネージャーとして unixODBC が必要です。

前にダウンロードした RPM パッケージ を使用してLinux用Snowflake ODBC ドライバーをインストールするには、 オプションでパッケージ署名を確認 した後に、次のコマンドを実行します。

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

注釈

インストールディレクトリは /usr/lib64/snowflake/odbc/ です。後の手順で場所が必要になります。

DEB パッケージのインストール

注釈

DEB パッケージには、ドライバーマネージャーとして unixODBC が必要です。

前にダウンロードした DEB パッケージ を使用してLinux用Snowflake ODBC ドライバーをインストールするには、 オプションでパッケージ署名を確認 した後に、次のコマンドを実行します。

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

パッケージマネージャーに必要な依存関係がインストールされていない場合、コマンドは失敗する可能性があります。その場合は、今すぐそれらをインストールしてください。

$ sudo apt-get install -f
Copy

注釈

インストールディレクトリは /usr/lib/snowflake/odbc/ です。後の手順で場所が必要になります。

ステップ3: 環境を構成する(TGZ のみ)

注釈

RPM または DEB パッケージファイルを使用して ODBC ドライバーをインストールした場合は、このステップをスキップしてください。

TGZ ファイルを使用してインストールした場合は、インストールされたドライバーマネージャー( iODBC または unixODBCのいずれか)を使用して環境を構成します。

iODBC で構成

ターミナルウィンドウで、 snowflake_odbc ディレクトリに移動し、次のコマンドを実行してSnowflake ODBCをインストールします。

$ ./iodbc_setup.sh
Copy

このスクリプトは、次のステップを完了します。

  • 1つのSnowflake接続をシステムレベルの /etc/odbc.ini ファイルに追加します。

  • Snowflakeドライバー情報をシステムレベルの /etc/odbcinst.ini ファイルに追加します。

  • Snowflake ODBC ドライバーに必要な、すべての証明機関(CA)の証明書をシステムレベルの simba.snowflake.ini ファイルに追加します。

iodbc_setup.sh を実行すると、環境変数を設定する必要がなくなります。

または、Snowflakeでシステム構成を変更したくない場合は、シェル構成ファイルに次の環境変数を追加します(例: .profile.bash_profile)。

  • ODBCINI = <パス>/conf/odbc.ini

  • ODBCINSTINI = <パス>/conf/odbcinst.ini

ここで、 pathsnowflake_odbc ディレクトリの場所です。システムで他の ODBC ドライバーを構成し、次のステップでSnowflake ODBC エントリを既存の odbc.ini および odbcinst.ini ファイルに追加する予定がある場合は、 ODBCINI および ODBCINSTINI がそれらのファイルの場所をポイントするようにします。

unixODBC で構成

ターミナルウィンドウで、 snowflake_odbc ディレクトリに移動し、次のコマンドを実行してSnowflake ODBCをインストールします。

$ ./unixodbc_setup.sh
Copy

このスクリプトは、次のステップを完了します。

  • Snowflake接続をシステムレベルの /etc/odbc.ini ファイルに追加します。

  • Snowflakeドライバー情報をシステムレベルの /etc/odbcinst.ini ファイルに追加します。

  • Snowflake ODBC ドライバーに必要な、すべての証明機関(CA)の証明書をシステムレベルの simba.snowflake.ini ファイルに追加します。

unixodbc_setup.sh を実行すると、環境変数を設定する必要がなくなります。

または、Snowflakeがシステム構成を変更したくない場合は、シェル構成ファイル(例: .profile.bash_profile)に次の環境変数を追加します。

  • ODBCSYSINI = <パス>/conf/

ここで、 pathsnowflake_odbc ディレクトリの場所です。システムで他の ODBC ドライバーを構成し、次のステップでSnowflake ODBC エントリを既存の odbc.ini および odbcinst.ini ファイルに追加する予定がある場合は、 ODBCSYSINI がそれらのファイルの場所をポイントするようにします。

ステップ4: ODBC ドライバーを構成する

ODBC ドライバーを構成するには、次のファイルにエントリを追加する必要があります。

  • <パス>/lib/simba.snowflake.ini

  • /etc/odbcinst.ini (または、環境変数を使用している場合は <パス>/conf/odbc.ini

  • /etc/odbc.ini (または、環境変数を使用している場合は <パス>/conf/odbcinst.ini

ここで、 pathsnowflake_odbc ディレクトリの場所です。

4.1: simba.snowflake.ini ファイル(ドライバーマネージャーおよびログ)

次のエントリを simba.snowflake.ini ファイルに追加します。

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

条件:

  • pathsnowflake_odbc ディレクトリの場所です。

  • driver_manager_path は、ドライバーマネージャーディレクトリの場所です。

    • iODBC : ODBCInstLib=libiodbcinst.so.2

    • unixODBC : ODBCInstLib=libodbcinst.so

    注釈

    ドライバーマネージャーディレクトリが LD_LIBRARY_PATH 環境変数に含まれていない場合は、ここでドライバーマネージャーライブラリへのフルパスを指定します。

ログパスに対する書き込み権限があることを確認します。

ANSIENCODING パラメーターは、アプリケーションの文字エンコードを指定します。デフォルトは UTF-8 です。このパラメーターは、Snowflakeによる使用に限定されています。お客様は値を変更しないでください。

4.2: odbcinst.ini ファイル(ドライバー登録)

次のエントリを 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

ここで、 pathsnowflake_odbc ディレクトリの場所です。

4.3: odbc.ini ファイル(DSN エントリ)

DSN ごと に、次のエントリを odbc.ini ファイルに追加します。

  • <DSN名> = <ドライバー名> 形式の DSN 名とドライバー名(SnowflakeDSIIDriver)。

  • パラメーター:

    • server などの必要な接続パラメーター。

    • デフォルト roledatabasewarehouse などの追加のオプションパラメーター。

    パラメーターは <パラメーター名> = <値> 形式で指定されます。各 DSN に設定できるパラメーターの詳細については、 ODBC 構成および接続パラメーター をご参照ください。

次の例は、 server URL で異なる形式の アカウント識別子 を使用する、2つのデータソースを構成する odbc.ini ファイルを示しています。

  • testodbc1 はアカウント識別子として、組織 myorganization でアカウント myaccount を指定する アカウント識別子 を使用します。

  • testodbc2 は、アカウント識別子として アカウントロケーター xy12345 を使用します。

    testodbc2 は、 AWS US 西部(オレゴン)リージョンのアカウントを使用しています。アカウントが別のリージョンにある場合、またはアカウントが別のクラウドプロバイダーを使用している場合は、 アカウントロケーターの後に追加のセグメントを指定する 必要があります。

    [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

次の点にご注意ください。

  • testodbc1testodbc2 の両方に既定のロールがあること

  • testodbc2 にも、既定のデータベースとウェアハウスがあること

ステップ5: ODBC ドライバーをテストする

インストールされたドライバーマネージャー(iODBC または unixODBC のいずれか)を使用して、ドライバーをテストします。

iODBC によるテスト

作成した DSNs をテストします。コマンドラインで、次の形式を使用して、 DSN 名、ユーザーログイン名、およびパスワードを指定します。

iodbctest "DSN=<DSN名>;UID=<ユーザー名>;PWD=<パスワード>"

例:

$ 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

unixODBC によるテスト

unixODBC で提供される isql コマンドラインユーティリティを使用して作成した DSNs をテストします。

コマンドラインで、 DSN 名、ユーザーログイン名、およびパスワードを指定します。

例:

$ 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