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
  1. odbcinst.ini および odbc.ini ファイルが配置されると予想される odbcinst のディレクトリを確認します。

    odbcinst -j
    
    Copy

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

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

注釈

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

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

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

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

  • バージョン3.6.0以上の場合:

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 2A3149C82551A34A
  • バージョン3.5.0の場合:

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 5A125630709DD64B
  • バージョン2.25.6から3.4.1までの場合:

    $ 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
    
    Copy
    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
    

    これが発生した場合は、次のコマンドを実行して 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 2A3149C82551A34A のキーのサンプルポリシーファイルは次のとおりです。

    <?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="2A3149C82551A34A"
    Description="Snowflake ODBC Driver DEB package"/>
    
    <Selection>
    <Required Type="origin" File="debsig.gpg" id="2A3149C82551A34A"/>
    </Selection>
    
    <Verification MinOptional="0">
    <Required Type="origin" File="debsig.gpg" id="2A3149C82551A34A"/>
    </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.8.0)であり、 GPG_KEY_ID は次のキー IDs のいずれかです。

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

    GPG キー ID

    3.6.0以上およびそれ以上

    2A3149C82551A34A

    3.5.0

    5A125630709DD64B

    2.25.6 から 3.4.1

    630D9F3CAB551AF3

    2.22.1 から 2.25.5

    37C7086698CB005C

    上記の設定では、 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
  1. .tarファイルからファイルを抽出します。

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

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

注釈

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

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

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

注釈

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

ドライバーがライブラリを見つけられない場合は、 Unable to locate SQLGetPrivateProfileString function エラーを表示します。この場合は、システム上のドライバーマネージャーの名前を使用して、 ODBCInstLib=<driver_manager_path>simba.snowflake.ini 構成ファイルに手動で設定する必要があります。詳細については、 ODBC ドライバーを構成する をご参照ください。

例: ODBCInstLib=/usr/lib/x86_64-linux-gnu/libodbcinst.so.2

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

注釈

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

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

sudo SF_ACCOUNT="<account>" dpkg -i snowflake-odbc-<version>.x86_64.deb
Copy

SF_ACCOUNT 変数が設定されていない場合、 dpkg コマンドは警告を表示します。このように変数をセットすると、Snowflake接続が odbc.ini ファイルに追加されます。

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

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"
Copy
iODBC Demonstration program
This program shows an interactive SQL processor
Driver Manager: 03.52.0709.0909
Driver: 2.12.70 (Snowflake)

SQL>

unixODBC によるテスト

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

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

例:

isql -v testodbc2 mary <password>
Copy
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>