この記事は約3分で読めます。
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。
技術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 からのアクセスを試してみたいと思います。