見出し画像

ExcelとSnowflakeを接続する(EXCELERATOR)

こんにちは!! コグラフSSD−2事業部のルイスです。
本日、ExcelからSnowflakeにデータを取得、登録、更新する方法を紹介したいと思います。この記事に使うツールはSnowflakeやMicrosoft・Excelは必要です。

Exceleratorは、ExcelテーブルからSnowflakeのデータベースにデータを転送する際に非常に便利なツールです。このマイクロソフトのツールにアドインされた拡張機能です。ご存じない方のために、今日はそのインストール方法と使い方をご紹介します。


ODBCをインストール

Exceleratorを使用する最初のステップは、コンピュータにODBCをインストールすることです。そのためにはまず、お使いのウィンドウズ・システムが32ビットか64ビットかを確認する必要があります。

以下のリンクで、オペレーティングシステムに応じたodbcを見つけることができます。ダウンロードし、インストールしてください。

権利を追加する

次のステップは、Snowflakeの内部と外部の両方で作成、変更、削除などができる十分な権限を持つロールをSnowflakeに作成することです。このロールは、Snowflakeの管理者ロールでのみ作成できます。
ロールを作成するには、Snowflakeワークシートで以下のプログラムを実行します。

/* ----------------------- Snowflake Excel Integration ------------------------
    This script is only needed when updating Snowflake from Excel. 
	An alternative to running this script, is to grant the user's role the 'Create Stage' and 'Create Table' privileges on the schema they will login to.

	This script allows for update from Excel without changing the user's role directly. Instead, a new role is created, 'ExcelAnalyst',  and assigned to the user's role.
	To allow multiple roles to have update access, run this script one time for the first role and then assign the 'ExcelAnalyst' role manually to the other roles.
	
	To run this script, use either role ACCOUNTADMIN or SECURITYADMIN
	This script creates a role named 'ExcelAnalyst' that will be granted to the role specified below as 'existingUserRole'. This is the role that has been granted to the Excel user.
	Before running this scripts update the following placeholders with values specific to your environment
	<existingUserRole>, <database>, <schema>, <warehouse>
	
*/

-------------- Update this section -----------------------------------
-- User name and role that the user will login with 
set existingUserRole = '<existingUserRole>';
 -- database and schema where you will create the Snowflake Excel Integration stored procedures
set databaseName = '<database>';
set schemaName = '<schema>';
--warehouse that you will use
set warehouseName = '<warehouse>';
----------------------------------------------------------------
set roleName = 'ExcelAnalyst';
set databaseAndSchema = concat($databaseName,'.',$schemaName);

create role IF NOT EXISTS IDENTIFIER($roleName);
grant role IDENTIFIER($roleName) to role IDENTIFIER($existingUserRole);

grant create stage on schema IDENTIFIER($databaseAndSchema) to role IDENTIFIER($roleName);
-- For rollback functionality
grant create table on schema IDENTIFIER($databaseAndSchema) to role IDENTIFIER($roleName);

------------------------------------ For advanced feature: Auto-generate Data Types ------------------------------------ 
-- Grant access to the DB and Schema where stored procs are created
grant usage on database IDENTIFIER($databaseName)  to role IDENTIFIER($roleName);
grant usage on schema IDENTIFIER($databaseAndSchema) to role IDENTIFIER($roleName);
-- Grant access to the stored procs
grant usage on future procedures in schema IDENTIFIER($databaseAndSchema) to role IDENTIFIER($roleName);
grant usage on future functions in schema IDENTIFIER($databaseAndSchema) to role IDENTIFIER($roleName);
grant usage on all procedures in schema IDENTIFIER($databaseAndSchema) to role IDENTIFIER($roleName);
grant usage on all functions in schema IDENTIFIER($databaseAndSchema) to role IDENTIFIER($roleName);

前のコードを修正する前に、Snowflakeのデータおよびユーザベースの情報を更新してください。修正は完了であればコードを実行してください。

-- ユーザがログインするユーザ名とロール
set existingUserRole = '<existingUserRole>';
-- Snowflake Excel Integration ストアドプロシージャを作成するデータベースとスキーマ
set databaseName = '<database>';
set schemaName = '<schema>';
--使用する倉庫
set warehouseName = '<warehouse>';
コードに疑問がある場合は、以下のGithubリンクを参照されたい。

Exceleratorのエクセルアドインのインストール

次に、読み取り専用アドインとアドイン自体をインストールする必要があります。どちらも以下のリンクから入手できます。一度ダウンロードしたら、前提条件があるのでインストールを始めないことが重要です。

https://github.com/Snowflake-Labs/Excelerator/blob/master/SnowflakeExcelAddinReadOnly.xlam

https://github.com/Snowflake-Labs/Excelerator/blob/master/SnowflakeExcelAddin.xlam

各ファイルをダウンロードすると、ファイルを右クリックをして、プロパティーのセキュリティーの「許可する」にチェックをしてから保存します。
もし「許可」するにチェックボックスはありませんなら、そのままで次のステップに移動してください。

保存するとExcelを起動してアドインをインストールします。
Excelを開いて、ファイルにクリックをしてください。表しているメニューの中にその他、オプションを選択してください。
そこにアドインというタブでクリックし、設定(G)に押してください。
アドインウインドで参照(B)を押してから、ダウンロードした二つのアドインを選択し、OKボタンを押してください。
最後に次のフォルダーを作成してください。

C:/temp/Snowflake
ツールが正しくインストールされていることを確認するには、新しいエクセルのワークブックを開きます。Excelのホームの中にSnowflakeタブを表しています。

DevelopersIO

使い方

Exceleratorがインストールされたので、それを使ってデータベースに接続しましょう。
リボンにある「Connect」をクリックしてSnowflakeに接続します。権利を追加するステップで設定された情報を記入します。

DevelopersIO

接続が確認されたら、クエリーを実行することができます。
DEMO_DBというデータベースのPUBLICスキーマに、REGIONというテーブルがあるとしましょう。以下のクエリを実行してみましょう。

SELECT * FROM "DEMO_DB.PUBLIC.REGION"
DevelopersIO

クエリが実行され、結果がExcel上に表示されました。その結果を普通にCSVファイルに保存できます。

DevelopersIO

おわり

この例では、SnowflakeからExcelに直接データを表示するクエリのみを実行していますが、ExcelからSnowflakeにテーブルを登録したり、更新したりすることもできます。Snowflakeタブに表示されるアップロードオプションを選択し、必要なデータを挿入するだけです。

「SnowflakeのデータをExcelに取り込んで簡単な処理をしたい」と考えている人にとって、Excellatorは非常に使いやすいツールだと思います。データサイエンティストやデータエンジニアとして日々の業務に役立ててほしいです。
それではまた次回、お会いしましょう。


この記事が気に入ったらサポートをしてみませんか?