1
/
5

-Qiita記事Part.29-(Mac ARM) ODBCドライバーを利用してPHPでSnowflakeに接続する

こんにちは、ナイトレイインターン生の鈴木です。
Wantedlyをご覧の方に、ナイトレイのエンジニアがどのようなことをしているか知っていただきたく、Qiitaに公開している記事をストーリーに載せています。

今回の記事はGISエンジニアメンバー徳竹さんの記事です。
少しでも私たちに興味を持ってくれた方は下に表示される募集記事もご覧ください↓↓


ODBCドライバーについて

Snowflakeへの接続方法としては下記の選択肢があります。

Snowflake用 PHP PDO ドライバー | Snowflake Documentation
Snowflake用 PHP PDO ドライバーは、Snowflakeに接続し、すべての標準操作を実行できる PHP アプリケーションを開発するためのインターフェースを提供します。 Snowflakeクライアントでサポートされているオペレーティングシステムのリストについては、 オペレーティングシステムのサポート をご参照ください。 ドライバーのインストールと使用の手順については、 GitHub 内のGitHub PHP PDO ドライバーSnowflake用 をご参照ください。 ドライバーを設定したら、
https://docs.snowflake.com/ja/developer-guide/php-pdo/php-pdo-driver

https://docs.snowflake.com/ja/developer-guide/odbc/odbc-mac

私がPHPでSnowflakeに接続しようとした当時(2023-04-13)は、M1 MacでPDOドライバーを利用するにはバグがり、M1 MacユーザーはODBCドライバーを使ってアクセスする必要がありました。
ただし、現在ではrelease 2.0.0からはARM Macにも対応しているとのことです!(まだ試していませんが)

ですので、通常はPHP PDOドライバーを利用すれば良いと思いますが、本記事は備忘録として残したいと思います。


ODBCドライバーでの接続例

💡 作業環境は以下のとおりです。

  • チップ Apple M1
  • macOS Ventura 13.3
  • PHP8.1

ODBCドライバーのインストール

iODBCとODBCマネージャーのインストール

Snowflakeのドキュメントに従うとiODBCとODBCマネージャーをインストールすることになっています。

iODBCの方はもしかすると不要(使っていなそう)かもしれませんが、一応Snowflakeのドキュメントの手順に従ってインストールします。
また、ODBCマネージャーもインストールします。(こちらもなくても設定可能ですが、あったほうが設定しやすいです。)

ODBCドライバーのインストール

ODBCドライバーをダウンロードする際には、下記過去記事に注意点記載しているので、自身のアーキテクチャに合わせたものをダウンロードしてください。

M1 Mac (Apple silicon)のTableauからSnowflakeへ接続に使うODBCドライバーは"mac64"版を選択する! - Qiita
はじめに最近(もう結構前から?)、データウェアハウスのSnowflakeがかなり注目されていますよね!そこで、今回はTableauからSnowflakeへの接続をテストしてみました!その際にハ...
https://qiita.com/se_yataro/items/21a7fcac1adcbc6ddd6b

インストールはダウンロードしたpkgファイルをダイアログどおりに進めていけば良いです。

ODBCドライバーの設定

ODBCマネージャーをインストールした場合、アプリのユーティリティからODBCマネージャーを起動します。

ドライバタブからSnowflakeのドライバがインストールされていることを確認する。

システムDSNタブを開いてドライバの設定を行う。

追加をクリックして、表示されるダイアログで Snowflake のドライバを選択する。

下記の画面になるので各情報を入力する。

  • server: Snowflakeのサーバー名
  • uid: ユーザーネーム
  • pwd: ログインパスワード
  • roll: ロール
  • warehouse: ウェアハウス

設定が完了したら接続テストを行います。

ターミナルを起動して、下記のコマンドを実行します。(iODBC に付属の iodbctest コマンドラインユーティリティを使用したテスト)

"/Library/Application Support/iODBC/bin/iodbctest"

SQL> が表示されれば接続完了です。

PHPが参照しているODBCを確認する

下記コマンドでPHPが参照しているODBCの状況を確認します。

php -i | grep -i odbc

下記の画像例だと、ODBCは有効化されており、unixODBCが使われていることが分かる。(iODBCをインストールしたけれど、unixODBCを使っているようです(?))

unixODBCの情報を下記のコマンドで確認します。

odbcinst -j

下記画像例でいくと、
DRIVERS(ドライバーの情報を設定しているファイル)はhomebrewのフォルダ内にある。
SYSTEM DATA SOURCES(システムDSN設定)もhomebrewの中にある。
→つまり、ODBCマネージャーを使って作成したiniファイルを参照しておらず、homebrew内のiniファイルを参照している事がわかる。
※ODBCマネージャーを使用して作成したiniファイルは /Library/ODBC/odbc.ini にある。

ODBCマネージャーで作成したodbc.iniとodbcinst.iniファイルを上記で確認したフォルダ内のiniファイルに上書きする

PHPからの接続テスト

下記のコードを参考に接続テストをします。
odbc_connect()関数ではuser名とパスワードが引数として必須(?)のようで、iniファイルで設定しているものの、こちらでも入力している。
※下記のコードではtestdbというテスト用のデータベースを作ってある場合のクエリになっています。

<?php
// ODBCデータソース名
$dsn = 'snowflake';

// ユーザー名とパスワード
$user = 'ユーザーネーム';
$password = 'パスワード';

// SnowflakeへのODBC接続を確立する
$conn = odbc_connect($dsn, $user, $password);

if ($conn) {
echo "ODBC connection successful!\n";
} else {
echo "ODBC connection failed!\n";
}

// $tables = odbc_tables($conn);
// while (($row = odbc_fetch_array($tables))) {
// print_r($row);
// break; // further rows omitted for brevity
// }

// ロールやウェアハウス、テーブルなど変更可能
// odbc_exec($conn, "use role accountadmin");
// odbc_exec($conn, "use warehouse compute_wh");
// odbc_exec($conn, "use citibike");


// クエリを実行する testdb用
$query = "SELECT * FROM testschema.test_table";
$result = odbc_exec($conn, $query);

// 結果を出力する
while ($row = odbc_fetch_array($result)) {
echo $row['COL1'] . " " . $row['COL2'] . "\n";
}

// ODBC接続を切断する
odbc_close($conn);
echo "connection closed!";
?>

上記コードによる出力結果

以上で接続完了です!


最後に

私たちの会社、ナイトレイでは一緒に事業を盛り上げてくれるエンジニアを募集しています!
Web開発メンバー、GISエンジニア、サーバーサイドエンジニアなど複数ポジションで募集しているため、
「専攻分野を活かしたい」「横断的に様々な業務にチャレンジしてみたい」と言ったご要望も相談可能です!

✔︎ GISの使用経験があり、観光・まちづくり・交通・防災系などの分野でスキルを活かしてみたい
✔︎ ビッグデータの処理が好き!(達成感を感じられる)
✔︎ データベース構築、サーバー周りを触るのが好き
✔︎ 社内メンバーだけではなく顧客とのやり取りも実はけっこう好き
✔︎ 自社Webサービスの開発で事業の発展に携わってみたい
✔︎ 地理や地図が好きで、位置情報データにも興味を持っている

一つでも当てはまる方は是非お気軽にエントリーください!

Invitation from 株式会社ナイトレイ
If this story triggered your interest, have a chat with the team?
株式会社ナイトレイ's job postings

Weekly ranking

Show other rankings
Like 鈴木 梨子's Story
Let 鈴木 梨子's company know you're interested in their content