SnowSQL コマンドで Snowflake に接続する

記事タイトルとURLをコピーする

技術4課の宮本です。先日スタンディングデスクを導入したのですが、2日目にして何故か首を痛めてしまいました。人間の身体って脆いですね。

さて、今回は先日のブログ DWH製品の注目株!! Snowflake をさわってみた の続編です。前回はWebインターフェースでクエリを実行しましたが、今回はCLIクライアントである SnowSQL を試してみたいと思います。PostgreSQL でいうところの psql 、Oracle でいうところの sqlplus に相当するツールです。

SnowSQL のインストール

まずはインストールからです。https://docs.snowflake.com/ja/user-guide/snowsql-install-config.html にアクセスしてみましょう。

主要なプラットフォームに対応しているようです。

今回は手元の環境 (macOS Mojave 10.14.6) で試してみます。

$ brew cask install snowflake-snowsql

==> Downloading https://sfc-repo.snowflakecomputing.com/snowsql/bootstrap/1.2/darwin_x86_
######################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'snowflake-snowsql'.
==> Installing Cask snowflake-snowsql
==> Running installer for snowflake-snowsql; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:
installer: Package name is Snowflake SnowSQL
installer: Installing at base path /
installer: The install was successful.
🍺  snowflake-snowsql was successfully installed!

上手くいきましたね。インストールされたか確認してみます。

$ snowsql -v
Version: 1.2.5

無事インストールされているようです。

Snowflake に接続する

早速ログインしてみましょう。

$ snowsql -a XXXXXXXX.ap-northeast-1.aws -u miyamoto
Password:
* SnowSQL * v1.2.5
Type SQL statements or !help
miyamoto#COMPUTE_WH@(no database).(no schema)>

