こんにちは、ナイトレイインターン生の鈴木です。 Wantedlyをご覧の方に、ナイトレイのエンジニアがどのようなことをしているか知っていただきたく、Qiitaに公開している記事をストーリーに載せています。
今回の記事はGISエンジニアメンバー徳竹さんの記事です。 少しでも私たちに興味を持ってくれた方は下に表示される募集記事もご覧ください↓↓
ODBCドライバーについて Snowflakeへの接続方法としては下記の選択肢があります。
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ドライバーをダウンロードする際には、下記過去記事に注意点記載しているので、自身のアーキテクチャに合わせたものをダウンロードしてください。
インストールはダウンロードした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サービスの開発で事業の発展に携わってみたい ✔︎ 地理や地図が好きで、位置情報データにも興味を持っている
一つでも当てはまる方は是非お気軽にエントリーください!