Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Snowflake リーダーアカウントを利用したデータ共有について

Snowflake リーダーアカウントを利用したデータ共有について

bergkamp

May 18, 2023
Tweet

Other Decks in Technology

Transcript

  1. © Minedia, Inc. All rights reserved.
    Snowflake リーダーアカウント
    を利用したデータ共有について
    2023/05/17
    株式会社マインディア まさ
    1

    View Slide

  2. © Minedia, Inc. All rights reserved.
    自己紹介
    まさ
    2
    ● 株式会社マインディア エンジニア
    ● マインディアではアプリケーションのバックエンドの開発や購買デー
    タのパイプラインの開発・運用を担当

    View Slide

  3. © Minedia, Inc. All rights reserved.
    EC購買データを利用したプロダクトの例をご紹介
    3
    メールデータの自動収集により高精度なデータを保有し、
    SnowflakeとTableauの活用で高速に理解しやすい分析が可能
    データの付加価値創出 UIによってデータ提供
    消費者の
    メールデータ収集
    Tableauを埋め込んだ
    Webツールにより可視化
    Snowflakeに
    データ集約・分析

    View Slide

  4. © Minedia, Inc. All rights reserved.
    背景
    4

    View Slide

  5. © Minedia, Inc. All rights reserved.
    産学連携
    5
    ユビキタス環境の研究で世界トップを走る名古屋大学河口研究室との産学連携プロジェクトを実施。
    名古屋大学、大阪大学やKDDIも所属する異業種ペルソナマーケティングAI推進協議会へも参加
    マインディア
    ● データや検証プラットフォームの提供
    ● ビジネスやマーケティング観点からの分析・研究の助言
    河口研究室
    ● 実世界とオンラインの世界関連性を研究
    ● マインディアのデータを活用した研究で国際学会に論文を発表予定
    ● EC購買データをもとにオンラインでの購買行動の分析を行いたい
    ● 研究室で知見のあるリアル空間での行動分析手法と掛け合わせることで、より高次な行動分析が可能となる
    ● マインディアからは特定の期間の購買データの一部をサマライズして提供している

    View Slide

  6. © Minedia, Inc. All rights reserved.
    産学連携でのビジネス要求
    ● クライアント
    ○ 常に最新のデータを参照したい
    ■ Snowflakeを契約をしていない
    ■ エンジニアがいない
    ● 弊社
    ○ 安全にデータを提供したい
    ○ 簡単にデータを提供したい
    ■ 極力新しく何かを実装したくない
    ■ メンテナンスに工数をかけたくない
    6

    View Slide

  7. © Minedia, Inc. All rights reserved.
    リーダーアカウント
    7

    View Slide

  8. © Minedia, Inc. All rights reserved.
    リーダーアカウントとは
    ● Snowflakeと契約していないクライアントとデータを共有できる
    ● 通常のアカウントと同様にWeb UIも提供されている(助かります)
    https://docs.snowflake.com/ja/user-gu
    ide/data-sharing-reader-create
    8

    View Slide

  9. © Minedia, Inc. All rights reserved.
    制限されていること
    ● リーダーアカウントは新しいデータの追加やアカウント内の共有データの更新はサポートされていない
    ● ライセンス契約がないため、リーダーアカウントから直接サポートに問い合わせすることができない
    ● デフォルトでは、プロバイダーが作成できるリーダーアカウントの総数は20
    9

    View Slide

  10. © Minedia, Inc. All rights reserved.
    コストの管理
    リーダーアカウント(データ利用者)が利用した分のクレジット料金は、プロバイダー
    アカウント(データ提供者)に課せられる
    10
    リソースモニターを作成することで対応する
    ● リーダーアカウントで仮想ウェアハウスで毎月消費されるクレジットの量を制御したい場合は、リソース
    モニターを作成して制御する
    ● 想定外のクレジットの消費を回避する

    View Slide

  11. © Minedia, Inc. All rights reserved.
    リーダーアカウント作成 〜 共有までの大まかな流れ
    項目 作業するアカウント
    1 リーダーアカウント作成 プロバイダーアカウント
    2 共有の作成と設定 プロバイダーアカウント
    3 ロール/ユーザーの作成 リーダーアカウント
    4 リソースモニターの作成と設定 リーダーアカウント
    5 ウェアハウスの作成 リーダーアカウント
    6 共有からデータベース作成 リーダーアカウント
    11

    View Slide

  12. © Minedia, Inc. All rights reserved.
    運用中のDBのテーブルを共有する例で流れを簡単に説明
    プロバイダーアカウント
    運用中のDB
    table_1
    リーダーアカウント
    sample_db share_1
    table_1
    12
    shared_db

    View Slide

  13. © Minedia, Inc. All rights reserved.
    リーダーアカウントの作成 (プロバイダーアカウントで作業)
    // ポイントとなる部分をピックアップしたものなので、作業する際は公式ドキュメントを参照してください。
    // Web UIでも作業することができます。
    // リーダーアカウント作成
    CREATE MANAGED ACCOUNT sample_reader_account_1
    ADMIN_NAME = sample_reader_admin_1,
    ADMIN_PASSWORD = '${admin_password}',
    TYPE = READER
    ;
    // 作成したリーダーアカウントの確認
    SHOW MANAGED ACCOUNTS [LIKE ‘sample_reader_account_1’];
    // 上記コマンドで表示されたurlカラムに表示されたURLからリーダーアカウントにログインできます。
    // リーダーアカウントが作成されるまで5分ほどかかるので403が表示される場合は少し待ちましょう。
    // リーダーアカウントをドロップする場合
    DROP MANAGED ACCOUNT sample_reader_account_1;
    13

    View Slide

  14. © Minedia, Inc. All rights reserved.
    共有の作成と設定(プロバイダーアカウントで作業)
    // 共有を作成
    CREATE SHARE share_1;
    // 共有にdatabase, schemaのUSAGE権限、tableのselect権限の追加
    GRANT USAGE ON DATABASE sample_db TO SHARE share_1;
    GRANT USAGE ON SCHEMA sample_db.schema_1 TO SHARE share_1;
    GRANT SELECT ON TABLE sample_db.schema_1.table_1 TO SHARE share_1;
    // share_1へ付与した権限の確認
    SHOW GRANTS TO SHARE share_1;
    // 共有にアカウントを追加
    // ACCOUNTSにはSHOW MANAGED ACCOUNTSで確認したlocatorを指定する(ここではXX12345)
    ALTER SHARE share_1 ADD ACCOUNTS = XX12345;
    ※ カスタムロールに共有作成の権限を付与することも可能です。
    所有する(または必要な権限がある)オブジェクトを他のアカウントに公開できるので注意が必要です。
    14

    View Slide

  15. © Minedia, Inc. All rights reserved.
    リソースモニターの作成と設定(リーダーアカウントで作業)
    // アカウント管理者としてリーダーアカウントにログインする
    // ロール/ユーザー作成はここでは割愛
    // リソースモニター作成
    CREATE RESOURCE MONITOR sample_monitor WITH
    CREDIT_QUOTA = 5
    FREQUENCY = MONTHLY
    START_TIMESTAMP = IMMEDIATELY
    NOTIFY_USERS = (hoge, fuga..) // メールのみ
    TRIGGERS
    ON 80 PERCENT DO NOTIFY // 80%で通知
    ON 99 PERCENT DO SUSPEND // 99%で現在実行中のクエリの完了を許可。その他は一時停止。
    ON 100 PERCENT DO SUSPEND_IMMEDIATE // 100%で即停止
    ON 100 PERCENT DO NOTIFY // 100%で通知
    ;
    // アカウントレベルでリソースモニターを設定
    // ウェアハウス単位でも設定できる
    USE ROLE accountadmin;
    ALTER ACCOUNT SET RESOURCE_MONITOR = sample_monitor;
    15

    View Slide

  16. © Minedia, Inc. All rights reserved.
    ウェアハウスの作成(リーダーアカウントで作業)
    // ウェアハウス作成
    CREATE WAREHOUSE IF NOT EXISTS sample_wh
    WAREHOUSE_SIZE = 'XSMALL'
    AUTO_SUSPEND = 180
    AUTO_RESUME = true
    MAX_CLUSTER_COUNT = 1
    SCALING_POLICY = 'ECONOMY'
    INITIALLY_SUSPENDED = true
    // 作成したResource MonitorをWH単位で指定も可能
    // RESOURCE_MONITOR = sample_monitor
    ;
    // ウェアハウスの利用権限を付与
    GRANT USAGE,OPERATE,MONITOR ON WAREHOUSE sample_wh TO ROLE analyst;
    16

    View Slide

  17. © Minedia, Inc. All rights reserved.
    共有からデータベースを作成(リーダーアカウントで作業)
    // 共有からデータベース作成(プロバイダーアカウントのlocatorを指定する。ここではAB12345)
    CREATE DATABASE shared_db FROM SHARE AB12345.share_1;
    // データを参照できるよう権限を付与
    GRANT IMPORTED PRIVILEGES ON DATABASE shared_db TO ROLE analyst;
    17

    View Slide

  18. © Minedia, Inc. All rights reserved.
    運用中のDBからセキュアビューを作成して共有 - 1
    プロバイダーアカウント
    運用中のDB 共有用のDB
    Secure View
    リーダーアカウント
    ● 運用中のDBを参照してセキュアビューを作成
    ○ DDL定義が表示されない
    ○ パフォーマンスが悪化する可能性がある
    ○ etc …
    user__db share_db share_2
    Secure View
    共有するオブジェクトを追
    加したくない
    18
    shared_db

    View Slide

  19. © Minedia, Inc. All rights reserved.
    運用中のDBからセキュアビューを作成して共有 - 2
    // データベース、スキーマ作成
    CREATE DATABASE share_db;
    CREATE SCHEMA share_db.schema_1;
    // 共有用のDBにセキュアビューを作成
    CREATE SECURE VIEW share_db.schema_1.sample_secure_view AS SELECT .. FROM user_db.schema.table_1,
    user_db.schema.table_2 WHERE ..;
    // 共有を作成
    CREATE SHARE share_2;
    // 共有にshare_db, schema_1のUSAGE権限を付与
    GRANT USAGE ON DATABASE share_db TO SHARE share_2;
    GRANT USAGE ON SCHEMA share_db.schema_1 TO SHARE share_2;
    // 異なるデータベースに対するREFERENCE_USAGE権限を付与
    // 参照するテーブルやスキーマの権限を共有する必要はない
    GRANT REFERENCE_USAGE ON DATABASE user_db TO SHARE share_2;
    // 共有にviewへのSELECT権限を付与
    GRANT SELECT ON VIEW share_db.schema_1.sample_secure_view TO SHARE share_2;
    19

    View Slide

  20. © Minedia, Inc. All rights reserved.
    READER_ACCOUNT_USAGE VIEW
    リーダーアカウントにも各種データをモニタリングするためのビューが一部用意されている
    ● LOGIN_HISTORY VIEW
    ● QUERY_HISTORY VIEW
    ● RESOURCE_MONITORS VIEW
    ● STORAGE_USAGE VIEW
    ● WAREHOUSE_METERING_HISTORY VIEW
    20

    View Slide

  21. © Minedia, Inc. All rights reserved.
    リーダーアカウントを導入して良かったこと
    ● Snowflakeを契約をしていないクライアントとデータ共有ができる
    ● 最新のデータの共有が容易にできる
    ● サブスクリプションでデータ提供もしやすい
    21

    View Slide

  22. © Minedia, Inc. All rights reserved.
    各職種募集中です!
    22

    View Slide