apache drill を利用した実データの分析

47
© 2014 MapR Technologies 1 ® © 2014 MapR Technologies Apache Drill を利用した実データの分析 Tomer Shiran VP Product Management, MapR Technologies Co-Founder, PMC Member and Committer, Apache Drill 201411 20

Upload: mapr-technologies-japan

Post on 17-Jul-2015

623 views

Category:

Data & Analytics


5 download

TRANSCRIPT

Page 1: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 1

®

© 2014 MapR Technologies

Apache Drill を利用した実データの分析 Tomer Shiran VP Product Management, MapR Technologies Co-Founder, PMC Member and Committer, Apache Drill 2014年 11 月 20 日

Page 2: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 2

データのサイズは2年で 倍のペースで増えている

Page 3: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 3

44 ゼッタバイト

4.4 ゼッタバイト

2011 2013

1.8 ゼッタバイト

IDC による予測では 2020年 に世界全体のデータ量は

44 ゼッタバイト に達する

2020

出典: IDC Digital Universe

Page 4: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 4

非構造化データ

構造化データ

1980 2000 2010 1990 2020

非構造化データ の割合は 企業や組織が集めたデータ の 80%以上 に増大する

出典: Human-Computer Interaction & Knowledge Discovery in Complex Unstructured, Big Data

合計

格納

デー

タサ

イズ

Page 5: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 5 1980 2000 2010 1990 2020

固定スキーマ

DB管理者が構造を管理

動的スキーマ(スキーマフリー) アプリケーションが構造を管理

「非スキーマ」データストア リレーショナルデータベース

MB〜GB TB〜PB サイズ

データベース

非スキーマデータストアがこのデータをとらえつつある

構造

開発スタイル

構造化 構造化、半構造化、非構造化

計画的(リリースサイクル: 数ヶ月〜数年) 反復的(リリースサイクル: 数日〜数週)

Page 6: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 6

ビッグデータの世界の SQL

•  SQL •  BI(Tableau、MicroStrategy など) •  低レイテンシ •  スケーラビリティ

•  データストア上のスキーマの作成や管理:

–  HDFS(Parquet、JSON など) –  HBase –  MongoDB

•  データの変換や複製

2 DON’T WANT WANT

非スキーマデータストアの柔軟性や機敏さ に関する 妥協をすることなく SQL および BI への対応をしたい

Page 7: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 7

• Hadoop/NoSQL 向けスキーマフリーのスケールアウトクエリエンジン • クエリを実行するだけ vs スキーマ中心 • 低レイテンシ • 使いやすさ • 業界標準 API: ANSI SQL、ODBC/JDBC、RESTful API

40 以上のコントリビュータ 150 年以上のデータベースおよび

分散システムの開発経験

APACHE DRILL

Page 8: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 8

セルフサービスデータ探索に向けた進化

データモデリングおよび変換

データビジュアライゼーション

IT部門主導

IT部門主導

IT部門主導

セルフサービス

IT部門主導

セルフサービス

不要

セルフサービス

RDBMSを使った従来のBI

RDBMSを使ったセルフサービスBI SQL-on-Hadoop

セルフサービスデータ探索

ゼロデイ・アナリティクス

Page 9: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 9

Page 10: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 10

Drill のデータモデルはフレキシブル

HBase

JSON BSON

CSV TSV

Parquet Avro

スキーマレス 固定スキーマ

フラット

複雑

柔軟性

柔軟性

名前! 性別! 年齢!Michael ! M ! 6 !Jennifer ! F ! 3 !

{ ! name: { ! first: Michael, ! last: Smith ! }, ! hobbies: [ski, soccer], ! district: Los Altos !} !{ ! name: { ! first: Jennifer, ! last: Gates ! }, ! hobbies: [sing], ! preschool: CCLC !} !

RDBMS/SQL-on-Hadoopテーブル

Apache Drill テーブル

Page 11: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 11

Drill は 動的なスキーマディスカバリ をサポート

•  固定スキーマ

•  中央管理されたレポジトリのスキーマを利用 (Hive メタストア)

•  固定スキーマ、変化するスキーマ、 もしくはスキーマレス

•  中央管理されたレポジトリのスキーマ、自己記述型データのスキーマを利用

2

SCHEMA ON WRITE

SCHEMA BEFORE READ

SCHEMA ON THE FLY

事前にスキーマを宣言 動的にスキーマを発見

Page 12: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 12

ネイティブ JSON

