■ はじめに
https://dk521123.hatenablog.com/entry/2021/11/02/130111
の続き。 既に出来合いのシステムの Snowflake を触りだしたのだが、 やっぱり、ちゃんと学びたいと思った。 Snowflakeは、30日間無料トライアルでの使用があるので 基本的な操作をメモしておく。 また、2021/11/22現在のところ、 セミナーを探していたら、初心者用のセミナーがでてきたので それらと組み合わせて学習するのもありかも。
目次
【1】Snowflakeアカウント登録 0)前提条件 1)手順 - 概要 【2】Snowflakeの操作 1)Web UIからのGUI操作 2)Web UIからのSQL実行による操作 【3】Snowflake のログイン / Web UI へのアクセス 【4】サンプル 例1:Hello world a) Database/Schema/Table/Warehouse 作成 b) SQL によるデータロード (INSERT) 例2:読み取り専用ロール・ユーザ作成 a) 読み取り専用ロールのカスタムロール作成 b) ロール階層の上位レベルロールを割り当てる c) 各オブジェクトに権限付与 d) 読み取り専用ユーザ作成 e) 動作確認
【1】Snowflakeアカウント登録方法
0)前提条件
* 登録用のEmail
1)手順 - 概要
以下のSnowflakeのトライアルページにアクセスする
各項目を入力して、Emailが届くので、Activationすれば 後は、流れで使えるようになる => 詳細は、以下のサイト参照。
https://knowledge.insight-lab.co.jp/snowflake/beginner/free-trial
https://dev.classmethod.jp/articles/snowflake-trial/
【2】Snowflakeの操作
大きく分けて、以下の2通りがある。 ~~~~~~~~~~~~ 1)Web UIからのGUI操作 2)Web UIからのCLI実行による操作 ~~~~~~~~~~~~
1)Web UIからのGUI操作
* Web UI を通して、操作する
例:データベース作成
[1] Web UI から [データベース]-[作成(+)]を選択 [2] データベース名(ex. hello_world)を入力し、「完了」ボタン押下
2)Web UIからのSQL実行による操作
* Web UI の ワークシート上で、SQLを実行して操作する
例:データベース作成
[1] Web UI から [ワークシート]を選択 [2] 以下のSQLを入力し、「実行」ボタン押下 ~~~~~~~~~~~ create database hello_world2; ~~~~~~~~~~~
【3】Snowflake のログイン / Web UI へのアクセス
* メール(件名:「Welcome To Snowflake!」)の中に 「LOGIN TO IN SNOWFLAKE」ボタンを押下すると、 ログイン画面に遷移できる => 適切なログイン情報でログインできると Snowflake の Web UI にアクセスできる
【4】サンプル
例1:Hello world
a) Database/Schema/Table/Warehouse 作成
-- Database作成 CREATE DATABASE demo_database; -- DROP DATABASE demo_database; -- Schema作成 CREATE SCHEMA demo_database.demo_schema; -- DROP SCHEMA demo_database.demo_hello_schema; -- Table作成 CREATE TABLE demo_database.demo_schema.demo_hello ( id STRING , name STRING ); -- DROP TABLE demo_database.demo_schema.demo_hello; -- Warehouse作成 CREATE WAREHOUSE demo_warehouse WITH WAREHOUSE_SIZE = xsmall INITIALLY_SUSPENDED = TRUE AUTO_SUSPEND = 60 AUTO_RESUME = TRUE; -- DROP WAREHOUSE demo_warehouse; USE WAREHOUSE demo_warehouse;
b) SQL によるデータロード (INSERT)
USE DATABASE demo_database; USE SCHEMA demo_schema; -- INSERT INSERT INTO demo_hello (id, name) VALUES('x0001', 'Hello'), ('x0002', 'World'); -- SELECT SELECT * FROM demo_hello;
例2:読み取り専用ロール・ユーザ作成
* 以下を参考に、読み取り専用ロール・ユーザを作成してみる => SECURITYADMIN ロール以上のユーザーとして実行
https://docs.snowflake.com/ja/user-guide/security-access-control-configure.html#creating-read-only-roles
a) 読み取り専用ロールのカスタムロール作成
CREATE ROLE read_only_role COMMENT = 'This role is for read only';
b) ロール階層の上位レベルロールを割り当てる
GRANT ROLE read_only_role TO ROLE sysadmin;
c) 各オブジェクトに権限付与
-- DB使用の権限 GRANT USAGE ON DATABASE demo_database TO ROLE read_only_role; -- Schema使用の権限 GRANT USAGE ON SCHEMA demo_database.demo_schema TO ROLE read_only_role; -- SELECT実行権限 GRANT SELECT ON ALL TABLES IN SCHEMA demo_database.demo_schema TO ROLE read_only_role; -- ★注意★ -- 既存テーブルにのみ適用。 -- 新しいテーブル作成した際は適用されない -- 将来的にも、読専にしたい場合 GRANT USAGE ON FUTURE SCHEMAS IN DATABASE demo_database TO ROLE read_only_role; GRANT SELECT ON FUTURE TABLES IN SCHEMA demo_database.demo_schema TO ROLE read_only_role; -- ウェアハウス使用の権限 GRANT USAGE ON WAREHOUSE demo_warehouse TO ROLE read_only_role;
d) 読み取り専用ユーザ作成
CREATE USER IF NOT EXISTS demo_read_only_user LOGIN_NAME = "demo_read_only_user" DEFAULT_ROLE = "read_only_role" PASSWORD = "password" -- ★ここは、パスワード変える★ MUST_CHANGE_PASSWORD = TRUE ;
補足:既存ユーザに対して割り当てる場合
-- 1) 一旦、無効化 ALTER USER demo_read_only_user SET DISABLED=true; -- 2) 対象ユーザに、読み取り専用ロールを適用する GRANT ROLE read_only_role TO USER demo_read_only_user; -- 3) デフォルトロールに、読み取り専用ロールを適用する ALTER USER demo_read_only_user SET DEFAULT_ROLE = read_only_role; -- 4) 有効化 ALTER USER demo_read_only_user SET DISABLED=false;
e) 動作確認
-- ログアウトして、「demo_read_only_user」でログインしなおす USE DATABASE demo_database; USE SCHEMA demo_schema; -- OK SELECT * FROM demo_hello; -- ここで、エラー「SQL access control error: Insufficient privileges to operate on table 'DEMO_HELLO'」 INSERT INTO demo_hello (id, name) VALUES('x0003', 'Hello'), ('x0004', 'World');
関連記事
Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 基本編 / データ型 ~
https://dk521123.hatenablog.com/entry/2021/12/16/095524
Snowflake ~ 基本編 / キャスト ~
https://dk521123.hatenablog.com/entry/2021/12/15/162658
Snowflake ~ 日時関連 ~
https://dk521123.hatenablog.com/entry/2022/06/17/113003
Snowflake ~ 日時関連 / 日時取得関数 ~
https://dk521123.hatenablog.com/entry/2022/09/02/092144
Snowflake ~ 文字列操作関連 ~
https://dk521123.hatenablog.com/entry/2022/10/01/000000
Snowflake ~ 基本編 / テーブル ~
https://dk521123.hatenablog.com/entry/2022/09/03/012113
Snowflake ~ 基本編 / アクセス制御 ~
https://dk521123.hatenablog.com/entry/2021/11/16/231010
Snowflake ~ 基本編 / ゼロコピークローン ~
https://dk521123.hatenablog.com/entry/2021/11/27/134934
Snowflake ~ 基本編 / ステージ ~
https://dk521123.hatenablog.com/entry/2022/09/01/220643
Snowflake ~ 基本編 / データロード ~
https://dk521123.hatenablog.com/entry/2021/11/15/221245
Snowflake ~ 基本編 / View ~
https://dk521123.hatenablog.com/entry/2022/10/10/000000
Snowflake ~ Materialized View ~
https://dk521123.hatenablog.com/entry/2023/06/22/100804
Snowflake ~ Snowpipe ~
https://dk521123.hatenablog.com/entry/2023/04/15/225515
Snowflake ~ Snowpipe Streaming ~
https://dk521123.hatenablog.com/entry/2023/07/04/001637
Snowflake ~ ウェアハウス / Warehouse ~
https://dk521123.hatenablog.com/entry/2022/12/04/000000
Snowflake ~ リソースモニター ~
https://dk521123.hatenablog.com/entry/2022/12/01/000000
Snowflake ~ ウェアハウス負荷監視 ~
https://dk521123.hatenablog.com/entry/2022/12/06/191727
Snowflake ~ データ アンロード ~
https://dk521123.hatenablog.com/entry/2022/07/04/172738
Snowflakeアンロード の 使用上の注意
https://dk521123.hatenablog.com/entry/2022/07/06/145724
Snowflake ~ ユーザ/ロールあれこれ ~
https://dk521123.hatenablog.com/entry/2022/11/02/144541
Snowflake ~ Removeコマンド ~
https://dk521123.hatenablog.com/entry/2022/09/26/150259
Snowflake ~ ストレージ統合 ~
https://dk521123.hatenablog.com/entry/2022/06/29/221037
Snowflake ~ ストレージ統合の作成手順 ~
https://dk521123.hatenablog.com/entry/2023/07/27/000000
Snowflake ~ Task ~
https://dk521123.hatenablog.com/entry/2023/04/17/174732
Snowflake ~ GRANT OWNERSHIP ~
https://dk521123.hatenablog.com/entry/2022/02/25/094250
Snowflake ~ SHOW / DESCRIBE ~
https://dk521123.hatenablog.com/entry/2022/02/24/231532
Snowflake ~ SHOW GRANT ~
https://dk521123.hatenablog.com/entry/2022/10/25/213624
Snowflake ~ File Format ~
https://dk521123.hatenablog.com/entry/2022/07/28/153332
Snowflake ~ MERGE INTO ~
https://dk521123.hatenablog.com/entry/2022/08/01/132611
Snowflake ~ MERGE の使用上の注意 ~
https://dk521123.hatenablog.com/entry/2023/09/05/161817
Snowflake ~ GET_DDL ~
https://dk521123.hatenablog.com/entry/2022/08/12/221106
Snowflake ~ SEQUENCE ~
https://dk521123.hatenablog.com/entry/2023/07/14/091918
Snowflake ~ Dynamic masking ~
https://dk521123.hatenablog.com/entry/2022/10/07/102337
Snowflake ~ Replication ~
https://dk521123.hatenablog.com/entry/2022/10/06/110305
Snowflake ~ トランザクション ~
https://dk521123.hatenablog.com/entry/2022/12/19/221551
Snowflake ~ ネットワークポリシー ~
https://dk521123.hatenablog.com/entry/2022/12/08/120131
Snowflake ~ TAG ~
https://dk521123.hatenablog.com/entry/2023/08/08/172648
Snowflake ~ クエリの中断 ~
https://dk521123.hatenablog.com/entry/2022/12/09/152837
Snowflake ~ テストデータ作成 / generator ~
https://dk521123.hatenablog.com/entry/2022/06/20/095659
Snowflake ~ Data Sharing ~
https://dk521123.hatenablog.com/entry/2024/02/19/152927
Snowflake ~ IDENTIFIER / SET ~
https://dk521123.hatenablog.com/entry/2024/02/20/095207
Snowflake ~ Partition構成のデータを取り込む ~
https://dk521123.hatenablog.com/entry/2022/10/28/000925
Snowflake ~ テーブルの簡易バックアップを考える ~
https://dk521123.hatenablog.com/entry/2022/11/07/224328
Snowflakeのパフォーマンス改善 ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/09/20/002235
Snowflakeのパフォーマンス改善 ~ データロードの改善 ~
https://dk521123.hatenablog.com/entry/2022/12/07/111847
Snowflakeのパフォーマンス改善 ~ 検索最適化サービス ~
https://dk521123.hatenablog.com/entry/2023/02/27/120943
Snowflakeのパフォーマンス改善 ~ クラスタリングキー ~
https://dk521123.hatenablog.com/entry/2023/03/04/222610
Snowflakeのパフォーマンス改善 ~ クエリプロファイル / 実行計画 ~
https://dk521123.hatenablog.com/entry/2023/09/12/194705
Snowflake ~ 統計情報 ~
https://dk521123.hatenablog.com/entry/2023/08/03/000817
SparkからSnowflakeへの接続について考える
https://dk521123.hatenablog.com/entry/2023/03/19/013833
Snowflake ~ キーペア認証 ~
https://dk521123.hatenablog.com/entry/2023/06/08/004532
権限トラブル時のTips
https://dk521123.hatenablog.com/entry/2022/08/19/131922
Snowflake ~ エラー時の解析方法 ~
https://dk521123.hatenablog.com/entry/2022/04/20/192334
Snowflake ~ 見積もり・コスト ~
https://dk521123.hatenablog.com/entry/2023/06/13/000000
【Snowflake】ストアド ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/12/11/202904
【Snowflake】ストアド ~ 基本編 / 条件分岐 ~
https://dk521123.hatenablog.com/entry/2022/12/26/211349
【Snowflake】ストアド ~ 基本編 / ループ ~
https://dk521123.hatenablog.com/entry/2022/12/16/143349
【Snowflake】ストアド ~ EXECUTE IMMEDIATE ~
https://dk521123.hatenablog.com/entry/2022/12/17/000217
【Snowflake】ストアド ~ クエリ結果を受け取る ~
https://dk521123.hatenablog.com/entry/2022/12/24/212242
【Snowflake】ストアド ~ 例外 / EXCEPTION ~
https://dk521123.hatenablog.com/entry/2022/12/23/223345
【Snowflake】ストアド ~ デバッグログについて ~
https://dk521123.hatenablog.com/entry/2022/12/18/121334
【Snowflake】ストアド ~ S3内にパーティション構成でUnloadする ~
https://dk521123.hatenablog.com/entry/2022/12/27/225629
【Snowflake】ストアド ~ ステージ内でデータ0件の場合エラーにする ~
https://dk521123.hatenablog.com/entry/2022/12/29/175848
Snowflake ~ Pythonでクエリ実行 ~
https://dk521123.hatenablog.com/entry/2023/10/27/235743
エラー「Failed to cast variant value "" to XXX」時の対応
https://dk521123.hatenablog.com/entry/2021/12/17/102659
エラー「Insufficient privileges to operate」時の対応
https://dk521123.hatenablog.com/entry/2022/08/02/090439
エラー「Table does not exist or not authorized」時の対応
https://dk521123.hatenablog.com/entry/2022/08/18/120935
エラー「Error assuming AWS_ROLE」時の対応
https://dk521123.hatenablog.com/entry/2022/11/25/175912
所有権変更後にエラー「current role has no privileges on it」
https://dk521123.hatenablog.com/entry/2023/04/14/151140
エラー「Ownership restriction violation」時の対応
https://dk521123.hatenablog.com/entry/2023/07/13/000000
COPY INTO したがデータが格納されていない
https://dk521123.hatenablog.com/entry/2022/12/20/152040
指定した日付分アンロードするSQLを生成するPythonコード
https://dk521123.hatenablog.com/entry/2023/08/09/000000
Kafkaコネクタ ~ Kafka用Snowflakeコネクタ ~
https://dk521123.hatenablog.com/entry/2023/06/07/144114