Slide 1

Slide 1 text

Snowflake で眠ったデータを起こそう! @kenkoooo

Slide 2

Slide 2 text

自己紹介 1
 @kenkoooo • 株式会社 estie • スタッフエンジニア • 大学(分子生物学・化学) • →自宅(警備) • →国立情報学研究所(アルゴリズム) • →リクルート(ウェブ広告) • →SoundHound(AIスピーカー) • →Indeed(求人検索) • →estie(不動産)

Slide 3

Slide 3 text

2


Slide 4

Slide 4 text

3


Slide 5

Slide 5 text

自己紹介 4
 @kenkoooo • 株式会社 estie • スタッフエンジニア • 大学(分子生物学・化学) • →自宅(警備) • →国立情報学研究所(アルゴリズム) • →リクルート(ウェブ広告) • →SoundHound(AIスピーカー) • →Indeed(求人検索) • →estie(不動産)

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

スタッフエンジニアとは 6


Slide 8

Slide 8 text

Snowflakeとは? 7


Slide 9

Slide 9 text

Snowflake とは 8
 • Snowflake 社が開発するデータプラットフォーム • メチャクチャでかいデータベース • メチャクチャ強い

Slide 10

Slide 10 text

Snowflake とは 9
 SQL でクエリが書ける

Slide 11

Slide 11 text

10


Slide 12

Slide 12 text

11


Slide 13

Slide 13 text

estie が抱える課題 12
 • データがメチャクチャ増えてきた! • データソースが増えてきた! • カバー範囲が広がってきた! • ユーザーが増えてきた!

Slide 14

Slide 14 text

全てのデータが集まる場所 13


Slide 15

Slide 15 text

S3 にデータが置けるものなら Snowpipe で同期できる 14
 CSV ファイル アプリのログ S3 バケット S3 バケット

Slide 16

Slide 16 text

アプリの MySQL のデータも Snowflake に寄せられる 15
 アプリのDB GitHub のログ Fivetran Fivetran

Slide 17

Slide 17 text

全てのデータが集まる! 16
 ユーザーが入力したデータ 開発生産性 リクエストログ 受領したデータ

Slide 18

Slide 18 text

全てのデータが集まっていると何が良い? 17
 商品に関心のあるユーザー from アプリの MySQL 商品情報 from 受領したデータ ユーザーの詳細情報 from ユーザー基盤の MySQL ユーザーの行動 from 別アプリのログ

Slide 19

Slide 19 text

パワフルデータ加工場 18


Slide 20

Slide 20 text

受領したデータをそのまま出すことはない 19
 受領したデータ アプリの MySQL

Slide 21

Slide 21 text

受領したデータをそのまま出すことはない 20
 受領したデータ アプリの MySQL 社内の データ

Slide 22

Slide 22 text

こんな感じのイメージ 21
 const input = read_csv(); const my_data = load_from_db(); const new_db1 = my_function1(input); const new_db2 = my_function2(new_db1); const new_db3 = my_function3(new_db2); const new_db4 = my_function4(my_data, new_db2); app_db.load(new_db3); app_db.load(new_db4);

Slide 23

Slide 23 text

dbt で加工する 22
 select building_id, building_name, building_address, prefectures.name as prefecture_name, owners.name as owner_name from {{ ref("buildings") }} left join {{ ref("owners") }} owners on owners.building_id = buildings.building_id left join {{ source("areas", "prefectures") }} prefectures on prefectures.prefecture_id = buildings.prefecture_id

Slide 24

Slide 24 text

こんな感じのグラフが出せる 23


Slide 25

Slide 25 text

受領したデータをそのまま出すことはない 24
 受領したデータ アプリの MySQL 社内の データ

Slide 26

Slide 26 text

データの加工は Snowflake + dbt 25
 受領したデータ 社内の データ

Slide 27

Slide 27 text

Streamlit 26


Slide 28

Slide 28 text

Streamlit とは 27
 • Python で簡単にデータアプリが作れる

Slide 29

Slide 29 text

Snowflake が Streamlit を買収 28


Slide 30

Slide 30 text

社内向けデータアプリが簡単に作れる! 29


Slide 31

Slide 31 text

社内向けデータアプリが簡単に作れる! 30
 • Snowflake アカウントを持っているとアクセスできる • アカウント管理が超ラク • データの権限もアカウントに紐付いている • 社内用途なら Streamlit で十分 • インフラの設定なども不要 • Snowflake の高級なインスタンスでウェブアプリを……

Slide 32

Slide 32 text

まとめ 31


Slide 33

Slide 33 text

まとめ 32
 • あらゆるデータが1ヶ所に集まるのは最高! • データの加工もできて最高! • データアプリも簡単に作成できて最高!

Slide 34

Slide 34 text

estie で大量のデータをぶん回そう! 33