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

4月から取り組んできたLookerの導入から実装までのお話

 4月から取り組んできたLookerの導入から実装までのお話

2020-10-23 フィードフォース社内技術勉強会のプレゼン資料です。
https://developer.feedforce.jp/entry/2020/10/23/190000

Takashi Masuda

October 23, 2020
Tweet

More Decks by Takashi Masuda

Other Decks in Technology

Transcript

  1. 気になる料金
 • 年間何百万円オーダー
 • 基本はユーザ数に応じた課金(SaaSモデル)
 • 導入時はスポットでいろいろかかる
 ◦ JumpStart(実質的に必須)
 ◦

    RapidDeployment(今回未受講)
 ◦ Lookerロゴから会社ロゴに変える(今回は見送り)
 ◦ Staging用インスタンス(今回はなし)
 • 営業の方と調整して決まる

  2. BIツールとの関わり
 • Redashは割と真面目にHerokuやEC2で運用したことがある
 ◦ Heroku と Redash は相性が良いのでは?という話 / マスタカの

    ChangeLog メ モ
 • Redashは開発系運用ダッシュボードとしては優秀だけど、ビジネス向けには厳しい という感想
 ◦ グラフやテーブルを作るためにはSQLのスキルが必要
 ◦ 管理するクエリが増えるとひたすら大変になる
 • TableauとGoogleデータポータルは少し検討したことがあるけど、私には難しすぎた
 https://masutaka.net/chalow/2018-12-17-1.html 

  3. Redashとの勝手な比較
 
 Redash
 Looker
 SQLの習得が必要
 Yes
 LookML開発者のみ 
 学習コスト
 低い(SQLのみ)


    高い(LookML)
 始め方
 一人で始められる
 フォームから連絡
 料金
 格安
 月何十万オーダー以上 
 OSS?
 Yes
 No
 大きなチーム向け? 
 No
 Yes

  4. 今回の対象データ
 • 広告媒体の数値
 ◦ Criteo, Facebook, Google, Indeed, LINE, RTB

    House, SmartNews, Yahoo! JAPAN, …
 • 計測ツールの数値
 ◦ Google Analytics
 • その他
 Webアプリケーションが扱うデータと違って、正規化されてい ない汚いデータが多い。今のところETLは使っていない。

  5. 今回のPoCタイムライン
 4/15 9:00-10:30 Kick off兼初回ペアプロ 4/22 10:00-11:00 PoC 1st Check

    In 5/7 13:00-14:00 PoC 3rd Check In 4/30 13:00-14:00 PoC 2nd Check In 5/27 最終打ち合わせ (契約判断) 4/2 10:00-11:00 事前準備 PoCスコープ定義 この間にLookerと BigQueryを連携してお く 5/19 15:00-16:00 PoC Final Check In ※Looker社からの資料を引用&加筆 

  6. JumpStartで実践したこと
 • JumpStart前にLooker Training(英語)を全て受講した
 • ほぼ全部の回で前日に質問をSlackで送った
 • 全部の回でesa記事を作って、Q&Aや学んだことを記録した。全て録 画を頂けたのはありがたかった
 •

    PoC当初から会社からLooker専任にして頂けたことは良かった。と は言え、最初はそこまでやることはないので、専任はPoC中盤くらい からでも良いかも
 https://training.looker.com/ 

  7. LookMLの例
 view: orders {
 sql_table_name: `feedmatic-looker.sandbox_masutaka.orders` ;; 
 
 dimension:

    order_id { 
 primary_key: yes
 type: number
 sql: ${TABLE}.order_id ;; 
 }
 
 measure: count {
 type: count
 drill_fields: [order_id] 
 }
 }
 

  8. 2つのテーブル
 order_id user_id total order_date 1 100 $50.36 2017-12-01 2

    101 $24.12 2017-12-02 3 137 $50.36 2017-12-02 $124.84 order_id item_id quantity unit_price 1 50 1 $23.00 1 63 2 $13.68 2 63 1 $13.68 2 72 1 $5.08 2 79 1 $5.36 3 78 1 $50.36 7 $111.16 order_items orders
  9. order_idでJoinする
 order_id user_id total order_date item_id quantity unit_price 1 100

    $50.36 2017-12-01 50 1 $23.00 1 100 $50.36 2017-12-01 63 2 $13.68 2 101 $24.12 2017-12-02 63 1 $13.68 2 101 $24.12 2017-12-02 72 1 $5.08 2 101 $24.12 2017-12-02 79 1 $5.36 3 137 $50.36 2017-12-02 78 1 $50.36 増えてる $223.44 7 $111.16
  10. Lookerが生成するSQL
 SELECT COALESCE(ROUND(COALESCE(CAST( ( SUM(DISTINCT (CAST(ROUND(COALESCE(orders.total ,0)*(1/1000*1.0), 9) AS NUMERIC)

    + (cast(cast(concat('0x', substr(to_hex(md5(CAST(orders.order_id AS STRING))), 1, 15)) as int64) as numeric) * 4294967296 + cast(cast(concat('0x', substr(to_hex(md5(CAST(orders.order_id AS STRING))), 16, 8)) as int64) as numeric)) * 0.000000001 )) - SUM(DISTINCT (cast(cast(concat('0x', substr(to_hex(md5(CAST(orders.order_id AS STRING))), 1, 15)) as int64) as numeric) * 4294967296 + cast(cast(concat('0x', substr(to_hex(md5(CAST(orders.order_id AS STRING))), 16, 8)) as int64) as numeric)) * 0.000000001) ) / (1/1000*1.0) AS FLOAT64), 0), 6), 0) AS orders_total_total, COALESCE(SUM(order_items.quantity ), 0) AS order_items_total_quantity, COALESCE(SUM(order_items.unit_price ), 0) AS order_items_total_unit_price FROM `feedmatic-looker.sandbox_masutaka.orders` AS orders LEFT JOIN `feedmatic-looker.sandbox_masutaka.order_items` AS order_items ON orders.order_id = order_items.order_id LIMIT 1 これがポイント

  11. ポイントはSUM DISTINCT
 WITH tmp AS ( SELECT 200 AS price

    UNION ALL SELECT 300 UNION ALL SELECT 300 ) SELECT SUM(price) from tmp -- -> 800 WITH tmp AS ( SELECT 200 AS price UNION ALL SELECT 300 UNION ALL SELECT 300 ) SELECT SUM(DISTINCT(price)) from tmp -- -> 500