Text⭐さぁ、手を動かすのだ⭐

Chapter 2: Snowflake環境のセットアップ

この章では、データパイプラインの中核となるデータウェアハウス「Snowflake」のセットアップを行います。 無料トライアルアカウントを作成し、基本的な操作に慣れていきましょう。

主な学習内容

  • Snowflake無料トライアルアカウントの作成
  • Snowsight (新UI) の基本操作
  • データベース、スキーマ、ウェアハウスの作成
  • サンプルデータのロードとクエリ実行

1. アカウント作成

まずは公式サイトから30日間の無料トライアルにサインアップします。 クレジットカードの登録は不要です。

Snowflake 無料トライアル

プラットフォームは「AWS」、リージョンは「Asia Pacific (Tokyo)」を選択することをおすすめします。
また、セキュリティやガバナンス系の機能の検証もできるようにするため、「Enterprise Edition」を選択しましょう。

2. Snowsightの確認

アカウント作成後、Snowsightと呼ばれる新しいWebインターフェースにログインします。 左側のメニューから「Projects」 > 「Worksheets」を開き、右上の + ボタンから新しいSQLワークシートを追加してみましょう。

初期確認クエリ
1 -- 現在のウェアハウス、DB、スキーマの確認
2 SELECT CURRENT_WAREHOUSE(), CURRENT_DATABASE(), CURRENT_SCHEMA();

3. 基本的な環境設定

まずはロールとウェアハウスを設定し、作業用のデータベースとスキーマを作成します。

基本環境設定
1 -- ロールの設定(SYSADMIN権限を使用)
2 USE ROLE SYSADMIN;
3
4 -- ウェアハウスの作成
5 CREATE WAREHOUSE IF NOT EXISTS TUTORIAL_WH
6 WAREHOUSE_SIZE = 'X-SMALL'
7 AUTO_SUSPEND = 60
8 INITIALLY_SUSPENDED = TRUE;
9
10 -- ウェアハウスの設定
11 USE WAREHOUSE TUTORIAL_WH;
12
13 -- 作業用データベースの作成
14 CREATE DATABASE IF NOT EXISTS TUTORIAL_DB;
15 USE DATABASE TUTORIAL_DB;
16
17 -- スキーマの作成
18 CREATE SCHEMA IF NOT EXISTS SAMPLE_SCHEMA;
19 USE SCHEMA SAMPLE_SCHEMA;

use roleやuse warehouseは、createコマンドを実行したタイミングで自動で設定されますが、訓練も兼ねて実行してもらいました。

4. サンプルテーブルの作成

従業員データを格納するテーブルを作成します。

テーブル作成
1 -- 従業員テーブルの作成
2 CREATE OR REPLACE TABLE employees (
3 id INTEGER,
4 name STRING,
5 department STRING,
6 salary INTEGER,
7 hire_date DATE
8 );
9
10 -- テーブル構造の確認
11 DESCRIBE TABLE employees;

5. CSVファイルのアップロードとデータロード

サンプルCSVファイルをダウンロードして、Snowflakeの内部ステージにアップロードし、データをロードします。

図1: Snowflakeでの内部ステージ作成画面

ステージにファイルをアップロード後、以下のSQLコマンドでデータをロードします:

データロード
1 -- ステージ内のファイルを確認
2 LIST @my_stage;
3
4 -- CSVファイルからデータをロード
5 COPY INTO employees
6 FROM @my_stage/sample_employees.csv
7 FILE_FORMAT = (
8 TYPE = 'CSV'
9 FIELD_DELIMITER = ','
10 RECORD_DELIMITER = '\n'
11 SKIP_HEADER = 1
12 FIELD_OPTIONALLY_ENCLOSED_BY = '"'
13 );
14
15 -- データが正しくロードされたか確認
16 SELECT * FROM employees;
17 SELECT COUNT(*) FROM employees;

6. 基本的なクエリの実行

ロードしたデータに対して基本的な分析クエリを実行してみましょう。

分析クエリ例
1 -- 部署別の平均給与
2 SELECT
3 department,
4 ROUND(AVG(salary), 0) as avg_salary,
5 COUNT(*) as employee_count
6 FROM employees
7 GROUP BY department
8 ORDER BY avg_salary DESC;
9
10 -- 入社年別の従業員数
11 SELECT
12 YEAR(hire_date) as hire_year,
13 COUNT(*) as employee_count
14 FROM employees
15 GROUP BY YEAR(hire_date)
16 ORDER BY hire_year;
17
18 -- 給与の高い順に従業員を表示
19 SELECT name, department, salary
20 FROM employees
21 ORDER BY salary DESC
22 LIMIT 5;

これでSnowflakeの基本的なセットアップとデータロードが完了しました。

