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

Tableau & Snowflake ハンズオン ~ データコラボレーションをぷち体験しよう ~

holywater044
September 25, 2023

Tableau & Snowflake ハンズオン ~ データコラボレーションをぷち体験しよう ~

中部Talbeauユーザー会&SnowVillage共催イベント 登壇資料
https://techplay.jp/event/916727

holywater044

September 25, 2023
Tweet

More Decks by holywater044

Other Decks in Technology

Transcript

  1. 自己紹介 名前: Akihiro Horikawa 所属: 東邦ガス株式会社 (東海地方の総合エネルギー企業) ※ 本発表は登壇者個人の見解であり、所属企業の公式見解ではありません 役割:

    社内データ分析チームのリーダー Tableau歴: 約3年半、DATA Saber Snowflake歴: 約2年 X(Twitter): ほーりー @holywater044 コミュニティ: 中部Tableauユーザー会(幹事)、 SnowVillage(村人)、 ほか 2 TECHPLAY 中部Tableauユーザー会 https://techplay.jp/com munity/tableau-chubu SnowVillage YOUTUBE みんなのSQL講座 https://www.youtube.com /watch?v=NFKjCWzlS7o
  2. Snowsight: 手持ちのデータを確認する • 「データベース」タグで、ツリーを順にクリック HO_DB → PUBLIC → TABLE →

    MY_CITY_01 ⇒ 左下に列リストが表示される • 列リストの「・・・」から、「データのプレビュー」をクリック ⇒ データプレビューウィンドウが開く 15 データベース: HO_DB スキーマ: PUBLIC テーブル: MY_CITY_01 参考:Snowflakeのデータオブジェクトの階層
  3. ① ワークシートの 2-1 のSQL文にカーソルを合わせる select count(*) from HO_DB.PUBLIC.MY_CITY_01; ② 右上の

    ボタンをクリック ⇒ ワークシートの下半分に、SQLの結果が表示される Snowsight: SQL実行の練習 16 【奇数番号】と 【偶数番号】で 結果が違います
  4. Tableau: データソース画面 • Snowflakeで使うサーバーやデータを設定する 21 アカウント: lkzqobg-ha★★ ウェアハウス (処理サーバ) COMPUTE_WH

    データベース: HO_DB スキーマ: PUBLIC テーブル: MY_CITY_01 参考: Snowfalkeのオブジェクト構成
  5. Tableau: データの中身の確認 1. シートを追加 2. ”市区町村名”の左側の abc をクリック、 地理的役割 →

    郡 をクリック 注: ”市区町村”ではなく、”郡”です! 3. ”市区町村”をダブルクリック 4. 「表示形式」をクリックして、2段目真ん中 の地図のアイコンをクリックして、閉じる 注: 左ではなく、真ん中の地図です! 5. ”人口”を色にドロップ 23
  6. ざっくりイメージ: ファイル連携 28 テーブル 抽出処理 転送処理 (日次バッチ など) 更新処理 提供側

    利用側 転送サーバ 抽出サーバ 転送サーバ 更新サーバ テーブル 差分 ファイル 差分 ファイル
  7. ざっくりイメージ: ファイル連携 29 テーブル 抽出処理 転送処理 (日次バッチ など) 更新処理 提供側

    利用側 • PG開発とサーバ構築、維持保守が必要 (途中でコケたらリカバリ、など) • 提供側の差分抽出がまあまあ大変 (かといって毎回全件連携もキツイ) • 提供側テーブルと、利用側テーブルが本当に一致しているか謎 転送サーバ 抽出サーバ 転送サーバ 更新サーバ テーブル 本当に 一致? 差分 ファイル 差分 ファイル 悩み
  8. ざっくりイメージ: API連携 31 テーブル データ 処理 APIコール 提供側 利用側 •

    PG開発とサーバ構築、維持保守が必要 • 基本的にAPIで定義した用途にしか応えられない (汎用的でない) • APIコールが急増すると、提供側サーバ性能が不足するリスクあり API APIサーバ Webアプリサーバ URLコール 悩み
  9. ざっくりイメージ: Snowflakeのデータシェアリング 32 テーブル テーブル データシェアリング 提供側Snowflakeアカウント 利用側Snowflakeアカウント • テーブル/ビューそのものを共有、常に最新状態

    • ストレージは、提供側の負担 (利用側はゼロ) • 処理サーバは、利用側の負担 (提供側はゼロ) ウェアハウス 先程の様々な悩みが まとめて解決!! 提供側も、利用側も、 win-win!! コピーではなく、 レンタルしてる感じ シェア 設定
  10. • 3種類があります ➢ ダイレクトシェア アカウント1:1の共有 ➢ データエクスチェンジ グループ内のアカウント間での共有 ➢ マーケットプレイス

    販売での共有(有料・無料あり) Snowflakeのデータシェアリングの種類 33 アカウントグループ ダイレクトシェア データエクスチェンジ マーケットプレイス 提供側アカウント (プロバイダー) 利用側アカウント (コンシューマー) 本日はこの2つ を試します!
  11. データ共有の段取り • 提供側の共有手続き(①~⑤)と、利用側の取得手続き(⑥)を行います 35 ⑤”シェア”の使用を 利用型アカウントに 許可 HO_SHARE ②DB使用権 データベース:

    PROVIDER_DB スキーマ: PUBLIC テーブル: AICHI_CITY_01 データベース: LKZQOBG_XU52167_HO_SHARE スキーマ: PUBLIC テーブル: AICHI_CITY_01 ③スキーマ使用権 ④テーブル参照権 提供側アカウント(主催者) lkzqobg-xu52167 利用側アカウント(参加者) lkzqobg-ha★★ ①”シェア” オブジェクト の作成 ⑥共有されたデータを取得
  12. Snowsight: 提供側手続き (主催者が実行するのを見学) 主催者のアカウントで、以下のSQLを順に実行 create share HO_SHARE; grant usage on

    database PROVIDER_DB to share HO_SHARE; grant usage on schema PROVIDER_DB.PUBLIC to share HO_SHARE; grant select on table PROVIDER_DB.PUBLIC.AICHI_CITY_01 to share HO_SHARE; alter share HO_SHARE add accounts= LKZQOBG.HO01, LKZQOBG.HO02, LKZQOBG.HO03, LKZQOBG.HO04, LKZQOBG.HO05, LKZQOBG.HO06, LKZQOBG.HO07, LKZQOBG.HO08; alter share HO_SHARE add accounts= LKZQOBG.HO09, LKZQOBG.HO10, LKZQOBG.HO11, LKZQOBG.HO12, LKZQOBG.HO13, LKZQOBG.HO14, LKZQOBG.HO15, LKZQOBG.HO16; 36 ① ② ③ ④ ⑤
  13. Snowsight: 利用側手続き (参加者が実行) ⑥ 共有データを取得 1. 左上の「<」でメインメニューに戻る 2. メインメニューの「データ」→「プライベート共有」をクリック ⇒

    ”HO_SHARE”がある 3. ”HO_SHARE”の をクリック 4. データ取得メニューで、 をクリック (オプション設定不要) 5. 取得できたら、 をクリック 6. データのツリーを順にクリック lkzqobg_xu52167_HO_SHARE → PUBLIC → テーブル → AICHI_CITY_01 7. 「データのプレビュー」をクリック ⇒ 共有されたデータ(愛知県の人口データ)を確認できたらOKです! 37
  14. データ共有の段取り • 今度は、自分が提供側になって、ペアの方へ共有してみましょう! ※ ••:自分の番号、★★:ペアの方の番号 に読み替え 39 ① ⑤ MY_SHARE

    ② データベース: HO_DB スキーマ: PUBLIC テーブル: MY_CITY_01 ③ ④ 自分のアカウント lkzqobg-ha•• ペアのアカウント lkzqobg-ha★★ データベース: LKZQOBG_HO••_MY_SHARE スキーマ: PUBLIC テーブル: MY_CITY_01 データベース: LKZQOBG_HO★★_MY_SHARE スキーマ: PUBLIC テーブル: MY_CITY_01 ⑥ データベース: HO_DB スキーマ: PUBLIC テーブル: MY_CITY_01 MY_SHARE
  15. Snowsight: 提供側手続き 提供側として、自分の”MY_CITY_01”をペアの参加者に共有するために、 以下の提供側SQLを順に実行してみましょう! create share MY_SHARE; grant usage on

    database HO_DB to share MY_SHARE; grant usage on schema HO_DB.PUBLIC to share MY_SHARE; grant select on table HO_DB.PUBLIC.MY_CITY_01 to share MY_SHARE; alter share MY_SHARE add account= LKZQOBG.HO★★; // ペアの参加者の番号↑ 40 ★★のところを ペアの番号(半角)に 書き換え 例: 03番の方なら”04” ① ② ③ ④ ⑤
  16. Snowsight: 利用側手続き 6. データのツリーを順にクリック lkzqobg_HO★★_MY_SHARE → PUBLIC → テーブル →

    MY_CITY_01 7. 「データのプレビュー」をクリック ⇒ 共有されたデータ(ペアの県の人口データ)を確認できたらOKです! 42 ★★のところをペアの番号(半角)に読み換え
  17. Snowsight: 東海3県データの合体 • 東海3県のデータが揃いましたが、バラバラでは使い難いので、1データ に合体するSQLを実行 create table HO_DB.PUBLIC.TOKAI_CITY_01 as select

    * from HO_DB.PUBLIC.MY_CITY_01 union select * from LKZQOBG _XU52167_HO_SHARE.PUBLIC.AICHI_CITY_01 union select * from LKZQOBG_HO★★_MY_SHARE.PUBLIC.MY_CITY_01; // ペアの参加者の番号↑ • 件数を確認するSQLを実行 select count(*) from HO_DB.PUBLIC.TOKAI_CITY_01; ⇒ 12,320件ならOKです! (愛知:6,072+岐阜:3,696+三重:2,552) 東海3県人口データが完成です! 43 ★★のところをペアの番号(半角)に書き換え
  18. Snowsight: カレンダーデータ(無料)を購入 1. メインメニューで「マーケットプレイス」をクリック 2. 検索窓に”truestar”と入力してエンター ⇒ 本日時点、12個が表示される 3. その中から以下を探してクリック

    Prepper Open Data Bank - Japanese Calendar Data (右側上から2段目) 4. 右の「Get」をクリック 5. 取得メニューが出るので「OK」をクリック ⇒ 購入完了です! 45 これだけ!!
  19. Snowsight: 購入したデータの内容を確認 6. 取得できたら、 をクリック 7. データのツリーを順にクリック Prepper_Open_Data_Bank__Japanese_Calendar_Data → J_PODB

    → ビュー → J_JAPAN_CALENDER (2つある上の方) 8. 「データのプレビュー」をクリック ⇒ 共有されたデータ(日本のカレンダー)を確認できたらOKです! 46
  20. Tableau: 可視化1 :市区町村人口と売上の比較 1/5 ① 東海3県人口データへの接続 1. 画面左上の ボタンを押す 2.

    「サーバーへ」の「Snowflake」をクリック 3. パスワードを入力してサインイン 4. 接続情報を入力 ウェアハウス、データベース、スキーマ 5. TOKAI_CITY_01 をダブルクリック ⇒ シートに移動 49
  21. Tableau: 可視化1 :市区町村人口と売上の比較 2/5 ② 人口地図の作成 1. ”市区町村名”の左側の abc をクリック

    → 地理的役割 → 郡をクリック 注: ”市区町村”ではなく、”郡”です! 2. ”市区町村”をダブルクリック 3. 右上の「表示形式」をクリック、2段目真ん中の地図のアイコンをクリック、閉じる 注: 左ではなく、真ん中の地図です! 4. ”人口”を色にドロップ ⇒ 市区町村の人口地図が表示されたらOKです! 50
  22. Tableau: 可視化1 :市区町村人口と売上の比較 3/5 次に、別データで地図を描いて、先程の地図に重ねます。 ③ サンプルスーパーストアへの接続 1. 画面左上の ボタンを押す

    2. 「保存されたデータベース」の「サンプル - スーパーストア」をクリック 3. テーブルが3個が表示されるので、 ”注文”だけ残して、”関係者”と”返品”を削除 ”関係者”と”返品”の▼から「削除」をクリック ⇒ シートに移動 51
  23. Tableau: 可視化1 :市区町村人口と売上の比較 4/5 ④ 売上地図の作成 1. ②の人口地図のシートに戻る 2. シート左上の”データ”を「サンプル

    – スーパーストア」に変更 3. ”住所”のフォルダを開く 4. ”国/地域”をドラッグして、地図上の左上の「マップレイヤー」にドロップ 5. マークの「詳細」の”国/地域”のプラスマークをクリック 国/地域 → 都道府県 → 市区町村 6. ”都道府県”を、「フィルター」へドロップ 愛知・岐阜・三重を選択、他はオフ 7. ”売上”を「サイズ」にドロップ サイズを開いて、バーを真ん中くらいまで大きくする 8. 「色」をクリックして、オレンジに変更 52
  24. Tableau: 可視化1 :市区町村人口と売上の比較 5/5 ⇒ 2つの地図が重ねて表示されたらOKです! 53 顧客開拓可能性のある 市区町村はどこでしょう? 注:

    TableauDesktopのバージョン (サンプルデータのバージョン) によって、結果が異なります。 本資料は2023.1で作成
  25. Tableau: 可視化2 :祝日・祝日以外の売上の違い 1/4 ① カレンダーデータの接続 1. 新しいシートを作成 2. シート左上の”データ”の「サンプル

    – スーパーストア」 を選択 3. 「データソース」に移動 4. 接続の追加 → Snowflake 5. パスワードを入力してサイイン 6. 接続情報を入力 ウェアハウス、データベース、スキーマ 55
  26. Tableau: 可視化2 :祝日・祝日以外の売上の違い 2/x ③ 注文データとカレンダーデータの紐づけ 1. テーブル”J_JAPAN_CALENDER” (2つある上の方)を、ダブルクリック →

    注文と紐づくけど「!」マークが表示される 2. 下段真ん中の紐づけ設定で、紐づけに使う列を指定 ⇒ シートへ移動 56
  27. Tableau: 可視化2 :祝日・祝日以外の売上の違い 3/x ④ 売上グラフの作成 1. ”売上”を、「行」へドロップ、合計を平均に変更 ”売上”の▼ →

    メジャー(合計) → 平均 2. 上部の ボタンをオンして、ラベルを表示 3. ”オーダー日”を、「フィルター」へドロップ 年を選択 → 2021年のみオン、他はオフ 4. ”オーダー日”を「列」へドロップ ”オーダー日”の▼ → 1つめの詳細の「曜日」 5. ”祝日”の▼で「別名」をクリック、別名編集メニューで「値(別名)」を変更 偽⇒「祝日以外」、真⇒「祝日」 6. ”祝日”を、「列」の”オーダー日”の右側へドロップ 7. ”祝日”を、「色」へドロップ 57 T
  28. Tableau: 可視化2 : 祝日・祝日以外の売上の違い 4/x ⇒ 以下のようなグラフが表示されたらOKです! 58 注: TableauDesktopのバージョン

    (サンプルデータのバージョン) によって、結果が異なります。 本資料は2023.1で作成 祝日と祝日以外で 売上の違いはありますか? 曜日による特徴はありますか?