Slide 1

Slide 1 text

データウェアハウスを 使ってみよう みかん電機

Slide 2

Slide 2 text

DWH (Data Warehouse)とは ● 「データの倉庫」を意味する言葉 ● 大量のデータを管理し、分析計算を高速に行うシステム ● 例 ○ Apache Hadoop, Spark, Hive ○ AWS Athena, Redshift ○ GCP BigQuery ○ Azure SQL Data Warehouse ○ Snowflake ○ Databricks etc…

Slide 3

Slide 3 text

RDB (Relational Database) とは何が違うの? ● 方言の違いはあるものの SQL でクエリを記述できるのは共通 ● RDB は行指向データベース、DWH は列指向データベース ● DWH はデータ量がテラ、ペタ級になっても実用的に動作 ● RDB はレコードの更新も速い、DWH だと更新は遅いもしくは不可 ● RDB を使うのはWebアプリケーションなどのシステム、DWH を使うのは分析基盤 などのシステム user_id ・・・ 名前 年齢 1234 山田 21 1235 田中 30 1236 伊藤 60 行指向 列指向

Slide 4

Slide 4 text

Datalake とは何が違うの? ● Datalake は生ログが置いてあり、DWH はそれらを整形して入れたものだったはず が・・・ ○ AWS S3, Athena は Datalake で、AWS Redshift が DWH ● BigQuery は、改善によって、JSON形式の生ログを入れても大丈夫になっていた ・・・ ○ 境界はあいまいな気が ○ 本によっても言葉がぶれており

Slide 5

Slide 5 text

例)ECサイトの中での立ち位置 ● Web Framework に Laravel ● RDB に、AWS RDS ● Datalake として、AWS S3 / Athena ● DWH に、AWS Redshift DWH RDB WEB サーバ Datalake ユーザデータ 生ログ ● 購買ログ ● ページ遷移

Slide 6

Slide 6 text

わざわざ分けるの面倒だし RDB でも良くないんですか? 「購買ログ・テーブルも、RDBに入れますね」 「カラムは、購買日時、ユーザID、商品ID でいいか」 「えっ、どこの県の人が買っているか調べたい?」 「ユーザ情報と JOIN して検索すると今の県しか分からないって?」 「購買ログ・テーブルのカラムにその時点での住所情報も追加しますね」 「え、年齢も年収も所帯も子供数もさらに必要って?」 「大変です、CMの影響でユーザ数が増大しています」 「RDBの容量の9割以上が購買ログなのですが!」 ・・・・・( ゚Д゚)

Slide 7

Slide 7 text

RDB

Slide 8

Slide 8 text

大量のデータを集めて分析するために作られたのが DWH 課題 ● 分析用ログは正規化できないのでデータ量は膨大に ● 分析対象となる膨大なデータは、RDB の検索性を圧迫しコストも増大 解決策 ● DWH を使おう! ● BigQuery は、DWH の中でスタートアップや個人でも使いやすい ○ 1ヶ月1Gのデータ保存で約3円、長期になると1.5円 ○ スキャンしたデータ量だけ課金される、いわゆるサーバーレスの課金方式 ■ 他のサービスのように最低でも月に〇万円かかる、ということは無い ■ 1Gのスキャンで約0.937円 ○ 初期の契約でも、GCP上の計算リソースが空いているならば最大 2000並列で計算してくれるので、 めっちゃ速い

Slide 9

Slide 9 text

まとめ ● DWHは、大量のデータを管理することができます ● そのデータの分析を高速に行うことができます ● 餅は餅屋 ● SQL でデータの操作はできるので実例は略 ● DWH おススメの本→ ● おまけ ○ VRChat のワールドデータ公開します

Slide 10

Slide 10 text

おまけ)VRChat ワールドデータ (Parquet) ● VRC API にて、ワールドの更新があるとその一覧が取得できるので、そこからデー タ取得 ● ワールド名や作者名、訪問数、お気に入り数、説明文、タグなどがあります

Slide 11

Slide 11 text

おまけ)BigQuery で、月毎のワールド公開数を調べる ● クエリを実行する前に、スキャンするデー タ量が表示され、計算コストが分かるので うれしい↑ ● WITH 構文が使えるので、サブクエリのネ ストしなくても良い ● 最大2000並列で計算するので速い ● クエリ結果は見やすいとは言えないので、 スプレッドシートや JupyterLab などにエク スポート