7. リソースの削除

作業完了後は、不要なリソースを削除してクリーンアップしましょう。

リソース削除
1 -- データベースの削除
2 DROP DATABASE IF EXISTS TUTORIAL_DB;
3
4 -- dbt関連リソースの削除
5 DROP DATABASE IF EXISTS dbt_tutorial;

次章では、このSnowflake環境にdbtから接続し、最初のデータモデルを構築していきます。

8. dbt接続用ユーザーとキーペア認証の設定

次章でのdbt接続に備えて、専用のdbtユーザーを作成し、セキュアなキーペア認証を設定します。 パスワード認証よりも安全で、自動化にも適した認証方式です。

手順1: dbt専用ユーザーとロールの作成

dbtユーザー・ロール作成
1 -- Step 1: USERADMINロールでユーザーとロールを作成
2 USE ROLE USERADMIN;
3
4 -- 1. dbt専用ロールを作成
5 CREATE ROLE IF NOT EXISTS dbt_role
6 COMMENT = 'Role for dbt operations';
7
8 -- 2. sysadminロールを親ロールに設定
9 GRANT ROLE dbt_role to ROLE SYSADMIN;
10
11 -- 3. dbt専用ユーザーを作成(キーペア認証専用)
12 CREATE USER IF NOT EXISTS dbt_user
13 PASSWORD = NULL -- パスワード認証を無効化
14 COMMENT = 'dbt development user'
15 DEFAULT_WAREHOUSE = 'dbt_wh'
16 DEFAULT_ROLE = 'dbt_role';
17
18 -- 4. ロールにユーザーを割り当て
19 GRANT ROLE dbt_role TO USER dbt_user;
20
21 -- Step 2: SYSADMINロールでデータベースとウェアハウスを作成・権限付与
22 USE ROLE SYSADMIN;
23
24 -- 4. dbt専用ウェアハウスを作成
25 CREATE WAREHOUSE IF NOT EXISTS dbt_wh
26 WAREHOUSE_SIZE = 'X-SMALL'
27 AUTO_SUSPEND = 60
28 INITIALLY_SUSPENDED = TRUE
29 COMMENT = 'Warehouse for dbt operations';
30
31 -- 5. dbt開発用データベースを作成
32 CREATE DATABASE IF NOT EXISTS dbt_tutorial
33 COMMENT = 'Database for dbt tutorial';
34
35 -- 6. ロールに必要な権限を付与
36 -- データベースの使用権限
37 GRANT USAGE ON DATABASE dbt_tutorial TO ROLE dbt_role;
38 GRANT CREATE SCHEMA ON DATABASE dbt_tutorial TO ROLE dbt_role;
39
40 -- ウェアハウスの使用権限
41 GRANT USAGE ON WAREHOUSE dbt_wh TO ROLE dbt_role;

手順2: 権限とアクセス確認

権限確認とアクセステスト
1 -- Step 3: 作成したユーザーとロールの確認
2 -- USERADMINロールで確認
3 USE ROLE USERADMIN;
4 SHOW USERS LIKE 'dbt_user';
5 SHOW ROLES LIKE 'dbt_role';
6
7 DESC USER dbt_user;
8
9 -- SYSADMINロールで権限確認
10 USE ROLE SYSADMIN;
11 SHOW GRANTS TO ROLE dbt_role;
12 SHOW GRANTS TO USER dbt_user;
13
14 -- Step 4: dbt_userでのログインテスト
15 -- ※キーペア認証設定後に新しいワークシートまたはセッションで以下を実行
16 USE ROLE dbt_role;
17 USE WAREHOUSE dbt_wh;
18 USE DATABASE dbt_tutorial;
19
20 -- 基本的な操作が可能か確認
21 SELECT CURRENT_USER(), CURRENT_ROLE(), CURRENT_WAREHOUSE(), CURRENT_DATABASE();
22
23 -- スキーマ作成権限の確認
24 CREATE SCHEMA IF NOT EXISTS dbt_tutorial.dbt_test;
25
26 -- テーブル作成権限の確認
27 CREATE OR REPLACE TABLE test_dbt_access (
28 id INTEGER,
29 test_message STRING
30 );
31
32 INSERT INTO test_dbt_access VALUES (1, 'dbt access test successful');
33 SELECT * FROM test_dbt_access;
34
35 -- テストスキーマを削除
36 DROP SCHEMA dbt_tutorial.dbt_test;

これでSnowflake側のdbt接続準備が完了しました。
次章では、Mac環境でDevcontainerをセットアップし、キーペア認証を設定してdbt開発環境を構築します。

Sponsored by

スポンサーを募集中。紹介コンテンツもご用意しますので、ご興味あればお問い合わせください。