-a はアカウント名、-u はユーザー名を指定するオプションです。アカウント名の XXXXXXXX 部分はご自身のアカウント名に置き換えて下さい。(Webインターフェースにログインする際のURL https://<strong>XXXXXXXX.ap-northeast-1.aws</strong>.snowflakecomputing.com/console/login  で確認出来ます。)

アカウント名はプラットフォーム、リージョンによって微妙に形式変わってくるので、こちら のページの 地域別のアカウント名の例 を確認して下さい。

データベース、スキーマは選択されていない状態です。以下の様に設定します。

miyamoto#COMPUTE_WH@(no database).(no schema)>use database SNOWFLAKE_SAMPLE_DATA;
+----------------------------------+
| status                           |
|----------------------------------|
| Statement executed successfully. |
+----------------------------------+
1 Row(s) produced. Time Elapsed: 0.340s

miyamoto#COMPUTE_WH@SNOWFLAKE_SAMPLE_DATA.(no schema)>use SCHEMA TPCH_SF1;
+----------------------------------+
| status                           |
|----------------------------------|
| Statement executed successfully. |
+----------------------------------+
1 Row(s) produced. Time Elapsed: 0.666s

タイプするたびに補完候補が出てくれます。凄くよく出来ています。

ちなみにログイン時にデータベース(-d オプション)、スキーマ(-s オプション)を指定することも出来ます。

$ snowsql -a XXXXXXXX.ap-northeast-1.aws -u miyamoto -d SNOWFLAKE_SAMPLE_DATA -s TPCH_SF1
Password:
* SnowSQL * v1.2.5
Type SQL statements or !help
miyamoto#COMPUTE_WH@SNOWFLAKE_SAMPLE_DATA.TPCH_SF1>

クエリを実行する

miyamoto#COMPUTE_WH@SNOWFLAKE_SAMPLE_DATA.TPCH_SF1>SELECT * FROM CUSTOMER LIMIT 10;
+-----------+--------------------+---------------------------------------+-------------+-----------------+-----------+--------------+-------------------------------------------------------------------------------------------------------------------+
| C_CUSTKEY | C_NAME             | C_ADDRESS                             | C_NATIONKEY | C_PHONE         | C_ACCTBAL | C_MKTSEGMENT | C_COMMENT                                                                                                         |
|-----------+--------------------+---------------------------------------+-------------+-----------------+-----------+--------------+-------------------------------------------------------------------------------------------------------------------|
|         1 | Customer#000000001 | IVhzIApeRb ot,c,E                     |          15 | 25-989-741-2988 |    711.56 | BUILDING     | to the even, regular platelets. regular, ironic epitaphs nag e                                                    |
|         2 | Customer#000000002 | XSTf4,NCwDVaWNe6tEgvwfmRchLXak        |          13 | 23-768-687-3665 |    121.65 | AUTOMOBILE   | l accounts. blithely ironic theodolites integrate boldly: caref                                                   |
|         3 | Customer#000000003 | MG9kdTD2WBHm                          |           1 | 11-719-748-3364 |   7498.12 | AUTOMOBILE   |  deposits eat slyly ironic, even instructions. express foxes detect slyly. blithely even accounts abov            |
|         4 | Customer#000000004 | XxVSJsLAGtn                           |           4 | 14-128-190-5944 |   2866.83 | MACHINERY    |  requests. final, regular ideas sleep final accou                                                                 |
|         5 | Customer#000000005 | KvpyuHCplrB84WgAiGV6sYpZq7Tj          |           3 | 13-750-942-6364 |    794.47 | HOUSEHOLD    | n accounts will have to unwind. foxes cajole accor                                                                |
|         6 | Customer#000000006 | sKZz0CsnMD7mp4Xd0YrBvx,LREYKUWAh yVn  |          20 | 30-114-968-4951 |   7638.57 | AUTOMOBILE   | tions. even deposits boost according to the slyly bold packages. final accounts cajole requests. furious          |
|         7 | Customer#000000007 | TcGe5gaZNgVePxU5kRrvXBfkasDTea        |          18 | 28-190-982-9759 |   9561.95 | AUTOMOBILE   | ainst the ironic, express theodolites. express, even pinto beans among the exp                                    |
|         8 | Customer#000000008 | I0B10bB0AymmC, 0PrRYBCP1yGJ8xcBPmWhl5 |          17 | 27-147-574-9335 |   6819.74 | BUILDING     | among the slyly regular theodolites kindle blithely courts. carefully even theodolites haggle slyly along the ide |
|         9 | Customer#000000009 | xKiAFTjUsCuxfeleNqefumTrjS            |           8 | 18-338-906-3675 |   8324.07 | FURNITURE    | r theodolites according to the requests wake thinly excuses: pending requests haggle furiousl                     |
|        10 | Customer#000000010 | 6LrEaV6KR6PLVcgl2ArL Q3rqzLzcT1 v2    |           5 | 15-741-346-9870 |   2753.54 | HOUSEHOLD    | es regular deposits haggle. fur                                                                                   |
+-----------+--------------------+---------------------------------------+-------------+-----------------+-----------+--------------+-------------------------------------------------------------------------------------------------------------------+
10 Row(s) produced. Time Elapsed: 1.860s

テーブル形式で出力されます。キーワードを逐一補完してくれて最高です。

ctrl + d で接続を切ることが出来ます。

接続情報を設定ファイルで管理する

接続情報を都度入力するのは面倒ですよね。そんな時は設定ファイルを用意しましょう。Linux/macOS の場合は ~/.snowsql/config 、Windowsの場合は %USERPROFILE%.snowsql\config ファイルを開いて以下の様に追記します。

[connections.conn1]

accountname = XXXXXXX.ap-northeast-1.aws
username = miyamoto
password = your-password
dbname = SNOWFLAKE_SAMPLE_DATA
schemaname = TPCH_SF1

[connections.<name>] は接続情報を記載するセクションを意味します。接続情報には任意の名前をつけることが出来ます。(今回はconn1 という名前を付けました。)

パスワードは平文で保存される為、configファイルの取り扱いに注意して下さい。例えば、Linux/macOS の場合に chmod 700 ~/.snowsql/config の様に最小限のPermission を設定し、他のユーザーからは参照できない様にする等の対策を行いましょう。

用意したconfigを利用したログインを試してみます。

$ snowsql -c conn1
* SnowSQL * v1.2.5
Type SQL statements or !help
miyamoto#COMPUTE_WH@SNOWFLAKE_SAMPLE_DATA.TPCH_SF1>

-c オプションでconfigファイルに記載した接続情報の名前を指定します。

まとめ

SnowSQL で Snowflake にアクセスする方法をご紹介しました。タイプする度に補完候補が表示されるので、使っていて非常に気持ちの良いツールです。

次回は Python からのアクセスを試してみたいと思います。