前回書いた下記の投稿で、ID/パスワードをjsonファイルに保存しておいて、それを読み込んでSnowflakeに接続するのを試しました。
実際は会社で使う環境などではSSO(シングルサインオン)で使っていて、パスワードを設定していないケースもあると思います。
SSOでSnowflakeに接続するということを試してみます。
前回の投稿の
-
仮想環境作成
-
jupyter notebookでの操作
までは全く同じなので省略します。
jupyter notebook内でのpythonのファイルは別ファイルで新たに用意してもいいかもですね。
sso_testというpythonのファイルを「▼New」から作りました。 -
Snowflakeへの接続設定
からが異なります。
Snowflakeに接続
Snowflake Communityのこのページを参考にさせてもらいました。
jupyter notebookでやっていきます。
import snowflake.connector
import sys
con = snowflake.connector.connect(
user="xxxxx",
account="xxxxx",
authenticator="externalbrowser",
)
authenticator="externalbrowser"・・・外部ブラウザで認証する
という指定なんだと思います。
SSO接続のキモがここですね。
前回の投稿の後、Sakatokuさんからも教えてもらってました。
これを実行するとブラウザ別タブで以下のメッセージが出ました。
「confirmed」だからOKっぽいです。
「このwindowをcloseしていいよ」とも書いていますので、タブは閉じちゃいましょう。
jupyter notebookのタブに戻ると、何やらメッセージが出てました。
ではSnowflakeを操作してみます。
cur = con.cursor()
try:
cur.execute("USE ROLE SYSADMIN")
cur.execute("USE WAREHOUSE COMPUTE_WH")
cur.execute("USE DATABASE TEST_DB")
cur.execute("USE SCHEMA TEST_SCHEMA")
cur.execute("select * from test_json")
row=cur.fetchall()
for r in row:
print(r)
finally:
cur.close()
test_jsonテーブルからselectして結果を出力します。
3行出力できました。
バッチリSnowflakeにつながってます。
同じ結果ですね。
まとめ
会社のSSOユーザーでもこんな感じで接続ができることが実証できました。