モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

目次目次を開く/閉じる

Snowflake の基本的な使い方

モーダルを閉じる

ステッカーを選択してください

お支払い手続きへ
モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2021/08/21
最終更新最終更新
2024/02/05
記事区分記事区分
一般公開

目次

    Webアプリ開発に取り組んでいます

    Snowflake はクラウド上に構築されたデータプラットフォームです。基本的な使い方を記載します。

    Snowflake Architecture

    Snowflake Architecture

    • Hadoop 等の big data プラットフォームは利用していません。
    • 顧客管理ではなく、Snowflake 社が管理する AWS, GCP, Azure で稼働します。
    • 三つの層から構成されます。
      • Cloud Services
        • 認証、クエリ最適化、アクセス制御等。
      • Query Processing
        • MPP (massively parallel processing) compute clusters でクエリを実行します。
      • Database Storage
        • データはすべて圧縮されて保存されます。

    利用料金について

    • Snowflake には Edition があり、各層で利用できる機能が異なります。
    • Edition、クラウドプロバイダ、リージョン によって、1 Credit あたりの料金が異なります。
    • 三つの層を利用すると、各層の利用状況に応じて Credit が消費されます。
      • Cloud Services の料金は、一般的な使い方をしている限りにおいては無料となります。
        • Query Processing (Virtual Warehouses (Compute)) 料金の 10% までは無料です。
      • Compute 料金は二つに大別できます。
        • 顧客が作成した Virtual Warehouses の料金。
        • Snowflake-managed Virtual Warehouses の料金。
    • その他に DATA TRANSFER 料金も発生します。
      • Snowflake アカウントのリージョンとは異なるリージョン、または異なるクラウドプロバイダに対する転送において課金されます。
      • Understanding Snowflake Data Transfer Billing
        • Unloading Data from Snowflake
        • Database Replication
        • External Functions
    • On Demand 支払いの他に、前払い (up-front Capacity commitment) による割引き制度も存在します。

    参考資料: UNDERSTANDING SNOWFLAKE PRICING

    AWS Tokyo リージョン

    AWS Northern Virginia リージョン

    Snowflake Releases

    • 三つのリリースタイプが存在します。
      • Full release
        • 毎週リリースされます。
        • Enterprise Edition 以上であれば 24-hour early access によって、事前の検証が可能です。
          • Behavior change release ではないため、基本的に事前の検証は不要です。
      • Patch release
      • Behavior change release
        • 一ヶ月に一回です。
        • 一回のリリースは 2 ヶ月で完了します。
          • 最初の 1 ヶ月は、テスト期間です。
            • 既定ではリリース内容が無効化されています。
            • アカウントの設定でリリース内容を有効化して、動作検証が可能です。
          • 次の 1 ヶ月はオプトアウト期間です。
            • 既定ではリリース内容が有効化されています。
            • アカウントの設定でリリースを無効化できます。
          • この期間が終了すると、自動的にリリース内容が有効化されます。
            • Snowflake Support に問い合わせことで、個別アカウントへのリリース内容の反映を延期させることが可能な場合があります。
        • Production と Non-Production (development/testing) のアカウントを分けておくことで、Behavior change release に対するテスト期間 1 ヶ月を Non-Production アカウントで実施できます。

    確認コマンドの例

    SELECT system$behavior_change_bundle_status('2021_08');
    

    参考資料:

    SnowSQL

    SnowSQL は "Snowflake Connector for Python" によって実装された、Snowflake CLI Client です。

    インストール方法: Download and Install SnowSQL

    vagrant@debian11:~$ ls .snowsql/
    1.2.17  1.2.18  autoupgrade  config  downloadlck  history  mylog
    
    • .snowsql/config → 設定ファイルです。
    • major.minor.patch バージョンのうち、patch については、実行時に新しいバージョンが見つかると自動更新されます。
      • --noup オプションを付与すると自動更新を無効化して起動できます。

    組織に所属するアカウントの場合は <organization_name>-<account_name>-a に指定できます。

    フリートライアルで取得したアカウント等の場合は、以下のように指定します。Snowflake アカウントのリソースは AWS/GCP/Azure のいずれかのクラウド上に構築されます。以下は、AWS Tokyo リージョンを指定して作成した場合のアカウントにおけるユーザの例です。

    snowsql -a xxxx.ap-northeast-1.aws -u myuser
    

    MFA が有効なユーザの場合は -M を指定します。

    snowsql -a xxxx.ap-northeast-1.aws -u myuser -M
    

    参考資料:

    公開鍵・秘密鍵による認証

    ユーザ名とパスワードによる認証の他に、公開鍵・秘密鍵による認証も可能です。公開鍵と秘密鍵のペアを生成します。一般に秘密鍵はパスワード (共通鍵) で暗号化することが可能です。SnowSQL の場合は、暗号化された秘密鍵にのみ対応しています。そのため -nocrypt オプションは付与しません。

    openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out snowflake.p8
    openssl rsa -in snowflake.p8 -pubout -out snowflake.pub
    

    公開鍵は securityadmin 以上のロールで設定します。

    USE ROLE securityadmin;
    ALTER USER myuser set rsa_public_key='MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCg...';
    DESC USER myuser;
    

    秘密鍵を用いた認証が可能となります。

    snowsql -a xxxx.ap-northeast-1.aws -u myuser --private-key-path snowflake.p8
    

    鍵の更新 (ローテーション) を行なうためには rsa_public_key_2 を利用します。

    ALTER USER myuser set rsa_public_key_2='xxx';
    ALTER USER myuser unset rsa_public_key;
    

    関連資料:

    Python Connector

    Python3 のバージョンと snowflake-connector-python で利用可能なバージョンを確認します。

    python3 --version
    python3 -m pip install snowflake-connector-python==dummy
    

    Python 3.9 で snowflake-connector-python 2.6.1 を利用する場合の例です。pip に依存関係の解決を任せることも可能ですが、テスト済みの依存ライブラリのバージョンを指定する方法が推奨されています。

    python3 -m pip install -r https://raw.githubusercontent.com/snowflakedb/snowflake-connector-python/v2.6.1/tested_requirements/requirements_39.reqs
    python3 -m pip install snowflake-connector-python==2.6.1
    

    パスワード認証

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    import snowflake.connector
    
    ctx = snowflake.connector.connect(
        user='myuser',
        password='PASSWORD',
        account='xxxx.ap-northeast-1.aws'
        )
    cs = ctx.cursor()
    
    try:
        cs.execute('SELECT current_version()')
        one_row = cs.fetchone()
        print(one_row[0])
    finally:
        cs.close()
    ctx.close()
    

    鍵認証

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    import snowflake.connector
    from cryptography.hazmat.backends import default_backend
    from cryptography.hazmat.primitives import serialization
    
    with open('/home/vagrant/snowflake.p8', 'rb') as key:
        p_key= serialization.load_pem_private_key(
            key.read(),
            password='XXXX'.encode(),
            backend=default_backend()
        )
    
    pkb = p_key.private_bytes(
        encoding=serialization.Encoding.DER,
        format=serialization.PrivateFormat.PKCS8,
        encryption_algorithm=serialization.NoEncryption())
    
    ctx = snowflake.connector.connect(
        user='myuser',
        account='xxxx.ap-northeast-1.aws',
        private_key=pkb
        )
    cs = ctx.cursor()
    
    try:
        cs.execute('SELECT current_version()')
        one_row = cs.fetchone()
        print(one_row[0])
    finally:
        cs.close()
    ctx.close()
    

    参考資料:

    基本操作

    参考資料: Snowflake in 20 Minutes

    Warehouse 作成

    Snowflake において、ストレージ database と計算資源 warehouse は分離されています。以下の例では、何も処理していない状態が 60 秒間続くと自動で停止するように設定しています。

    CREATE OR REPLACE WAREHOUSE mywh WITH
      WAREHOUSE_SIZE = XSMALL
      AUTO_SUSPEND = 60
      AUTO_RESUME = true
      INITIALLY_SUSPENDED = true;
    
    SELECT CURRENT_WAREHOUSE();
    

    Database 作成

    一覧の確認

    SHOW DATABASES;
    

    作成 (存在する場合は drop してから create)

    CREATE OR REPLACE DATABASE mydb;
    

    DB を作成すると、明示的に use することなく、現在のセッションで use された状態となります。

    SELECT CURRENT_DATABASE();
    

    DB には public という名称の schema が既定で存在しており、use された状態となります。

    SELECT CURRENT_SCHEMA();
    

    Table 作成

    CREATE OR REPLACE TABLE mytbl (
      c1 STRING,
      c2 DATE
    );
    
    SHOW TABLES;
    DESC TABLE mytbl;
    

    クエリ

    SELECT COUNT(*) FROM mytbl;
    DROP DATABASE IF EXISTS mydb;
    DROP WAREHOUSE IF EXISTS mywh;
    

    終了方法

    !exit;
    

    データのアップロード

    data.csv

    aaa,8/25/2017
    bbb,12/10/2017
    ccc,10/18/2017
    ddd,8/13/2017
    eee,11/27/2017
    

    Snowflake アカウントには stage と呼ばれる領域が割り当てられます。stage にデータをアップロードするコマンドは以下のようになります。public はスキーマ名です。PUT に指定するファイルにはワイルドカードを指定できます。

    PUT file://c:\Users\username\Desktop\data.csv @mydb.public.%mytbl;
    LIST @mydb.public.%mytbl;
    REMOVE @mydb.public.%mytbl/data.csv.gz
    

    Stage から table へのデータロードのコマンドは以下のようになります。既定では、同じファイルからの読み込みは重複して行えないようになっています。FORCE = TRUE を指定するとこれを無視できます。

    USE mydb;
    USE WAREHOUSE mywh;
    
    COPY INTO mytbl
      FROM @%mytbl
      FILE_FORMAT = (TYPE = CSV FIELD_OPTIONALLY_ENCLOSED_BY='"')
      FILES = ('data.csv.gz')
      ON_ERROR = SKIP_FILE;
    

    サポートケースの作成方法

    サポートケースの作成は、別の管理サイトから行います。community.snowflake.com ドメインのサイトで新規にアカウントを作成した後に、Snowflake アカウントとの紐付けを申請します。

    紐付けが承認されると、以下のような画面から case を作成できます。アカウント作成時のメールアドレス以外にも通知したい場合は Collaborator's Email を指定します。複数の Snowflake アカウントを紐付けている場合は、適切な Account Name を選択します。

    参考資料: HOW TO: SUBMIT A SUPPORT CASE

    Likeボタン(off)0
    詳細設定を開く/閉じる
    アカウント プロフィール画像

    Webアプリ開発に取り組んでいます

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    >>さらに詳しくステッカーを贈る
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      ログインする

      関連記事

      • Snowflake Task による SQL の定期実行
        Snowflake において、cron のように定期的に SQL を実行する仕組みとして Task が提供されています。基本的な使い方を記載します。 サンプル データベースとテーブルを作成しておきます。 CREATE DATABASE mydb; CREATE TABLE mytbl (c1 DATETIME, c2 STRING); 1分毎に INSERT を実行する task を作成します。W...
        kenken5/16/2024に更新
        いいねアイコン画像0
      • Snowflake におけるアクセス制御の設定
        サムネイル画像-69f3d5536c
        Snowflake について、アクセス制御の設定を記載します。 参考資料: Access Control in Snowflake user と role の関係 [Role Hierarchy and Privilege
        りょうりょう12/29/2023に更新
        いいねアイコン画像0
      • Snowflake におけるセキュリティ関連の機能
        サムネイル画像-5dcf74894d
        Snowflake のセキュリティ関連の機能について記載します。 パラメータ管理 Snowflake における設定値はパラメータとよばれます。設定する対象によって分類すると、以下の三種類が存在します。 Account パラメータ。 Account-level でのみ設定可能です。 Session パラメータ。 Account-level および User-level, Session-level ...
        サマーズサマーズ3/2/2024に更新
        いいねアイコン画像0
      • Looker から Snowflake への OAuth 接続
        サムネイル画像-ce4268940d
        Looker から Snowflake の DB を OAuth 認証で参照する設定例を記載します。 参考資料: Looker / feedbackSnowflake / Configuring OAuth for Snowflake connections Snowflake 内の Looker 用 Role/User/Warehouse/DB 作成 Role と
        suzusuzu1/2/2025に更新
        いいねアイコン画像0
      • Snowflake に対する SSO 設定 (Auth0)
        サムネイル画像-6789888256
        Snowflake に対して、外部の ID 基盤 (IdP; ID Provider) による認証でログインするための設定例を記載します。IdP としては Auth0 を用います。 参考資料: [HOWTO: CONFIGURE AUTH0 AS IDENTITY PROVIDER FOR SNOWFLAKE SINGLE SIGN-ON](https://community.snowflake....
        ふんわりぬこふんわりぬこ1/26/2024に更新
        いいねアイコン画像0