SnowflakeにExcelから接続できるアドオン「Excelerator」を試してみた

2020.12.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。

先日、GitHubのSnowflake Labsに「Excelerator」なるExcelアドインツールのリポジトリがあるというのをお見かけしたので、早速ためしてみました。

GitHubのリポジトリはこちらです。こちらのREADMEに沿って試していきます。

!!!ご注意!!!

リポジトリのREADMEにも記載されているとおり、「Excelerator」はSnowflake社を含め、どこからもサポートされていません! 利用にあたっては細心の注意が必要で、自己責任での利用となりますのでご注意ください。

Excelerator is not a supported product by Snowflake or any company. Excelerator will write data to the Snowflake database and should be used with great care. Use at your own risk.

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

では、さっそく進めていきます。利用には、まずODBCドライバのインストールが必要となります。ローカル環境のExcelが32bitバージョンか、64bitバージョンかによって、どちらかのODBCドライバをインストールします。

私の環境のExcelは「Office 2016の64bitバージョン」だったので、以下のリンク先から「win64」の「latest」のODBCドライバをダウンロードしてインストールしました。

Exceleratorのインストール

Step 1 (optional): Create Stored Procedures in Snowflake

「Data Type Auto-generation」機能を利用する場合だけ必要なオプションとのことだったので、今回はスキップします。

Step 2: Set Required Privileges

権限まわりの適切な設定についてです。こちらは、テーブルレベルの権限以外の適切な権限を持ったロールを作成してくれるスクリプトが用意されていたので、利用します。

Excelerator/SnowflakeExcelAddin_Create_Role.sql at master · Snowflake-Labs/Excelerator

値を設定するセクションは以下のようにしました。なお、スクリプトの注意書きにある通り、実行にはACCOUNTADMINまたはSECURITYADMINロールが必要です。

-------------- Update this section -----------------------------------
-- User name and role that the user will login with 
set existingUserRole = 'SYSADMIN';
 -- database and schema where you will create the Snowflake Excel Integration stored procedures
set databaseName = 'DEMO_DB';
set schemaName = 'PUBLIC';
--warehouse that you will use
set warehouseName = 'COMPUTE_WH';
----------------------------------------------------------------

スクリプトを実行すると「ExcelAnalyst」ロールが作成されました。ただ、WAREHOUSEへの権限付与が出来ていないようなので、以下の行をスクリプトの最後に追加してクエリを実行して付与しておきます。

grant usage on warehouse IDENTIFIER($warehouseName) TO IDENTIFIER($roleName);
grant operate on warehouse IDENTIFIER($warehouseName) TO IDENTIFIER($roleName);

ここでついでにサンプル用のテーブルを作成しておきます。以下のクエリでサンプルデータのテーブルSNOWFLAKE_SAMPLE_DATA.TPCH_SF1.REGIONを、上記で設定したDEMO_DBPUBLICスキーマに作成しておきます。

USE ROLE EXCELANALYST;
USE WAREHOUSE COMPUTE_WH;
USE DATABASE DEMO_DB;
USE SCHEMA PUBLIC;

CREATE TABLE IF NOT EXISTS REGION AS SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.REGION;

これでSnowflake側は準備OKです。

Step 3 – Install Excel Add-in

最後にExcelアドインのインストールです。

読み込み専用バージョンの「SnowflakeExcelAdd-InReadOnly.xlam」と、読み書きバージョンの「SnowflakeExcelAdd-In.xlam」が用意されていますが、今回は読み込み専用バージョンの「SnowflakeExcelAdd-InReadOnly.xlam」をダウンロードしてインストールします。

まずは、以下から「Download」をクリックしてダウンロードします。

Excelerator/SnowflakeExcelAddinReadOnly.xlam at master · Snowflake-Labs/Excelerator

ダウンロードしたら、今回はC:\opt\Excel\Exceleratorというフォルダを作成し、そこにSnowflakeExcelAddinReadOnly.xlamを保存しました。

保存したらExcelを起動してアドインをインストールします。「ファイル > オプション」からオプションダイアログを開き、「アドイン」からアドイン設定を開きます。

次に「参照...」から先程のファイルを参照して指定します。

読み込まれたら「OK」をクリックします。

すると、リボンの「ホーム」に「Snowflake」が追加されました!

Exceleratorを使ってみる

では、早速使ってみましょう!

リボンにある「Connect」をクリックしてSnowflakeに接続します。上記の「Step.2」で設定した情報と、作成したロール「EXCELANALYST」を利用して接続します。

接続できたらリボンにある「Query」をクリックしてクエリダイアログを開きます。すると実行したいクエリの編集画面になります。

事前に準備していたテーブル「REGION」が既に「Build SQL」の「Table / View」に出ているので、そのまま「Columns」の「All」ボタンをクリックしてSQLクエリを生成し「Execute」でクエリを実行してみます。

クエリが実行され、結果がExcel上に表示されました!

データ量が多いと大変そうですが、ある程度のものであればこれで簡単にExcelで取得できますね。

おまけ

実は試した際に、Snowflakeへの接続エラーが発生し、かなり悩んでIssueチケットでやりとりさせていただいていました。(WebコンソールやSnowSQL、SnowCDは繋がるのに、ODBCだけ繋がらなかった)

原因としては、利用しているアンチウィルスソフトESET Endpoint Securityの機能により、SnowflakeへのODBC接続の際にSSL/TLS通信がブロックされておりエラーが起きていました。もし同様のエラーが起きている場合には、こちらを確認いただくと良いかもしれません。

まとめ

以上、SnowflakeにExcelから接続できるアドオン「Excelerator」を試してみました!「ExcelでSnowflakeからデータ取得し、簡単な加工などをしたい」というケースなどに便利なアドオンかと思いました。

どなたかのお役に立てば幸いです。それでは!