Download - 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 日
®© 2014 MapR Technologies 2
データのサイズは2年で 倍のペースで増えている
®© 2014 MapR Technologies 3
44 ゼッタバイト
4.4 ゼッタバイト
2011 2013
1.8 ゼッタバイト
IDC による予測では 2020年 に世界全体のデータ量は
44 ゼッタバイト に達する
2020
出典: IDC Digital Universe
®© 2014 MapR Technologies 4
非構造化データ
構造化データ
1980 2000 2010 1990 2020
非構造化データ の割合は 企業や組織が集めたデータ の 80%以上 に増大する
出典: Human-Computer Interaction & Knowledge Discovery in Complex Unstructured, Big Data
合計
格納
デー
タサ
イズ
®© 2014 MapR Technologies 5 1980 2000 2010 1990 2020
固定スキーマ
DB管理者が構造を管理
動的スキーマ(スキーマフリー) アプリケーションが構造を管理
「非スキーマ」データストア リレーショナルデータベース
MB〜GB TB〜PB サイズ
データベース
非スキーマデータストアがこのデータをとらえつつある
構造
開発スタイル
構造化 構造化、半構造化、非構造化
計画的(リリースサイクル: 数ヶ月〜数年) 反復的(リリースサイクル: 数日〜数週)
®© 2014 MapR Technologies 6
ビッグデータの世界の SQL
• SQL • BI(Tableau、MicroStrategy など) • 低レイテンシ • スケーラビリティ
• データストア上のスキーマの作成や管理:
– HDFS(Parquet、JSON など) – HBase – MongoDB
• データの変換や複製
2 DON’T WANT WANT
非スキーマデータストアの柔軟性や機敏さ に関する 妥協をすることなく SQL および BI への対応をしたい
®© 2014 MapR Technologies 7
• Hadoop/NoSQL 向けスキーマフリーのスケールアウトクエリエンジン • クエリを実行するだけ vs スキーマ中心 • 低レイテンシ • 使いやすさ • 業界標準 API: ANSI SQL、ODBC/JDBC、RESTful API
40 以上のコントリビュータ 150 年以上のデータベースおよび
分散システムの開発経験
APACHE DRILL
®© 2014 MapR Technologies 8
セルフサービスデータ探索に向けた進化
データモデリングおよび変換
データビジュアライゼーション
IT部門主導
IT部門主導
IT部門主導
セルフサービス
IT部門主導
セルフサービス
不要
セルフサービス
RDBMSを使った従来のBI
RDBMSを使ったセルフサービスBI SQL-on-Hadoop
セルフサービスデータ探索
ゼロデイ・アナリティクス
®© 2014 MapR Technologies 9
®© 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 テーブル
®© 2014 MapR Technologies 11
Drill は 動的なスキーマディスカバリ をサポート
• 固定スキーマ
• 中央管理されたレポジトリのスキーマを利用 (Hive メタストア)
• 固定スキーマ、変化するスキーマ、 もしくはスキーマレス
• 中央管理されたレポジトリのスキーマ、自己記述型データのスキーマを利用
2
SCHEMA ON WRITE
SCHEMA BEFORE READ
SCHEMA ON THE FLY
事前にスキーマを宣言 動的にスキーマを発見
®© 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 にきちんと対応できない
®© 2014 MapR Technologies 13 © 2014 MapR Technologies ®
アーキテクチャ
®© 2014 MapR Technologies 14
アーキテクチャの概要 • コモディティサーバのクラスタ
– 各ノード上でデーモン (drillbit) が動作
• 他の実行エンジンには非依存(MapReduce、Spark、Tez) – より優れた性能と管理性
• ZooKeeper が逐一変化するクラスタのメンバーシップ情報を管理 – drillbit は ZooKeeper を利用してクラスタ内の他の drillbit を見つける – クライアントは ZooKeeper を利用して drillbit を見つける
• データ処理単位は カラムナレコードバッチ – 性能への影響を最小限に抑えつつスキーマの柔軟性を実現
®© 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 …
®© 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 を含む
®© 2014 MapR Technologies 17
drillbit 内部のコアモジュール
SQL パーサ Hive
HBase
分散キャッシュ
スト
レー
ジプ
ラグ
イン
MongoDB
DFS
物理
プラ
ン
実行エンジン 論
理プ
ラン
オプティマイザ
RPC エンドポイント
®© 2014 MapR Technologies 18 © 2014 MapR Technologies ®
例: 実データの分析
®© 2014 MapR Technologies 19
デモの概要 1. Drill の起動 2. DFS および MongoDB ストレージプラグインの設定 3. データの探索
– 基本操作 – 複雑なデータ – ビュー
®© 2014 MapR Technologies 20 © 2014 MapR Technologies ®
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
®© 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
®© 2014 MapR Technologies 23 © 2014 MapR Technologies ®
ストレージプラグインの設定
®© 2014 MapR Technologies 24
MongoDB ストレージプラグインを有効化
®© 2014 MapR Technologies 25
DFS ストレージプラグインでワークスペースを定義 • d
®© 2014 MapR Technologies 26 © 2014 MapR Technologies ®
データの探索: 基本操作
®© 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" }
®© 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" : [ ]
}
®© 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 | +-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
®© 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 ネームスペース テーブル
®© 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 | +-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
®© 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 | +-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
®© 2014 MapR Technologies 33 © 2014 MapR Technologies ®
データの探索:複雑なデータ
®© 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,
®© 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}, }
}
®© 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"}} | +-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
®© 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"] | +-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
®© 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 | +-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
®© 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"] | +-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
®© 2014 MapR Technologies 40 © 2014 MapR Technologies ®
データの探索: ビュー
®© 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:
®© 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 | +-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
®© 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 | +-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
®© 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つのジョインを行い見つける…
®© 2014 MapR Technologies 45
Drill ツイート(@ApacheDrill)
®© 2014 MapR Technologies 46
ありがとうございました • もっと知るには: incubator.apache.org/drill/
• ダウンロード: incubator.apache.org/drill/download/
• ご質問は: [email protected]
• 連絡先: [email protected]
®© 2014 MapR Technologies 47
Thank You
@mapr maprtech
Tomer Shiran, VP Product Management
MapRTechnologies
maprtech
mapr-technologies