SELECT  json_value(po_document,      '$.AllowPartialShipment’  RETURNING  NUMBER)  FROM      j_purchaseorder;  

SELECT  po_document.AllowPartialShipment    FROM      j_purchaseorder;  

Oracle の JSON クエリ:

Drill のJSON クエリ:

リレーショナルデータベースはスキーマフリーな JSON にきちんと対応できない

Page 13: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 13 © 2014 MapR Technologies ®

アーキテクチャ

Page 14: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 14

アーキテクチャの概要 •  コモディティサーバのクラスタ

–  各ノード上でデーモン (drillbit) が動作

•  他の実行エンジンには非依存(MapReduce、Spark、Tez) –  より優れた性能と管理性

•  ZooKeeper が逐一変化するクラスタのメンバーシップ情報を管理 –  drillbit は ZooKeeper を利用してクラスタ内の他の drillbit を見つける –  クライアントは ZooKeeper を利用して drillbit を見つける

•  データ処理単位は カラムナレコードバッチ  –  性能への影響を最小限に抑えつつスキーマの柔軟性を実現

Page 15: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 15

Drill はデータ局所性を最大限活用する

データソース ベストプラクティス HDFS または MapR-FS 各 DataNode 上の drillbit がアクセス HBase または MapR-DB 各 RegionServer 上の drillbit がアクセス MongoDB 各 mongod 上の drillbit がアクセス(レプリカ使用時はレプリカノード上で稼働)

drillbit  

DataNode/RegionServer/

mongod  

drillbit  

DataNode/RegionServer/

mongod  

drillbit  

DataNode/RegionServer/

mongod  

ZooKeeper ZooKeeper

ZooKeeper …

Page 16: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 16

SELECT* クエリ実行

drillbit  ZooKeeper

クライアント (JDBC, ODBC,

REST)

1.  drillbit を見つける(セッションごと)

3.  論理および物理実行プランを作成 4.  クラスタに個別のフラグメントの実行を行わせる

(完全な分散実行)

ZooKeeper ZooKeeper

drillbit  drillbit  

2.  drillbit  にクエリを送信

5.  クライアントに結果を返す

* CTAS (CREATE TABLE AS SELECT) クエリはステップ 1〜4 を含む

Page 17: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 17

drillbit 内部のコアモジュール  

SQL パーサ Hive

HBase

分散キャッシュ

スト

レー

ジプ

ラグ

イン

MongoDB

DFS

物理

プラ

実行エンジン 論

理プ

ラン

オプティマイザ

RPC エンドポイント

Page 18: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 18 © 2014 MapR Technologies ®

例: 実データの分析

Page 19: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 19

デモの概要 1.  Drill の起動 2.  DFS および MongoDB ストレージプラグインの設定 3.  データの探索

–  基本操作 –  複雑なデータ –  ビュー

Page 20: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 20 © 2014 MapR Technologies ®

Drill の起動

Page 21: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 21

Drill を組み込みモードで起動(sqlline) $  tar  xf  apache-­‐drill-­‐0.7.0.tar.gz  $  cd  apache-­‐drill-­‐0.7.0  $  bin/sqlline  -­‐u  jdbc:drill:zk=local  >  SELECT  *      FROM  dfs.root.`/Users/tshiran/Development/demo/data/yelp/user.json`      LIMIT  1;  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  yelping_since  |      votes        |  review_count  |        name        |    user_id      |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  2012-­‐02              |  {"funny":1,"useful":5,"cool":0}  |  6                        |  Lee                |  qtrmBGNqCvupHMHL_bKFgQ  |  

•  drillbit(Drill デーモン)が組み込みモードで自動的に起動する •  組み込みモードでは ZooKeeper は不要(したがって zk=local) •  組み込みモードでは BI クライアント(JDBC/ODBC)は使用できない

Web UI にアクセスが可能になる: http://localhost:8047

Page 22: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 22

または Run Drill を分散モードで起動…

$  zkServer  start  •  ZooKeeper(zkServer)を稼働させる:

•  Web UI にアクセス: http://localhost:8047 •  クライアントからクラスタに接続(sqlline を使用):

•  クライアント(例: sqlline) は ZooKeeper に接続してクラスタノードを見つける •  1つの ZooKeeper のセットに 複数の Drill クラスタが登録されている場合には、JDBC 接続文字列

の中で希望のクラスタを指定する: jdbc:drill:zk=localhost:2181/drill/<クラスタ名> •  ZooKeeper の稼働状態が不明の場合 telnet  localhost  2181 を実行して接続できるか確認

•  conf/drill-­‐override.conf 内で Drill クラスタ名と ZooKeeper ノードを定義 •  drillbit を起動:  $  bin/drillbit.sh  start  

$  bin/sqlline  -­‐u  jdbc:drill:zk=localhost:2181  

Page 23: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 23 © 2014 MapR Technologies ®

ストレージプラグインの設定

Page 24: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 24

MongoDB ストレージプラグインを有効化

Page 25: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 25

DFS ストレージプラグインでワークスペースを定義 •  d

Page 26: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 26 © 2014 MapR Technologies ®

データの探索: 基本操作

Page 27: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 27

データ: DFS ファイル

{      "votes":  {"funny":  0,  "useful":  2,  "cool":  1},      "user_id":  "Xqd0DzHaiyRqVH3WRG7hzg",      "review_id":  "15SdjuK7DmYqUAj6rjGowg",      "stars":  5,      "date":  "2007-­‐05-­‐17",      "text":  "dr.  goldberg  offers  everything  ...",      "type":  "review",      "business_id":  "vcNAWiLM4dR7D2nwwJ7nCA"  }  

Page 28: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 28

データ: MongoDB コレクション $  mongo  MongoDB  shell  version:  2.6.5  >  show  databases;  admin    (empty)  local    0.078GB  yelp      0.453GB  >  use  yelp  >  db.users.findOne()  {  

 "_id"  :  ObjectId("54566cdf3237149de181a92a"),    "yelping_since"  :  "2012-­‐02",    "votes"  :  {      "funny"  :  1,      "useful"  :  5,      "cool"  :  0    },    "review_count"  :  6,    "name"  :  "Lee",    "user_id"  :  "qtrmBGNqCvupHMHL_bKFgQ",    "friends"  :  [  ]  

}  

Page 29: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 29

やってみましょう >  SELECT  *      FROM  dfs.root.`/Users/tshiran/Development/demo/data/yelp/review.json`      WHERE  stars  =  1      LIMIT  1;  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |      votes        |    user_id      |  review_id    |      stars        |        date        |        text        |        type        |  business_id  |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  {"funny":0,"useful":0,"cool":0}  |  Qrs3EICADUKNFoUq2iHStA  |  _ePLBPrkrf4bhyiKWEn4Qg  |  1                    |  2013-­‐04-­‐19  |  I  don't  know  what  Dr.  Goldberg  was  like  before    moving  to  Arizona,  but  let  me  tell  you,  STAY  AWAY  from  this  doctor  and  this  office.  |  review          |  vcNAWiLM4dR7D2nwwJ7nCA  |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  

Page 30: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 30

ストレージプラグインの利用とワークスペース

>  SELECT  *  FROM  dfs.root.`/Users/tshiran/Development/demo/data/yelp/review.json`  LIMIT  1;  >  SELECT  *  FROM  dfs.demo.`yelp/review.json`  LIMIT  1;  >  SELECT  *  FROM  mongo.yelp.users  LIMIT  1;  >  USE  mongo.yelp;  >  SELECT  *  FROM  users  LIMIT  1;  

ストレージプラグイン ワークスペース

ワークスペースからの相対パス

ストレージプラグイン ワークスペース テーブル dfs パス ワークスペースからの相対パス mongo データベース コレクション hive データベース テーブル hbase ネームスペース テーブル

Page 31: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 31

最も多いユーザ名(MongoDB) >  SELECT  name,  count(*)  AS  users      FROM  mongo.yelp.users      GROUP  BY  name      ORDER  BY  users  DESC  LIMIT  10;  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |        name        |      users        |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  David            |  2453              |  |  John              |  2378              |  |  Michael        |  2322              |  |  Chris            |  2202              |  |  Mike              |  2037              |  |  Jennifer      |  1867              |  |  Jessica        |  1463              |  |  Jason            |  1457              |  |  Michelle      |  1439              |  |  Brian            |  1436              |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  

Page 32: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 32

最も店舗が多い都市 >  SELECT  state,  city,  count(*)  AS  businesses      FROM  dfs.demo.`/yelp/business.json`      GROUP  BY  state,  city      ORDER  BY  businesses  DESC  LIMIT  10;  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |      state        |        city        |    businesses  |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  NV                  |  Las  Vegas    |  12021              |  |  AZ                  |  Phoenix        |  7499                |  |  AZ                  |  Scottsdale  |  3605                |  |  EDH                |  Edinburgh    |  2804                |  |  AZ                  |  Mesa              |  2041                |  |  AZ                  |  Tempe            |  2025                |  |  NV                  |  Henderson    |  1914                |  |  AZ                  |  Chandler      |  1637                |  |  WI                  |  Madison        |  1630                |  |  AZ                  |  Glendale      |  1196                |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  

Page 33: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 33 © 2014 MapR Technologies ®

データの探索:複雑なデータ

Page 34: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 34

business.json (1) {  

 "business_id":  "4bEjOyTaDG24SY5TxsaUNQ",    "full_address":  "3655  Las  Vegas  Blvd  S\nThe  Strip\nLas  Vegas,  NV  89109",    "hours":  {      "Monday":  {"close":  "23:00",  "open":  "07:00"},      "Tuesday":  {"close":  "23:00",  "open":  "07:00"},      "Friday":  {"close":  "00:00",  "open":  "07:00"},      "Wednesday":  {"close":  "23:00",  "open":  "07:00"},      "Thursday":  {"close":  "23:00",  "open":  "07:00"},      "Sunday":  {"close":  "23:00",  "open":  "07:00"},      "Saturday":  {"close":  "00:00",  "open":  "07:00"}    },    "open":  true,    "categories":  ["Breakfast  &  Brunch",  "Steakhouses",  "French",  "Restaurants"],    "city":  "Las  Vegas",    "review_count":  4084,    "name":  "Mon  Ami  Gabi",    "neighborhoods":  ["The  Strip"],    "longitude":  -­‐115.172588519464,  

Page 35: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 35

business.json (2)  "state":  "NV",    "stars":  4.0,  

   "attributes":  {      "Alcohol":  "full_bar”,  

     "Noise  Level":  "average",      "Has  TV":  false,      "Attire":  "casual",      "Ambience":  {        "romantic":  true,        "intimate":  false,        "touristy":  false,        "hipster":  false,  

       "classy":  true,        "trendy":  false,  

       "casual":  false      },      "Good  For":  {"dessert":  false,  "latenight":  false,  "lunch":  false,  

                                               "dinner":  true,  "breakfast":  false,  "brunch":  false},    }  

}  

Page 36: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 36

今どの店舗が開いてる(22:00)? >  SELECT  name,  b.hours      FROM  dfs.demo.`yelp/business.json`  b      WHERE  b.hours.Saturday.`open`  <  '22:00'  AND                  b.hours.Saturday.`close`  >  '22:00'      LIMIT  2;  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |        name        |      hours        |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  Chang  Jiang  Chinese  Kitchen  |  {"Tuesday":{"close":"22:00","open":"11:00"},"Friday":{"close":"22:30","open":"11:00"},"Monday":{"close":"22:00","open":"11:00"},"Wednesday":{"close":"22:00","open":"11:00"},"Thursday":{"close":"22:00","open":"11:00"},"Sunday":{"close":"21:00","open":"16:00"},"Saturday":{"close":"22:30","open":"11:00"}}  |  |  Grand  China  Restaurant  |  {"Tuesday":{"close":"22:00","open":"11:00"},"Friday":{"close":"23:00","open":"11:00"},"Monday":{"close":"22:00","open":"11:00"},"Wednesday":{"close":"22:00","open":"11:00"},"Thursday":{"close":"22:00","open":"11:00"},"Sunday":{"close":"22:00","open":"12:00"},"Saturday":{"close":"23:00","open":"11:00"}}  |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  

Page 37: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 37

午後10時のラスベガス、おいしい中東料理が食べたい >  SELECT  name,  stars,  b.hours.Friday,  categories      FROM  dfs.demo.`yelp/business.json`  b      WHERE  b.hours.Friday.`open`  <  '22:00'  AND                  b.hours.Friday.`close`  >  '22:00'  AND                  REPEATED_CONTAINS(categories,  'Mediterranean')  AND                  city  =  'Las  Vegas'      ORDER  BY  stars  DESC      LIMIT  2;  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |        name        |      stars        |      EXPR$2      |  categories  |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  Olives          |  4.0                |  {"close":"22:30","open":"11:00"}  |  ["Mediterranean","Restaurants"]  |  |  Marrakech  Moroccan  Restaurant  |  4.0                |  {"close":"23:00","open":"17:30"}  |  ["Mediterranean","Middle  Eastern","Moroccan","Restaurants"]  |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  

Page 38: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 38

繰り返しの値のフラット化 >  SELECT  name,  categories      FROM  dfs.demo.`yelp/business.json`  LIMIT  3;  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |        name        |  categories  |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  Eric  Goldberg,  MD  |  ["Doctors","Health  &  Medical"]  |  |  Pine  Cone  Restaurant  |  ["Restaurants"]  |  |  Deforest  Family  Restaurant  |  ["American  (Traditional)","Restaurants"]  |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  

>  SELECT  name,  FLATTEN(categories)  AS  categories      FROM  dfs.demo.`yelp/business.json`  LIMIT  5;  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |        name        |  categories  |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  Eric  Goldberg,  MD  |  Doctors        |  |  Eric  Goldberg,  MD  |  Health  &  Medical  |  |  Pine  Cone  Restaurant  |  Restaurants  |  |  Deforest  Family  Restaurant  |  American  (Traditional)  |  |  Deforest  Family  Restaurant  |  Restaurants  |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  

Page 39: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 39

最も多い店舗カテゴリと最も少ない店舗カテゴリ >  SELECT  category,  count(*)  AS  businesses      FROM  (SELECT  name,  FLATTEN(categories)  AS  category                  FROM  dfs.demo.`yelp/business.json`)  c      GROUP  BY  category  ORDER  BY  businesses  DESC;  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |    category    |  businesses  |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  Restaurants  |  14303            |  …  |  Australian  |  1                    |  |  Boat  Dealers  |  1                    |  |  Firewood      |  1                    |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  715  rows  selected  (3.439  seconds)  

>  SELECT  name,  categories  FROM  dfs.demo.`yelp/business.json`  WHERE  true  and  REPEATED_CONTAINS(categories,  'Australian');  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |        name        |  categories  |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  The  Australian  AZ  |  ["Bars","Burgers","Nightlife","Australian","Sports  Bars","Restaurants"]  |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  

Page 40: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 40 © 2014 MapR Technologies ®

データの探索: ビュー

Page 41: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 41

名前-性別マッピングのビューの作成

>  CREATE  VIEW  dfs.tmp.`names`  AS          SELECT  columns[0]  AS  name,  columns[4]  AS  gender          FROM  dfs.demo.`names.csv`;  >  USE  dfs.tmp;  >  CREATE  VIEW  names1  ASSELECT  columns[0]  AS  name,  columns[4]  AS  gender  FROM  dfs.demo.`names.csv`;  >  SELECT  *  FROM  dfs.tmp.names  WHERE  name  =  'John';  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |        name        |      gender      |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  John              |  Male              |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  

columns[0]   columns[4]  

names.csv:  

Page 42: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 42

Yelp 内で最も多い名前(と性別) >  SELECT  u.name,  n.gender,  count(*)  AS  number      FROM  mongo.yelp.users  u,  dfs.tmp.names  n      WHERE  u.name  =  n.name      GROUP  BY  u.name,  n.gender      ORDER  BY  number  DESC  LIMIT  10;  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |        name        |      gender      |      number      |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  David            |  Male              |  2453              |  |  John              |  Male              |  2378              |  |  Michael        |  Male              |  2322              |  |  Chris            |  Unknown        |  2202              |  |  Mike              |  Male              |  2037              |  |  Jennifer      |  Female          |  1867              |  |  Jessica        |  Female          |  1463              |  |  Jason            |  Male              |  1457              |  |  Michelle      |  Female          |  1439              |  |  Brian            |  Male              |  1436              |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  

Page 43: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 43

誰がより高い評価をしているか – 男性 or 女性? >  SELECT  n.gender,  count(*)  AS  users,  round(avg(average_stars),  2)  stars      FROM  mongo.yelp.users  u,  dfs.tmp.names  n      WHERE  u.name  =  n.name      GROUP  BY  n.gender;  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |      gender      |      users        |      stars        |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  Female          |  103684          |  3.77              |  |  Male              |  97430            |  3.696            |  |  Unknown        |  18409            |  3.727            |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  

Page 44: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 44

誰がよくレビューを書いているか – 男性 or 女性?

>  SELECT  n.gender,  round(avg(length(r.text)))  AS  review_length      FROM  dfs.demo.`yelp/review.json`  r,                mongo.yelp.users  u,                dfs.tmp.names  n      WHERE  u.name  =  n.name  AND  r.user_id  =  u.user_id      GROUP  BY  n.gender;  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |      gender      |  review_length  |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  Male              |  665                      |  |  Female          |  730                      |  |  Unknown        |  711                      |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  

3つのジョインを行い見つける…

Page 45: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 45

Drill ツイート(@ApacheDrill)

Page 46: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 46

ありがとうございました •  もっと知るには: incubator.apache.org/drill/

•  ダウンロード: incubator.apache.org/drill/download/

•  ご質問は: [email protected]

•  連絡先: [email protected]

Page 47: Apache Drill を利用した実データの分析

®© 2014 MapR Technologies 47

Thank You

@mapr maprtech

[email protected]

Tomer Shiran, VP Product Management

MapRTechnologies

maprtech

mapr-technologies