SlideShare a Scribd company logo
®
© 2015 MapR Technologies 1
®
© 2015 MapR Technologies
Apache Drill Overview
M.C. Srivas – CTO and Co-Founder, MapR Technologies
草薙  昭彦 – Data Engineer, MapR Technologies
2015 年年  9 ⽉月  15 ⽇日
®
© 2015 MapR Technologies 2
⾃自⼰己紹介
•  草薙  昭彦 (@nagix)
•  MapR Technologies
データエンジニア
NS-SHAFT	
無料!
®
© 2015 MapR Technologies 3
®
© 2015 MapR Technologies 4
Apache Drill 1.0 リリース (5/19) http://drill.apache.org
®
© 2015 MapR Technologies 5
本⽇日のトピック
•  Apache Drill 概要
•  利利⽤用事例例
•  ロードマップ
•  オープンデータを分析してみよう
®
© 2015 MapR Technologies 6© 2015 MapR Technologies
®
Apache Drill 概要
®
© 2015 MapR Technologies 7
⾮非構造化データ
構造化データ
1980 2000 20101990 2020
データは2年年で倍に増える
⾮非構造化データ  の割合は
企業や組織が集めたデータ
の  80%以上  に増⼤大する
出典: Human-Computer Interaction & Knowledge Discovery in Complex Unstructured, Big Data
合計格納データサイズ
®
© 2015 MapR Technologies 8
1980 2000 20101990 2020
固定スキーマ
DB管理理者が構造を管理理
動的/柔軟なスキーマ
アプリケーションが構造を管理理
⾮非リレーショナルデータベースリレーショナルデータベース
GB〜~TB TB〜~PBデータサイズ
データベース
データは⾮非リレーショナルデータストアに向かう
データ構造
開発スタイル
構造化 構造化、半構造化、⾮非構造化
計画的(リリースサイクル=数ヶ⽉月〜~数年年) 反復復的(リリースサイクル=数⽇日〜~数週間)
®
© 2015 MapR Technologies 9
⾮非構造化データの時代の  SQL とは?
SQL の使いやすさ NoSQL の柔軟性
•  SQL
•  BI (Tableau、MicroStrategy
など)
•  低レイテンシ
•  スケーラビリティ
•  スキーマ管理理なし
–  HDFS (Parquet、JSON など)
–  HBase
–  …
•  データ変換・複製なし
®
© 2015 MapR Technologies 10
Industry's First
Schema-free SQL engine
for Big Data
®
®
© 2015 MapR Technologies 11
セルフサービスからスキーマフリーへの拡張
迅速さ&ビジネス価値
BI のユースケース
IT部⾨門主導のBI
セルフサービス
BI
スキーマフリー
データ探索索
IT部⾨門主導のBI IT部⾨門主導のBI
セルフサービス
BI
IT 部⾨門への依存なしで
アナリストが主導
IT 部⾨門の  ETL の⽀支援を
受け、アナリストが主導
IT 部⾨門が作成する
レポート、スプレッドシート
1980年年代 -1990年年代 2000年年代 現在
®
© 2015 MapR Technologies 12
即時分析により「即断可能な」ビジネスを実現
Hadoop

データ
データ
モデリング
変換
データ移動
(任意)
ユーザー
Hadoop

データ
ユーザー
管理理された
アプローチ
探索索的な
アプローチ
新しいビジネスの問いかけソースデータの変更更
結果を得るまでの合計時間: 数週間から数ヶ⽉月
結果を得るまでの合計時間: 数分
®
© 2015 MapR Technologies 13
Drill は  動的なスキーマディスカバリ  をサポート
•  固定スキーマ
•  中央管理理されたレポジトリのスキー  
マを利利⽤用  (Hive メタストア)
•  固定スキーマ、変化するスキーマ、  
もしくはスキーマレス
•  中央管理理されたレポジトリのスキーマ、  
⾃自⼰己記述型データのスキーマを利利⽤用
2動的にスキーマを発⾒見見事前にスキーマを宣⾔言
SCHEMA ON
WRITE
SCHEMA
BEFORE READ
SCHEMA ON THE
FLY
®
© 2015 MapR Technologies 14
Drill のデータモデルはフレキシブル
JSON
BSON
HBase
Parquet
Avro
CSV
TSV
動的スキーマ固定スキーマ
複雑
フラット
柔軟性
Name! Gender! Age!
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 テーブル
複雑性
®
© 2015 MapR Technologies 15
-  サブディレクトリ
-  HBase ネームスペース
-  Hive データベース
Drill は「SQL on Everything」を可能にする
SELECT	
  *	
  FROM	
  dfs.yelp.`business.json`	
  !
ワークスペース
-  パス名
-  Hive テーブル
-  HBase テーブル
テーブル
-  DFS (Text, Parquet, JSON)
-  HBase/MapR-DB
-  Hive メタストア/HCatalog
- Hadoop 以外にも対応する簡単な API
ストレージプラグインインスタンス
®
© 2015 MapR Technologies 16
アーキテクチャの概要
•  コモディティサーバのクラスタ
–  各ノード上でデーモン  (drillbit) が動作
•  他の実⾏行行エンジンには⾮非依存  (MapReduce, Spark, Tez)
–  より優れた性能と管理理性
•  ZooKeeper が逐⼀一変化するクラスタのメンバーシップ情報を管理理
–  drillbit は  ZooKeeper を利利⽤用してクラスタ内の他の  drillbit を⾒見見つける
–  クライアントは  ZooKeeper を利利⽤用して  drillbit を⾒見見つける
•  データ処理理単位は  カラムナレコードバッチ	
  
–  性能への影響を最⼩小限に抑えつつスキーマの柔軟性を実現
®
© 2015 MapR Technologies 17
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
…
®
© 2015 MapR Technologies 18
SELECT* クエリ実⾏行行
drillbit	
  
ZooKeeper
クライアント
(JDBC, ODBC,
REST)
1.  drillbit を⾒見見つける
(セッションごと)
3.  論論理理および物理理実⾏行行プランを作成
4.  クラスタに個別のフラグメントの実⾏行行を⾏行行わ
せる(完全な分散実⾏行行)
ZooKeeper
ZooKeeper
drillbit	
  drillbit	
  
2.  drillbit	
  に
クエリを送信
5.  クライアント
に結果を返す
* CTAS (CREATE TABLE AS SELECT) クエリはステップ  1〜~4 を含む
®
© 2015 MapR Technologies 19
drillbit 内部のコアモジュール	
  
SQL パーサ
Hive
HBase
分散キャッシュ
ストレージプラグイン
MongoDB
DFS
物理理プラン
実⾏行行エンジン論論理理プラン オプティマイザ
RPC エンドポイント
®
© 2015 MapR Technologies 20© 2015 MapR Technologies
®
利利⽤用事例例
®
© 2015 MapR Technologies 21
バックグラウンド
•  M.C. Srivas – MapR Technologies CTO 兼  共同創業者
•  サーチ
–  MapReduce, Bigtable
•  チーフアーキテクト
–  現  Netapp
•  AFS
–  AFS チームリード
–  現
®
© 2015 MapR Technologies 22
Drill は幅広い⽤用途にむけて設計されている
Raw Data Exploration JSON Analytics Data Hub Analytics…
Hive HBaseファイル ディレクトリ
…
{JSON}, Parquet
Text ファイル
…
…
®
© 2015 MapR Technologies 23
通信機器メーカー
収益を創出する IOT サービスを構築
•  SaaS 向けのインタラクティブな操作のエンジンとしての Apache Drill
•  動的なデータを  JSON  でネイティブに表現
•  すべての BI ツールに  ODBC コネクタを使って接続
⽬目標
課題
ソリューション
•  携帯電話事業者に新しい収益のためのサービスを提供
•  ネットワークやユーザーに関する即時の、より深い情報分析が可能に
•  ⾮非常に低コスト、ETL処理理は不不要
ビジネス
インパクト
•  携帯電話ユーザーの体験をプロアクティブにモニターして改善
•  多様な異異なるデータソース
•  データは⾮非常に多様かつ動的
•  新しいデータに対するインタラクティブ、アドホック、即時の分析
®
© 2015 MapR Technologies 24
カード決済マーケティング  – データウェアハウスの負荷軽減
⾼高価な  SQL 分析プラットフォームを  Hadoop  で置き換え
•  MapR 上で Drill を使いインタラクティブな分析を可能に
•  ユーザーは Pig、HiveQL、その他の⾔言語を習得する必要はなく、SQL  を使
い続けることができる
•  Drill 上で  Tableau や  Squirrel を使い続けることができる
⽬目標
課題
ソリューション
•  MapR はコストを 1/100 に、$1,000 / TB までに削減
•  MapR 上の Drill  は⾼高いインタラクティブ性能を提供
•  既存の  BI と  SQL のスキルセットを再教育することなく  Hadoop 上で活⽤用できる
ビジネス
インパクト
•  クレジットカードデータを取り出し消費者の購買傾向と⽐比較
•  内部の  SQL 専⾨門家が常にデータに即時にアクセスできることが必須
•  現在のコスト  $100,000 / TB  を⼤大幅に削減
•  ETL なしでデータへの即時アクセスを維持したい
•  コストを⼤大きく削減
•  社内の  SQL スキルセットを活⽤用
®
© 2015 MapR Technologies 25
オンライン広告  – Customer-facing Analytics as a Service
Drill のインタラクティブ処理理性能と柔軟性を顧客のアドホッククエリに使⽤用
•  MapR  上の  Drill で信頼性と性能に対する厳しい要求に応えることができる
•  Drill クラスタは構築後に数百ノードまでスケールすることが求められる
⽬目標
課題
ソリューション
•  新しいマルチテナントの収益を⽣生み出すサービスを  Hadoop 上で稼働させ、⾼高い信頼性
だけでなくエンドユーザに低遅延 SQL クエリ機能も提供
•  Drill により変化するデータの処理理を⾮非常に簡単に、コスト効率率率よく⾏行行うことが可能に
ビジネス
インパクト
•  サービスの顧客が特定のデータセットを直接触れるようにしたい
•  顧客のアドホッククエリ実⾏行行のためのマルチテナント基盤を構築する計画
•  ほとんどのデータは  JSON や  Parquet のようなフレキシブルな形式で格納
•  クエリ対象のデータ量量は  10GB〜~4TB の範囲で、性能は1秒以下〜~60秒の
SLA を遵守することを期待
•  インタラクティブ処理理(性能)とシステム信頼性が⾮非常に重要
®
© 2015 MapR Technologies 26
MapR の Optimized Data Architecture
データソース
リレーショナル,
SaaS,
メインフレーム
ドキュメント,
Eメール
ログファイル,
クリックストリーム,
センサー
ブログ,
ツイート,
リンクデータ
データウェアハウス
Data Movement
Data Access
分析
検索索
スキーマレス  
データ探索索
BI, レポーティング
アドホック統合分析
データ変換, 加⼯工、統合
業務アプリケーション
レコメンデーション
不不正検出
物流流管理理
Optimized Data Architecture
機械学習
MAPR DISTRIBUTION FOR HADOOP
ストリーミング
(Spark Streaming,
Storm)
MapR Data Platform
MapR-DB
MAPR DISTRIBUTION FOR HADOOP
バッチ
(MapReduce,
Spark, Hive, Pig)
MapR-FS
インタラクティブ
(Drill,
Impala)
®
© 2015 MapR Technologies 27© 2015 MapR Technologies
®
ロードマップ
®
© 2015 MapR Technologies 28
Apache Drill ロードマップ
Drill Beta
(2014年年9⽉月 -
2015年年4⽉月)
Drill 1.0
(2015年年5⽉月)
Drill 1.1
(2015年年7⽉月)
Drill 1.2
(2015年年9⽉月)
Drill 1.3
(計画中)
®
© 2015 MapR Technologies 29
Apache Drill ロードマップ (2015年年)
•  ANSI SQL サポート
o  ウインドウ関数  (Rank, Row_number,
OVER, PARTITION BY)
o  CTAS  によるテーブルのパーティショ
ニング
•  ストレージ/ファイルフォーマット
o  Hive ファイルフォーマット  & データ
型の完全サポート
o  Hive UDF  の再利利⽤用
o  Hive メタストアによる  Impersonation
o  AVRO フォーマットプラグイン  
(Beta)
•  JDBC 互換性の改善
Drill 1.1
•  ANSI SQL サポート
o  ウインドウ関数  (Lead, Lag,
First_Value, Last_value, NTile)
o  Drop Table シンタックス
•  クエリパフォーマンス
o  Hive テーブルのパーティションプ
ルーニング
o  Hive テーブルのネイティブファイル
リーダー
o  MapR-DB の⾏行行キープッシュダウンの
改善
o  メタデータキャッシング
•  Drill Web UI セキュリティ
•  動的メモリ管理理によるスケーラビリティ
の改善
Drill 1.2 •  ANSI SQL サポート
o  Insert/Append シンタックス
•  ストレージ/ファイルフォーマット
o  破損ファイル/レコードのスキップオ
プション
o  クエリの⼀一部としてファイル名を返す
o  Drill on MapR-DB JSON テーブル
•  パフォーマンス
o  MapR-DB テーブルのカラムプッシュ
ダウン
o  Parquet フィルタプッシュダウン
•  同時実⾏行行およびリソース制御による処理理
時間安定性の向上
•  システム稼働状況のモニタリング
Drill 1.3
®
© 2015 MapR Technologies 30
Hive  テーブルに対するアドホッククエリ/BI
•  Hive テーブルに対する低遅延クエリ
•  Hive  互換性の向上
–  Hive ファイルフォーマットの完全サポート
–  Hive データ型サポート
–  Drill クエリ内で  Hive UDF を再利利⽤用
–  Hive メタストアによる  Drill Impersonation
•  Hive テーブルのクエリ速度度向上
–  パーティションプルーニング
–  Parquet & Text 向けネイティブファイルリーダー
ファイル
Hive ストレージ
エンジンプラグイン
Drill
… …
Drill ODBC
ドライバ
Drill JDBC
ドライバ
1.1
1.2
®
© 2015 MapR Technologies 31
MapR-DB  に対する業務分析
•  ⼀一般的な BI ツール (Tableau,
MicroStrategy, Qlikview, など) を⽤用
いたリアルタイムデータの分析
–  MapR-DB KV テーブルに対するクエリ
–  MapR-DB JSON テーブルに対す
るクエリ
•  MapR-‐‑‒DB  に対する⾼高速 SQL クエ
リ
–  ⾏行行キーフィルタプッシュダウン
–  ES インデックスによるカラム
フィルタプッシュダウン
MapR-DB
MapR-DB ストレージ
エンジンプラグイン
Drill
… …
Drill ODBC
ドライバ
Drill JDBC
ドライバ
1.2
1.3
1.3
®
© 2015 MapR Technologies 32
ANSI SQL の強化
•  分析/ウインドウ関数
–  Count/Avg/Min/Max/Sum  ⽤用の  Over/Partition By 句句のサポート
–  Rank, Dense_Rank, Percent_Rank, Row_Number, Cume_Dist
–  Lead, Lag, First_Value, Last_Value, Ntile 関数
•  SQL DDL セマンティクス
–  Parquet ファイルの⾃自動パーティショニング
–  Drop table シンタックス
–  Insert/Append シンタックス
1.1
1.2
1.1
1.2
1.3
1.1
®
© 2015 MapR Technologies 33
セキュリティ
•  PAM 認証 + ユーザー
Impersonation
•  Drill View  による⾏行行およびカラ
ムレベルの粒粒度度の細かいアクセ
ス制御 – 中央管理理のセキュリ
ティリポジトリは不不要
•  JDBC/ODBC  ドライバのセ
キュリティ
•  Web UI セキュリティ
Files HBase Hive
Drill
View 1
Drill
View 2
UUU
User
1.2
®
© 2015 MapR Technologies 34
その他の重点エリア
•  クエリ性能の改善
•  より⾼高いスケーラビリティ & 同時実⾏行行時の処理理時間の安
定性
•  モニタリングおよび管理理機能の改善
•  BI ツール連携
•  ユーザビリティ
®
© 2015 MapR Technologies 35© 2015 MapR Technologies
®
オープンデータを分析してみよう
®
© 2015 MapR Technologies 36
Drill で政府統計情報  (e-Stat) を分析してみよう
®
© 2015 MapR Technologies 37
Drill で政府統計情報  (e-Stat) を分析してみよう
政府統計情報  e-Stat を  Apache Drill で分析してみる
http://nagix.hatenablog.com/entry/2015/05/21/232526
®
© 2015 MapR Technologies 38
今、もっとも注⽬目の⾼高いオープンデータ
®
© 2015 MapR Technologies 39
😀
®
© 2015 MapR Technologies 40
Drill インストール
•  JDK 7 が必要
•  あとは簡単
$ wget http://getdrill.org/drill/download/apache-drill-1.1.0.tar.gz
$ tar -xvzf apache-drill-1.1.0.tar.gz
$ apache-drill-1.1.0/bin/drill-embedded
0: jdbc:drill:zk=local>
®
© 2015 MapR Technologies 41
オープンデータ
$ ls -l
😀
®
© 2015 MapR Technologies 42
README
$ cat README
😀
®
© 2015 MapR Technologies 43
余談
😀
®
© 2015 MapR Technologies 44
MySQL ダンプファイル
DROP TABLE IF EXISTS `😀😀😀😀😀😀😀`;
CREATE TABLE `😀😀😀😀😀😀😀` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`createdon` timestamp NULL DEFAULT NULL,
`createdby` int(11) DEFAULT NULL,
...
) ENGINE=InnoDB AUTO_INCREMENT=36993336 DEFAULT CHARSET=utf8;
LOCK TABLES `😀😀😀😀😀😀😀` WRITE;
INSERT INTO `😀😀😀😀😀😀😀` VALUES (9,'2002-01-17 02:15:08',0,'2011-10
-14 13:47:31',20,2,2,1,1,0,19630, ... ),( ... ), ... ,( ... );
INSERT INTO `😀😀😀😀😀😀😀` VALUES (2297,'2002-03-19 22:13:14',0,'2011
-10-14 15:47:29',11,3,2,1,2,0,21891, ... ),( ... ), ... ,( ... );
...
®
© 2015 MapR Technologies 45
MySQL ダンプファイル
DROP TABLE IF EXISTS `😀😀😀😀😀😀😀`;
CREATE TABLE `😀😀😀😀😀😀😀` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`createdon` timestamp NULL DEFAULT NULL,
`createdby` int(11) DEFAULT NULL,
...
) ENGINE=InnoDB AUTO_INCREMENT=36993336 DEFAULT CHARSET=utf8;
LOCK TABLES `😀😀😀😀😀😀😀` WRITE;
INSERT INTO `😀😀😀😀😀😀😀` VALUES (9,'2002-01-17 02:15:08',0,'2011-10
-14 13:47:31',20,2,2,1,1,0,19630, ... ),( ... ), ... ,( ... );
INSERT INTO `😀😀😀😀😀😀😀` VALUES (2297,'2002-03-19 22:13:14',0,'2011
-10-14 15:47:29',11,3,2,1,2,0,21891, ... ),( ... ), ... ,( ... );
...
CSVに変換できそう
®
© 2015 MapR Technologies 46
MySQL ダンプファイルを CSV ファイルに変換
#!/usr/bin/perl
while (<>) {
s/^(--|/*| |)|DROP|CREATE|LOCK).*//g; # 余計な⾏行行を削除
s/^INSERT INTO .+ VALUES (//g; # INSERT ⽂文を削除
s/(?<=['d])),((?=['d])/n/g; # ⾏行行を分割
s/);$//g; #  余計な⽂文字を削除
s/"/""/g; # "  を  ""  に
s/((?<!)'|'(?=n)|'$|(?<=)'(?=,['d]))/"/g; # '  を  "  に
s/(^|(?<=,)NULL($|(?=,))//g; # NULL  を空⽂文字に
print unless /^$/; # 空⾏行行を除き出⼒力力
}
®
© 2015 MapR Technologies 47
CSV  ファイルを SELECT
•  件数を確認
–  たしかに 3197 万⼈人くらいはいます
0: jdbc:drill:zk=local> SELECT count(*) FROM dfs.`/tmp/😀😀😀.csv`;.csv`;
+-----------+
| EXPR$0 |
+-----------+
| 31971575 |
+-----------+
1 row selected (32.733 seconds)
®
© 2015 MapR Technologies 48
CSV  ファイルを SELECT
•  中⾝身を⾒見見てみる
–  CSV のフィールドは columns  という名前のリスト([a,b,...])になる
0: jdbc:drill:zk=local> !set maxwidth 160
0: jdbc:drill:zk=local> SELECT * FROM dfs.`/tmp/😀😀😀.csv` LIMIT 3;
+---------+
| columns |
+---------+
| ["9","2002-01-17 02:15:08","0","2011-10-14 13:47:31","20","2","2","1","1","0","
19630","😀😀😀😀😀","😀😀😀😀","😀😀😀😀😀😀","😀😀😀😀😀😀😀😀 Ave.","Suite 😀😀","To |
| ["10","2002-01-17 02:22:35","0","2011-10-14 13:47:31","10","2","3","2","2","0",
"19631","😀😀😀😀😀😀😀😀😀","😀😀😀","😀😀😀😀","😀😀😀😀😀 Ave","","York Region"," |
| ["11","2002-01-17 20:17:27","0","2011-10-14 13:47:32","0","2","2","1","2","0","
19632","😀😀😀😀😀😀😀😀😀","😀😀😀😀","😀😀😀😀","😀😀😀😀😀😀😀😀","","Toronto",""," |
+---------+
3 rows selected (0.564 seconds)
®
© 2015 MapR Technologies 49
CSV  ファイルを SELECT
•  各カラムを取り出すには
–  columns[0], columns[1]  のように添え字をつける
0: jdbc:drill:zk=local> SELECT columns[0], columns[1], columns[2], columns[3], co
lumns[4] FROM dfs.`/tmp/😀😀😀.csv` LIMIT 3;
+---------+----------------------+---------+----------------------+---------+
| EXPR$0 | EXPR$1 | EXPR$2 | EXPR$3 | EXPR$4 |
+---------+----------------------+---------+----------------------+---------+
| 9 | 2002-01-17 02:15:08 | 0 | 2011-10-14 13:47:31 | 20 |
| 10 | 2002-01-17 02:22:35 | 0 | 2011-10-14 13:47:31 | 10 |
| 11 | 2002-01-17 20:17:27 | 0 | 2011-10-14 13:47:32 | 0 |
+---------+----------------------+---------+----------------------+---------+
3 rows selected (0.356 seconds)
®
© 2015 MapR Technologies 50
CSV  ファイルを SELECT
•  カラム名をつけよう
–  MySQL ダンプファイル先頭の定義を参考に
0: jdbc:drill:zk=local> SELECT columns[0] AS id, columns[1] AS createdon, columns
[2] AS createdby, columns[3] AS updatedon, columns[4] AS updatedby FROM dfs.`/tmp
/😀😀😀.csv` LIMIT 3;
+-----+----------------------+------------+----------------------+------------+
| id | createdon | createdby | updatedon | updatedby |
+-----+----------------------+------------+----------------------+------------+
| 9 | 2002-01-17 02:15:08 | 0 | 2011-10-14 13:47:31 | 20 |
| 10 | 2002-01-17 02:22:35 | 0 | 2011-10-14 13:47:31 | 10 |
| 11 | 2002-01-17 20:17:27 | 0 | 2011-10-14 13:47:32 | 0 |
+-----+----------------------+------------+----------------------+------------+
3 rows selected (0.327 seconds)
®
© 2015 MapR Technologies 51
CSV  ファイルを SELECT
•  型はどうなってるの?
–  CSV  ファイルの場合、すべてデフォルトで VARCHAR 型
–  CAST(値 AS データ型) を使ってキャストして使う
•  エラー:  空⽂文字列列を数値型にキャストできない
0: jdbc:drill:zk=local> SELECT CAST(columns[0] AS INT) AS id, CAST(columns[1] AS TI
MESTAMP) AS createdon, CAST(columns[2] AS INT) AS createdby, CAST(columns[3] AS TIM
ESTAMP) AS updatedon, CAST(columns[4] AS INT) AS updatedby FROM dfs.`/tmp/ 😀😀😀.csv`
LIMIT 3;
Error: SYSTEM ERROR: NumberFormatException:
Fragment 1:2
[Error Id: 33d800c9-78ea-473a-8e41-b13e38307af3 on node1:31010] (state=,code=0)
®
© 2015 MapR Technologies 52
CSV の空⽂文字列列を NULL として扱うには
•  ⽅方法1: CASE  を使う
–  カラムごとに空⽂文字の扱いを変えることができる
•  ⽅方法2: システムプロパティを変更更する  
CASE
WHEN columns[2] = '' THEN NULL
ELSE CAST(columns[2] AS INT)
END
0: jdbc:drill:zk=local> ALTER SYSTEM SET `drill.exec.functions.cast_empty_string_
to_null` = true;
+-------+----------------------------------------------------------+
| ok | summary |
+-------+----------------------------------------------------------+
| true | drill.exec.functions.cast_empty_string_to_null updated. |
+-------+----------------------------------------------------------+
®
© 2015 MapR Technologies 53
CSV  ファイルを SELECT
•  とりあえず⽅方法2で・・・
0: jdbc:drill:zk=local> SELECT CAST(columns[0] AS INT) AS id, CAST(columns[1] AS TI
MESTAMP) AS createdon, CAST(columns[2] AS INT) AS createdby, CAST(columns[3] AS TIM
ESTAMP) AS updatedon, CAST(columns[4] AS INT) AS updatedby FROM dfs.`/tmp/ 😀😀😀.csv`
LIMIT 3;
+-----+------------------------+------------+------------------------+------------+
| id | createdon | createdby | updatedon | updatedby |
+-----+------------------------+------------+------------------------+------------+
| 9 | 2002-01-17 02:15:08.0 | 0 | 2011-10-14 13:47:31.0 | 20 |
| 10 | 2002-01-17 02:22:35.0 | 0 | 2011-10-14 13:47:31.0 | 10 |
| 11 | 2002-01-17 20:17:27.0 | 0 | 2011-10-14 13:47:32.0 | 0 |
+-----+------------------------+------------+------------------------+------------+
3 rows selected (0.734 seconds)
®
© 2015 MapR Technologies 54
やっぱり男ばかりなんでしょうか
•  性別は 25 番のカラム
–  1 は⼥女女性、2 は男性と思われる
–  やはり・・・
0: jdbc:drill:zk=local> SELECT columns[25] AS gender, count(*) AS number, TRUNC(1
00.0 * count(*) / 31971575, 2) AS percent FROM dfs.`/tmp/😀😀😀.csv` GROUP BY colu
mns[25] ORDER BY columns[25];
+---------+-----------+----------+
| gender | number | percent |
+---------+-----------+----------+
| | 9809 | 0.03 |
| 0 | 2 | 0.0 |
| 1 | 4414808 | 13.8 |
| 2 | 27546956 | 86.16 |
+---------+-----------+----------+
4 rows selected (31.79 seconds)
®
© 2015 MapR Technologies 55
⼤大統領領がいらっしゃると聞きましたが
•  いました
0: jdbc:drill:zk=local> SELECT columns[0] AS pnum, columns[1] AS email FROM dfs.`
/tmp/😀😀😀😀😀😀😀😀😀😀😀.csv` WHERE columns[1] = 'barack.obama@whitehouse.gov';
+-----------+------------------------------+
| pnum | email |
+-----------+------------------------------+
| 12655726 | barack.obama@whitehouse.gov |
+-----------+------------------------------+
1 row selected (10.566 seconds)
®
© 2015 MapR Technologies 56
ビューを作って楽をする
•  毎回カラム名を指定したりキャストしたりするのは⼤大変
–  ビューの定義ファイルは  /tmp に「.view.drill」という拡張⼦子のついた
JSONファイルとして保存される
0: jdbc:drill:zk=local> CREATE VIEW dfs.tmp.`😀😀😀😀😀😀😀` AS SELECT
. . . . . . . . . . . > CAST(columns[0] AS INT) AS id,
. . . . . . . . . . . > CAST(columns[1] AS TIMESTAMP) AS createdon,
. . . . . . . . . . . > CAST(columns[2] AS INT) AS createdby,
. . . . . . . . . . . > CAST(columns[3] AS TIMESTAMP) AS updatedon,
. . . . . . . . . . . > CAST(columns[4] AS INT) AS updatedby
. . . . . . . . . . . > ...
. . . . . . . . . . . > FROM
. . . . . . . . . . . > dfs.`/tmp/😀😀😀.csv`
. . . . . . . . . . . > ;
®
© 2015 MapR Technologies 57
ディレクトリに対してまとめてクエリ
•  😀😀😀😀😀😀😀😀トランザクションは CSV ファイルが 2642 個
$ ls 😀😀😀😀😀😀Transactions
2008-03-21_downloaded.csv 2010-08-19_downloaded.csv 2013-01-16_downloaded.csv
2008-03-22_downloaded.csv 2010-08-20_downloaded.csv 2013-01-17_downloaded.csv
2008-03-23_downloaded.csv 2010-08-21_downloaded.csv 2013-01-18_downloaded.csv
2008-03-24_downloaded.csv 2010-08-22_downloaded.csv 2013-01-19_downloaded.csv
2008-03-25_downloaded.csv 2010-08-23_downloaded.csv 2013-01-20_downloaded.csv
2008-03-26_downloaded.csv 2010-08-24_downloaded.csv 2013-01-21_downloaded.csv
2008-03-27_downloaded.csv 2010-08-25_downloaded.csv 2013-01-22_downloaded.csv
2008-03-28_downloaded.csv 2010-08-26_downloaded.csv 2013-01-23_downloaded.csv
2008-03-29_downloaded.csv 2010-08-27_downloaded.csv 2013-01-24_downloaded.csv
2008-03-30_downloaded.csv 2010-08-28_downloaded.csv 2013-01-25_downloaded.csv
2008-03-31_downloaded.csv 2010-08-29_downloaded.csv 2013-01-26_downloaded.csv
2008-04-01_downloaded.csv 2010-08-30_downloaded.csv 2013-01-27_downloaded.csv
2008-04-02_downloaded.csv 2010-08-31_downloaded.csv 2013-01-28_downloaded.csv
2008-04-03_downloaded.csv 2010-09-01_downloaded.csv 2013-01-29_downloaded.csv
...
®
© 2015 MapR Technologies 58
ディレクトリに対してまとめてクエリ
•  データソースはファイルではなくディレクトリ
•  国別トランザクション数のトップ 10
0: jdbc:drill:zk=local> columns[19] AS TXT_COUNTRY, count(*) AS number from dfs.`/tmp/
😀😀😀😀😀😀Transactions` GROUP BY columns[19] ORDER BY count(*) DESC LIMIT 10;Transactions` GROUP BY columns[19] ORDER BY count(*) DESC LIMIT 10;
+--------------+----------+
| TXT_COUNTRY | number |
+--------------+----------+
| US | 7591509 |
| CA | 823746 |
| BR | 197032 |
| AU | 146745 |
| TW | 118338 |
| CL | 109875 |
| ZA | 78126 |
| AR | 75314 |
| JP | 74165 |
| GB | 57901 |
+--------------+----------+
®
© 2015 MapR Technologies 59
ディレクトリを階層構造にしてみる
•  年年と⽉月のディレクトリを作って、CSV  ファイルを配置する
$ cd 😀😀😀😀😀😀Transactions
$ for file in `ls *.csv`; do
> dir=`echo $file | cut -c 1-7 | tr - /`
>   if [ ! -d $dir ]; then
> mkdir -p $dir
> fi
>     mv $file $dir
> done
$ ls
2008 2009 2010 2011 2012 2013 2014 2015
$ ls 2008
03 04 05 06 07 08 09 10 11 12
$ ls 2008/03
2008-03-21_downloaded.csv 2008-03-25_downloaded.csv 2008-03-29_downloaded.csv
2008-03-22_downloaded.csv 2008-03-26_downloaded.csv 2008-03-30_downloaded.csv
2008-03-23_downloaded.csv 2008-03-27_downloaded.csv 2008-03-31_downloaded.csv
2008-03-24_downloaded.csv 2008-03-28_downloaded.csv
®
© 2015 MapR Technologies 60
⽉月別トランザクション総額
•  dir0,dir1はディレクトリ名を表す特別なスキーマ
0: jdbc:drill:zk=local> SELECT dir0 AS year, dir1 AS month, TRUNC(SUM(CAST(REGEXP
_REPLACE(REGEXP_REPLACE(columns[2], '^(', '-'), ',|)', '') AS DOUBLE)), 2) AS
amount from dfs.`/tmp/😀😀😀😀😀😀Transactions` WHERE columns[2] <> 'AMOUNT' GROUP
BY dir0, dir1 ORDER BY dir0, dir1;
+-------+-------+-----------------+
| dir0 | dir1 | amount |
+-------+-------+-----------------+
| 2008 | 03 | 97676.25 |
| 2008 | 04 | 266162.39 |
| 2008 | 05 | 1330456.45 |
| 2008 | 06 | 1630110.26 |
| 2008 | 07 | 2590733.03 |
| 2008 | 08 | 2743130.11 |
| 2008 | 09 | 2436655.66 |
| 2008 | 10 | 2534268.59 |
| 2008 | 11 | 2934391.31 |
...
®
© 2015 MapR Technologies 61
⽉月別トランザクション総額
😀
®
© 2015 MapR Technologies 62
まとめ
•  Apache Drill で、データをロードすることなく、すぐに分析を始
めることができる
•  多数のファイルが散在している場合でも、まとめてクエリをか
けることができる
®
© 2015 MapR Technologies 63
Q&A
@mapr_japan maprjapan
sales-jp@mapr.com
お問い合わせはこちらまで
MapR
maprtech
mapr-technologies

More Related Content

PDF
HBase と Drill - 緩い型付けの SQL がいかに NoSQL に適しているか
PDF
MapR 5.2: MapR コンバージド・コミュニティ・エディションを使いこなす
PDF
MapR と Vertica エンジニアが語る、なぜその組み合わせが最高なのか? - db tech showcase 大阪 2014 2014/06/19
PDF
MapR アーキテクチャ概要 - MapR CTO Meetup 2013/11/12
PDF
MapR Streams & MapR コンバージド・データ・プラットフォーム
PDF
Apache Drill を利用した実データの分析
PDF
Fast Data を扱うためのデザインパターン
PDF
スケールアウト・インメモリ分析の標準フォーマットを目指す Apache Arrow と Value Vectors - Tokyo Apache Dril...
HBase と Drill - 緩い型付けの SQL がいかに NoSQL に適しているか
MapR 5.2: MapR コンバージド・コミュニティ・エディションを使いこなす
MapR と Vertica エンジニアが語る、なぜその組み合わせが最高なのか? - db tech showcase 大阪 2014 2014/06/19
MapR アーキテクチャ概要 - MapR CTO Meetup 2013/11/12
MapR Streams & MapR コンバージド・データ・プラットフォーム
Apache Drill を利用した実データの分析
Fast Data を扱うためのデザインパターン
スケールアウト・インメモリ分析の標準フォーマットを目指す Apache Arrow と Value Vectors - Tokyo Apache Dril...

What's hot (20)

PDF
ビジネスへの本格活用が始まったHadoopの今 ~MapRが選ばれる理由~ - ビッグデータEXPO東京 2014/02/26
PDF
Hadoop によるゲノム解読
PDF
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
PDF
ストリーミングアーキテクチャ: State から Flow へ - 2016/02/08 Hadoop / Spark Conference Japan ...
PDF
MapR M7 技術概要
PDF
Hadoop最新情報 - YARN, Omni, Drill, Impala, Shark, Vertica - MapR CTO Meetup 2014...
PDF
Apache Drill でたしなむ セルフサービスデータ探索 - 2014/11/06 Cloudera World Tokyo 2014 LTセッション
PDF
Spark Streaming の基本とスケールする時系列データ処理 - Spark Meetup December 2015/12/09
PDF
実践機械学習 — MahoutとSolrを活用したレコメンデーションにおけるイノベーション - 2014/07/08 Hadoop Conference ...
PDF
Hadoopによる大規模分散データ処理
PDF
Apache Hadoop の現在と将来(Hadoop / Spark Conference Japan 2016 キーノート講演資料)
PDF
Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...
PDF
Hadoop概要説明
PDF
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
PDF
Hadoopのシステム設計・運用のポイント
PDF
Hadoop入門
PDF
時系列の世界の時系列データ
PDF
Drilling into Data with Apache Drill - Tokyo Apache Drill Meetup 2015/11/12
PDF
HadoopとRDBMSをシームレスに連携させるSmart SQL Processing (Hadoop Conference Japan 2014)
PDF
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
ビジネスへの本格活用が始まったHadoopの今 ~MapRが選ばれる理由~ - ビッグデータEXPO東京 2014/02/26
Hadoop によるゲノム解読
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
ストリーミングアーキテクチャ: State から Flow へ - 2016/02/08 Hadoop / Spark Conference Japan ...
MapR M7 技術概要
Hadoop最新情報 - YARN, Omni, Drill, Impala, Shark, Vertica - MapR CTO Meetup 2014...
Apache Drill でたしなむ セルフサービスデータ探索 - 2014/11/06 Cloudera World Tokyo 2014 LTセッション
Spark Streaming の基本とスケールする時系列データ処理 - Spark Meetup December 2015/12/09
実践機械学習 — MahoutとSolrを活用したレコメンデーションにおけるイノベーション - 2014/07/08 Hadoop Conference ...
Hadoopによる大規模分散データ処理
Apache Hadoop の現在と将来(Hadoop / Spark Conference Japan 2016 キーノート講演資料)
Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...
Hadoop概要説明
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
Hadoopのシステム設計・運用のポイント
Hadoop入門
時系列の世界の時系列データ
Drilling into Data with Apache Drill - Tokyo Apache Drill Meetup 2015/11/12
HadoopとRDBMSをシームレスに連携させるSmart SQL Processing (Hadoop Conference Japan 2014)
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Ad

Viewers also liked (16)

PDF
9/16 Tokyo Apache Drill Meetup - drill vs sparksql
PDF
Apache drillを業務利用してみる(までの道のり)
PDF
Presto in Treasure Data
PDF
Amazon Elastic MapReduce with Hive/Presto ハンズオン(講義)
PDF
金融機関でのHive/Presto事例紹介
PPTX
Apache Spark チュートリアル
PDF
NetflixにおけるPresto/Spark活用事例
PDF
SQL on Hadoop 比較検証 【2014月11日における検証レポート】
PDF
爆速クエリエンジン”Presto”を使いたくなる話
PDF
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
PDF
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
PDF
Presto - Hadoop Conference Japan 2014
PDF
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
PDF
Apache Sparkにおけるメモリ - アプリケーションを落とさないメモリ設計手法 -
DOCX
Apache Drill with Oracle, Hive and HBase
PPTX
HBase×Impalaで作るアドテク 「GMOプライベートDMP」@HBaseMeetupTokyo2015Summer
9/16 Tokyo Apache Drill Meetup - drill vs sparksql
Apache drillを業務利用してみる(までの道のり)
Presto in Treasure Data
Amazon Elastic MapReduce with Hive/Presto ハンズオン(講義)
金融機関でのHive/Presto事例紹介
Apache Spark チュートリアル
NetflixにおけるPresto/Spark活用事例
SQL on Hadoop 比較検証 【2014月11日における検証レポート】
爆速クエリエンジン”Presto”を使いたくなる話
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
Presto - Hadoop Conference Japan 2014
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
Apache Sparkにおけるメモリ - アプリケーションを落とさないメモリ設計手法 -
Apache Drill with Oracle, Hive and HBase
HBase×Impalaで作るアドテク 「GMOプライベートDMP」@HBaseMeetupTokyo2015Summer
Ad

Similar to Apache Drill Overview - Tokyo Apache Drill Meetup 2015/09/15 (20)

PDF
事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11
PDF
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
PDF
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
PPTX
WebDB Forum 2012 基調講演資料
PDF
Evolution of Impala #hcj2014
PPTX
sparksql-hive-bench-by-nec-hwx-at-hcj16
PDF
Deep Dive into Spark SQL with Advanced Performance Tuning
PDF
データ基盤の従来~最新の考え方とSynapse Analyticsでの実現
PPTX
Qlik Talend Cloud概要:リアルタイムデータ統合とデータ品質を実現するデータファブリック
PDF
トレジャーデータのバッチクエリとアドホッククエリを理解する
PPTX
ビッグデータ活用支援フォーラム
PDF
もうSQLとNoSQLを選ぶ必要はない!? ~両者を備えたスケールアウトデータベースGridDB~
PPTX
ビッグデータ&データマネジメント展
PPTX
クラウド概要 by Engine Yard
PDF
AWS Black Belt Techシリーズ AWS Data Pipeline
PDF
BPStudy20121221
PDF
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔
PDF
Developers.IO 2019 Effective Datalake
PDF
情報爆発シンポジウム infoplosion
PDF
Oracle Database 12c Release 1 PSR 12.1.0.2 のご紹介
事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
WebDB Forum 2012 基調講演資料
Evolution of Impala #hcj2014
sparksql-hive-bench-by-nec-hwx-at-hcj16
Deep Dive into Spark SQL with Advanced Performance Tuning
データ基盤の従来~最新の考え方とSynapse Analyticsでの実現
Qlik Talend Cloud概要:リアルタイムデータ統合とデータ品質を実現するデータファブリック
トレジャーデータのバッチクエリとアドホッククエリを理解する
ビッグデータ活用支援フォーラム
もうSQLとNoSQLを選ぶ必要はない!? ~両者を備えたスケールアウトデータベースGridDB~
ビッグデータ&データマネジメント展
クラウド概要 by Engine Yard
AWS Black Belt Techシリーズ AWS Data Pipeline
BPStudy20121221
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔
Developers.IO 2019 Effective Datalake
情報爆発シンポジウム infoplosion
Oracle Database 12c Release 1 PSR 12.1.0.2 のご紹介

More from MapR Technologies Japan (6)

PDF
Drill超簡単チューニング
PPTX
Apache Drill で日本語を扱ってみよう + オープンデータ解析
PDF
異常検知 - 何を探すかよく分かっていないものを見つける方法
PDF
逆らえない大きな流れ: 次世代のエンタープライズアーキテクチャ
PDF
マップアールが考える企業システムにおける分析プラットフォームの進化 - 2014/06/27 Data Scientist Summit 2014
PDF
エンタープライズ NoSQL/HBase プラットフォーム – MapR M7 エディション - db tech showcase 大阪 2014 201...
Drill超簡単チューニング
Apache Drill で日本語を扱ってみよう + オープンデータ解析
異常検知 - 何を探すかよく分かっていないものを見つける方法
逆らえない大きな流れ: 次世代のエンタープライズアーキテクチャ
マップアールが考える企業システムにおける分析プラットフォームの進化 - 2014/06/27 Data Scientist Summit 2014
エンタープライズ NoSQL/HBase プラットフォーム – MapR M7 エディション - db tech showcase 大阪 2014 201...

Recently uploaded (8)

PDF
Qlik TECH TALK セミナー:What's New In Qlik ~ 2025年7月リリース最新機能のご紹介
PDF
口腔内スキャナー市場:世界の産業現状、競合分析、シェア、規模、動向2025-2031年の予測
PDF
商用ウェブカメラ市場:世界の産業現状、競合分析、シェア、規模、動向2025-2031年の予測
PDF
XCMSを用いた質量分析データ処理_BioCAsia2021_yamamoto.pdf
PDF
世界半導体用酸化ハフニウム市場のサプライチェーン解析:上流、下流、収益モデル分析2025-2031
PDF
グローバルロープウェイ用スチールワイヤーロープ市場2025:主要企業のシェア、売上動向、競争戦略
PDF
限外ろ過膜調査レポート:市場規模、シェア、産業分析データ、最新動向2025-2031 YH Research
PDF
液体クラトム抽出物供給側分析:世界の生産能力・販売量・平均価格動向(2025-2031)
Qlik TECH TALK セミナー:What's New In Qlik ~ 2025年7月リリース最新機能のご紹介
口腔内スキャナー市場:世界の産業現状、競合分析、シェア、規模、動向2025-2031年の予測
商用ウェブカメラ市場:世界の産業現状、競合分析、シェア、規模、動向2025-2031年の予測
XCMSを用いた質量分析データ処理_BioCAsia2021_yamamoto.pdf
世界半導体用酸化ハフニウム市場のサプライチェーン解析:上流、下流、収益モデル分析2025-2031
グローバルロープウェイ用スチールワイヤーロープ市場2025:主要企業のシェア、売上動向、競争戦略
限外ろ過膜調査レポート:市場規模、シェア、産業分析データ、最新動向2025-2031 YH Research
液体クラトム抽出物供給側分析:世界の生産能力・販売量・平均価格動向(2025-2031)

Apache Drill Overview - Tokyo Apache Drill Meetup 2015/09/15

  • 1. ® © 2015 MapR Technologies 1 ® © 2015 MapR Technologies Apache Drill Overview M.C. Srivas – CTO and Co-Founder, MapR Technologies 草薙  昭彦 – Data Engineer, MapR Technologies 2015 年年  9 ⽉月  15 ⽇日
  • 2. ® © 2015 MapR Technologies 2 ⾃自⼰己紹介 •  草薙  昭彦 (@nagix) •  MapR Technologies データエンジニア NS-SHAFT 無料!
  • 3. ® © 2015 MapR Technologies 3
  • 4. ® © 2015 MapR Technologies 4 Apache Drill 1.0 リリース (5/19) http://drill.apache.org
  • 5. ® © 2015 MapR Technologies 5 本⽇日のトピック •  Apache Drill 概要 •  利利⽤用事例例 •  ロードマップ •  オープンデータを分析してみよう
  • 6. ® © 2015 MapR Technologies 6© 2015 MapR Technologies ® Apache Drill 概要
  • 7. ® © 2015 MapR Technologies 7 ⾮非構造化データ 構造化データ 1980 2000 20101990 2020 データは2年年で倍に増える ⾮非構造化データ  の割合は 企業や組織が集めたデータ の  80%以上  に増⼤大する 出典: Human-Computer Interaction & Knowledge Discovery in Complex Unstructured, Big Data 合計格納データサイズ
  • 8. ® © 2015 MapR Technologies 8 1980 2000 20101990 2020 固定スキーマ DB管理理者が構造を管理理 動的/柔軟なスキーマ アプリケーションが構造を管理理 ⾮非リレーショナルデータベースリレーショナルデータベース GB〜~TB TB〜~PBデータサイズ データベース データは⾮非リレーショナルデータストアに向かう データ構造 開発スタイル 構造化 構造化、半構造化、⾮非構造化 計画的(リリースサイクル=数ヶ⽉月〜~数年年) 反復復的(リリースサイクル=数⽇日〜~数週間)
  • 9. ® © 2015 MapR Technologies 9 ⾮非構造化データの時代の  SQL とは? SQL の使いやすさ NoSQL の柔軟性 •  SQL •  BI (Tableau、MicroStrategy など) •  低レイテンシ •  スケーラビリティ •  スキーマ管理理なし –  HDFS (Parquet、JSON など) –  HBase –  … •  データ変換・複製なし
  • 10. ® © 2015 MapR Technologies 10 Industry's First Schema-free SQL engine for Big Data ®
  • 11. ® © 2015 MapR Technologies 11 セルフサービスからスキーマフリーへの拡張 迅速さ&ビジネス価値 BI のユースケース IT部⾨門主導のBI セルフサービス BI スキーマフリー データ探索索 IT部⾨門主導のBI IT部⾨門主導のBI セルフサービス BI IT 部⾨門への依存なしで アナリストが主導 IT 部⾨門の  ETL の⽀支援を 受け、アナリストが主導 IT 部⾨門が作成する レポート、スプレッドシート 1980年年代 -1990年年代 2000年年代 現在
  • 12. ® © 2015 MapR Technologies 12 即時分析により「即断可能な」ビジネスを実現 Hadoop
 データ データ モデリング 変換 データ移動 (任意) ユーザー Hadoop
 データ ユーザー 管理理された アプローチ 探索索的な アプローチ 新しいビジネスの問いかけソースデータの変更更 結果を得るまでの合計時間: 数週間から数ヶ⽉月 結果を得るまでの合計時間: 数分
  • 13. ® © 2015 MapR Technologies 13 Drill は  動的なスキーマディスカバリ  をサポート •  固定スキーマ •  中央管理理されたレポジトリのスキー   マを利利⽤用  (Hive メタストア) •  固定スキーマ、変化するスキーマ、   もしくはスキーマレス •  中央管理理されたレポジトリのスキーマ、   ⾃自⼰己記述型データのスキーマを利利⽤用 2動的にスキーマを発⾒見見事前にスキーマを宣⾔言 SCHEMA ON WRITE SCHEMA BEFORE READ SCHEMA ON THE FLY
  • 14. ® © 2015 MapR Technologies 14 Drill のデータモデルはフレキシブル JSON BSON HBase Parquet Avro CSV TSV 動的スキーマ固定スキーマ 複雑 フラット 柔軟性 Name! Gender! Age! 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 テーブル 複雑性
  • 15. ® © 2015 MapR Technologies 15 -  サブディレクトリ -  HBase ネームスペース -  Hive データベース Drill は「SQL on Everything」を可能にする SELECT  *  FROM  dfs.yelp.`business.json`  ! ワークスペース -  パス名 -  Hive テーブル -  HBase テーブル テーブル -  DFS (Text, Parquet, JSON) -  HBase/MapR-DB -  Hive メタストア/HCatalog - Hadoop 以外にも対応する簡単な API ストレージプラグインインスタンス
  • 16. ® © 2015 MapR Technologies 16 アーキテクチャの概要 •  コモディティサーバのクラスタ –  各ノード上でデーモン  (drillbit) が動作 •  他の実⾏行行エンジンには⾮非依存  (MapReduce, Spark, Tez) –  より優れた性能と管理理性 •  ZooKeeper が逐⼀一変化するクラスタのメンバーシップ情報を管理理 –  drillbit は  ZooKeeper を利利⽤用してクラスタ内の他の  drillbit を⾒見見つける –  クライアントは  ZooKeeper を利利⽤用して  drillbit を⾒見見つける •  データ処理理単位は  カラムナレコードバッチ   –  性能への影響を最⼩小限に抑えつつスキーマの柔軟性を実現
  • 17. ® © 2015 MapR Technologies 17 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 …
  • 18. ® © 2015 MapR Technologies 18 SELECT* クエリ実⾏行行 drillbit   ZooKeeper クライアント (JDBC, ODBC, REST) 1.  drillbit を⾒見見つける (セッションごと) 3.  論論理理および物理理実⾏行行プランを作成 4.  クラスタに個別のフラグメントの実⾏行行を⾏行行わ せる(完全な分散実⾏行行) ZooKeeper ZooKeeper drillbit  drillbit   2.  drillbit  に クエリを送信 5.  クライアント に結果を返す * CTAS (CREATE TABLE AS SELECT) クエリはステップ  1〜~4 を含む
  • 19. ® © 2015 MapR Technologies 19 drillbit 内部のコアモジュール   SQL パーサ Hive HBase 分散キャッシュ ストレージプラグイン MongoDB DFS 物理理プラン 実⾏行行エンジン論論理理プラン オプティマイザ RPC エンドポイント
  • 20. ® © 2015 MapR Technologies 20© 2015 MapR Technologies ® 利利⽤用事例例
  • 21. ® © 2015 MapR Technologies 21 バックグラウンド •  M.C. Srivas – MapR Technologies CTO 兼  共同創業者 •  サーチ –  MapReduce, Bigtable •  チーフアーキテクト –  現  Netapp •  AFS –  AFS チームリード –  現
  • 22. ® © 2015 MapR Technologies 22 Drill は幅広い⽤用途にむけて設計されている Raw Data Exploration JSON Analytics Data Hub Analytics… Hive HBaseファイル ディレクトリ … {JSON}, Parquet Text ファイル … …
  • 23. ® © 2015 MapR Technologies 23 通信機器メーカー 収益を創出する IOT サービスを構築 •  SaaS 向けのインタラクティブな操作のエンジンとしての Apache Drill •  動的なデータを  JSON  でネイティブに表現 •  すべての BI ツールに  ODBC コネクタを使って接続 ⽬目標 課題 ソリューション •  携帯電話事業者に新しい収益のためのサービスを提供 •  ネットワークやユーザーに関する即時の、より深い情報分析が可能に •  ⾮非常に低コスト、ETL処理理は不不要 ビジネス インパクト •  携帯電話ユーザーの体験をプロアクティブにモニターして改善 •  多様な異異なるデータソース •  データは⾮非常に多様かつ動的 •  新しいデータに対するインタラクティブ、アドホック、即時の分析
  • 24. ® © 2015 MapR Technologies 24 カード決済マーケティング  – データウェアハウスの負荷軽減 ⾼高価な  SQL 分析プラットフォームを  Hadoop  で置き換え •  MapR 上で Drill を使いインタラクティブな分析を可能に •  ユーザーは Pig、HiveQL、その他の⾔言語を習得する必要はなく、SQL  を使 い続けることができる •  Drill 上で  Tableau や  Squirrel を使い続けることができる ⽬目標 課題 ソリューション •  MapR はコストを 1/100 に、$1,000 / TB までに削減 •  MapR 上の Drill  は⾼高いインタラクティブ性能を提供 •  既存の  BI と  SQL のスキルセットを再教育することなく  Hadoop 上で活⽤用できる ビジネス インパクト •  クレジットカードデータを取り出し消費者の購買傾向と⽐比較 •  内部の  SQL 専⾨門家が常にデータに即時にアクセスできることが必須 •  現在のコスト  $100,000 / TB  を⼤大幅に削減 •  ETL なしでデータへの即時アクセスを維持したい •  コストを⼤大きく削減 •  社内の  SQL スキルセットを活⽤用
  • 25. ® © 2015 MapR Technologies 25 オンライン広告  – Customer-facing Analytics as a Service Drill のインタラクティブ処理理性能と柔軟性を顧客のアドホッククエリに使⽤用 •  MapR  上の  Drill で信頼性と性能に対する厳しい要求に応えることができる •  Drill クラスタは構築後に数百ノードまでスケールすることが求められる ⽬目標 課題 ソリューション •  新しいマルチテナントの収益を⽣生み出すサービスを  Hadoop 上で稼働させ、⾼高い信頼性 だけでなくエンドユーザに低遅延 SQL クエリ機能も提供 •  Drill により変化するデータの処理理を⾮非常に簡単に、コスト効率率率よく⾏行行うことが可能に ビジネス インパクト •  サービスの顧客が特定のデータセットを直接触れるようにしたい •  顧客のアドホッククエリ実⾏行行のためのマルチテナント基盤を構築する計画 •  ほとんどのデータは  JSON や  Parquet のようなフレキシブルな形式で格納 •  クエリ対象のデータ量量は  10GB〜~4TB の範囲で、性能は1秒以下〜~60秒の SLA を遵守することを期待 •  インタラクティブ処理理(性能)とシステム信頼性が⾮非常に重要
  • 26. ® © 2015 MapR Technologies 26 MapR の Optimized Data Architecture データソース リレーショナル, SaaS, メインフレーム ドキュメント, Eメール ログファイル, クリックストリーム, センサー ブログ, ツイート, リンクデータ データウェアハウス Data Movement Data Access 分析 検索索 スキーマレス   データ探索索 BI, レポーティング アドホック統合分析 データ変換, 加⼯工、統合 業務アプリケーション レコメンデーション 不不正検出 物流流管理理 Optimized Data Architecture 機械学習 MAPR DISTRIBUTION FOR HADOOP ストリーミング (Spark Streaming, Storm) MapR Data Platform MapR-DB MAPR DISTRIBUTION FOR HADOOP バッチ (MapReduce, Spark, Hive, Pig) MapR-FS インタラクティブ (Drill, Impala)
  • 27. ® © 2015 MapR Technologies 27© 2015 MapR Technologies ® ロードマップ
  • 28. ® © 2015 MapR Technologies 28 Apache Drill ロードマップ Drill Beta (2014年年9⽉月 - 2015年年4⽉月) Drill 1.0 (2015年年5⽉月) Drill 1.1 (2015年年7⽉月) Drill 1.2 (2015年年9⽉月) Drill 1.3 (計画中)
  • 29. ® © 2015 MapR Technologies 29 Apache Drill ロードマップ (2015年年) •  ANSI SQL サポート o  ウインドウ関数  (Rank, Row_number, OVER, PARTITION BY) o  CTAS  によるテーブルのパーティショ ニング •  ストレージ/ファイルフォーマット o  Hive ファイルフォーマット  & データ 型の完全サポート o  Hive UDF  の再利利⽤用 o  Hive メタストアによる  Impersonation o  AVRO フォーマットプラグイン   (Beta) •  JDBC 互換性の改善 Drill 1.1 •  ANSI SQL サポート o  ウインドウ関数  (Lead, Lag, First_Value, Last_value, NTile) o  Drop Table シンタックス •  クエリパフォーマンス o  Hive テーブルのパーティションプ ルーニング o  Hive テーブルのネイティブファイル リーダー o  MapR-DB の⾏行行キープッシュダウンの 改善 o  メタデータキャッシング •  Drill Web UI セキュリティ •  動的メモリ管理理によるスケーラビリティ の改善 Drill 1.2 •  ANSI SQL サポート o  Insert/Append シンタックス •  ストレージ/ファイルフォーマット o  破損ファイル/レコードのスキップオ プション o  クエリの⼀一部としてファイル名を返す o  Drill on MapR-DB JSON テーブル •  パフォーマンス o  MapR-DB テーブルのカラムプッシュ ダウン o  Parquet フィルタプッシュダウン •  同時実⾏行行およびリソース制御による処理理 時間安定性の向上 •  システム稼働状況のモニタリング Drill 1.3
  • 30. ® © 2015 MapR Technologies 30 Hive  テーブルに対するアドホッククエリ/BI •  Hive テーブルに対する低遅延クエリ •  Hive  互換性の向上 –  Hive ファイルフォーマットの完全サポート –  Hive データ型サポート –  Drill クエリ内で  Hive UDF を再利利⽤用 –  Hive メタストアによる  Drill Impersonation •  Hive テーブルのクエリ速度度向上 –  パーティションプルーニング –  Parquet & Text 向けネイティブファイルリーダー ファイル Hive ストレージ エンジンプラグイン Drill … … Drill ODBC ドライバ Drill JDBC ドライバ 1.1 1.2
  • 31. ® © 2015 MapR Technologies 31 MapR-DB  に対する業務分析 •  ⼀一般的な BI ツール (Tableau, MicroStrategy, Qlikview, など) を⽤用 いたリアルタイムデータの分析 –  MapR-DB KV テーブルに対するクエリ –  MapR-DB JSON テーブルに対す るクエリ •  MapR-‐‑‒DB  に対する⾼高速 SQL クエ リ –  ⾏行行キーフィルタプッシュダウン –  ES インデックスによるカラム フィルタプッシュダウン MapR-DB MapR-DB ストレージ エンジンプラグイン Drill … … Drill ODBC ドライバ Drill JDBC ドライバ 1.2 1.3 1.3
  • 32. ® © 2015 MapR Technologies 32 ANSI SQL の強化 •  分析/ウインドウ関数 –  Count/Avg/Min/Max/Sum  ⽤用の  Over/Partition By 句句のサポート –  Rank, Dense_Rank, Percent_Rank, Row_Number, Cume_Dist –  Lead, Lag, First_Value, Last_Value, Ntile 関数 •  SQL DDL セマンティクス –  Parquet ファイルの⾃自動パーティショニング –  Drop table シンタックス –  Insert/Append シンタックス 1.1 1.2 1.1 1.2 1.3 1.1
  • 33. ® © 2015 MapR Technologies 33 セキュリティ •  PAM 認証 + ユーザー Impersonation •  Drill View  による⾏行行およびカラ ムレベルの粒粒度度の細かいアクセ ス制御 – 中央管理理のセキュリ ティリポジトリは不不要 •  JDBC/ODBC  ドライバのセ キュリティ •  Web UI セキュリティ Files HBase Hive Drill View 1 Drill View 2 UUU User 1.2
  • 34. ® © 2015 MapR Technologies 34 その他の重点エリア •  クエリ性能の改善 •  より⾼高いスケーラビリティ & 同時実⾏行行時の処理理時間の安 定性 •  モニタリングおよび管理理機能の改善 •  BI ツール連携 •  ユーザビリティ
  • 35. ® © 2015 MapR Technologies 35© 2015 MapR Technologies ® オープンデータを分析してみよう
  • 36. ® © 2015 MapR Technologies 36 Drill で政府統計情報  (e-Stat) を分析してみよう
  • 37. ® © 2015 MapR Technologies 37 Drill で政府統計情報  (e-Stat) を分析してみよう 政府統計情報  e-Stat を  Apache Drill で分析してみる http://nagix.hatenablog.com/entry/2015/05/21/232526
  • 38. ® © 2015 MapR Technologies 38 今、もっとも注⽬目の⾼高いオープンデータ
  • 39. ® © 2015 MapR Technologies 39 😀
  • 40. ® © 2015 MapR Technologies 40 Drill インストール •  JDK 7 が必要 •  あとは簡単 $ wget http://getdrill.org/drill/download/apache-drill-1.1.0.tar.gz $ tar -xvzf apache-drill-1.1.0.tar.gz $ apache-drill-1.1.0/bin/drill-embedded 0: jdbc:drill:zk=local>
  • 41. ® © 2015 MapR Technologies 41 オープンデータ $ ls -l 😀
  • 42. ® © 2015 MapR Technologies 42 README $ cat README 😀
  • 43. ® © 2015 MapR Technologies 43 余談 😀
  • 44. ® © 2015 MapR Technologies 44 MySQL ダンプファイル DROP TABLE IF EXISTS `😀😀😀😀😀😀😀`; CREATE TABLE `😀😀😀😀😀😀😀` ( `id` int(11) NOT NULL AUTO_INCREMENT, `createdon` timestamp NULL DEFAULT NULL, `createdby` int(11) DEFAULT NULL, ... ) ENGINE=InnoDB AUTO_INCREMENT=36993336 DEFAULT CHARSET=utf8; LOCK TABLES `😀😀😀😀😀😀😀` WRITE; INSERT INTO `😀😀😀😀😀😀😀` VALUES (9,'2002-01-17 02:15:08',0,'2011-10 -14 13:47:31',20,2,2,1,1,0,19630, ... ),( ... ), ... ,( ... ); INSERT INTO `😀😀😀😀😀😀😀` VALUES (2297,'2002-03-19 22:13:14',0,'2011 -10-14 15:47:29',11,3,2,1,2,0,21891, ... ),( ... ), ... ,( ... ); ...
  • 45. ® © 2015 MapR Technologies 45 MySQL ダンプファイル DROP TABLE IF EXISTS `😀😀😀😀😀😀😀`; CREATE TABLE `😀😀😀😀😀😀😀` ( `id` int(11) NOT NULL AUTO_INCREMENT, `createdon` timestamp NULL DEFAULT NULL, `createdby` int(11) DEFAULT NULL, ... ) ENGINE=InnoDB AUTO_INCREMENT=36993336 DEFAULT CHARSET=utf8; LOCK TABLES `😀😀😀😀😀😀😀` WRITE; INSERT INTO `😀😀😀😀😀😀😀` VALUES (9,'2002-01-17 02:15:08',0,'2011-10 -14 13:47:31',20,2,2,1,1,0,19630, ... ),( ... ), ... ,( ... ); INSERT INTO `😀😀😀😀😀😀😀` VALUES (2297,'2002-03-19 22:13:14',0,'2011 -10-14 15:47:29',11,3,2,1,2,0,21891, ... ),( ... ), ... ,( ... ); ... CSVに変換できそう
  • 46. ® © 2015 MapR Technologies 46 MySQL ダンプファイルを CSV ファイルに変換 #!/usr/bin/perl while (<>) { s/^(--|/*| |)|DROP|CREATE|LOCK).*//g; # 余計な⾏行行を削除 s/^INSERT INTO .+ VALUES (//g; # INSERT ⽂文を削除 s/(?<=['d])),((?=['d])/n/g; # ⾏行行を分割 s/);$//g; #  余計な⽂文字を削除 s/"/""/g; # "  を  ""  に s/((?<!)'|'(?=n)|'$|(?<=)'(?=,['d]))/"/g; # '  を  "  に s/(^|(?<=,)NULL($|(?=,))//g; # NULL  を空⽂文字に print unless /^$/; # 空⾏行行を除き出⼒力力 }
  • 47. ® © 2015 MapR Technologies 47 CSV  ファイルを SELECT •  件数を確認 –  たしかに 3197 万⼈人くらいはいます 0: jdbc:drill:zk=local> SELECT count(*) FROM dfs.`/tmp/😀😀😀.csv`;.csv`; +-----------+ | EXPR$0 | +-----------+ | 31971575 | +-----------+ 1 row selected (32.733 seconds)
  • 48. ® © 2015 MapR Technologies 48 CSV  ファイルを SELECT •  中⾝身を⾒見見てみる –  CSV のフィールドは columns  という名前のリスト([a,b,...])になる 0: jdbc:drill:zk=local> !set maxwidth 160 0: jdbc:drill:zk=local> SELECT * FROM dfs.`/tmp/😀😀😀.csv` LIMIT 3; +---------+ | columns | +---------+ | ["9","2002-01-17 02:15:08","0","2011-10-14 13:47:31","20","2","2","1","1","0"," 19630","😀😀😀😀😀","😀😀😀😀","😀😀😀😀😀😀","😀😀😀😀😀😀😀😀 Ave.","Suite 😀😀","To | | ["10","2002-01-17 02:22:35","0","2011-10-14 13:47:31","10","2","3","2","2","0", "19631","😀😀😀😀😀😀😀😀😀","😀😀😀","😀😀😀😀","😀😀😀😀😀 Ave","","York Region"," | | ["11","2002-01-17 20:17:27","0","2011-10-14 13:47:32","0","2","2","1","2","0"," 19632","😀😀😀😀😀😀😀😀😀","😀😀😀😀","😀😀😀😀","😀😀😀😀😀😀😀😀","","Toronto",""," | +---------+ 3 rows selected (0.564 seconds)
  • 49. ® © 2015 MapR Technologies 49 CSV  ファイルを SELECT •  各カラムを取り出すには –  columns[0], columns[1]  のように添え字をつける 0: jdbc:drill:zk=local> SELECT columns[0], columns[1], columns[2], columns[3], co lumns[4] FROM dfs.`/tmp/😀😀😀.csv` LIMIT 3; +---------+----------------------+---------+----------------------+---------+ | EXPR$0 | EXPR$1 | EXPR$2 | EXPR$3 | EXPR$4 | +---------+----------------------+---------+----------------------+---------+ | 9 | 2002-01-17 02:15:08 | 0 | 2011-10-14 13:47:31 | 20 | | 10 | 2002-01-17 02:22:35 | 0 | 2011-10-14 13:47:31 | 10 | | 11 | 2002-01-17 20:17:27 | 0 | 2011-10-14 13:47:32 | 0 | +---------+----------------------+---------+----------------------+---------+ 3 rows selected (0.356 seconds)
  • 50. ® © 2015 MapR Technologies 50 CSV  ファイルを SELECT •  カラム名をつけよう –  MySQL ダンプファイル先頭の定義を参考に 0: jdbc:drill:zk=local> SELECT columns[0] AS id, columns[1] AS createdon, columns [2] AS createdby, columns[3] AS updatedon, columns[4] AS updatedby FROM dfs.`/tmp /😀😀😀.csv` LIMIT 3; +-----+----------------------+------------+----------------------+------------+ | id | createdon | createdby | updatedon | updatedby | +-----+----------------------+------------+----------------------+------------+ | 9 | 2002-01-17 02:15:08 | 0 | 2011-10-14 13:47:31 | 20 | | 10 | 2002-01-17 02:22:35 | 0 | 2011-10-14 13:47:31 | 10 | | 11 | 2002-01-17 20:17:27 | 0 | 2011-10-14 13:47:32 | 0 | +-----+----------------------+------------+----------------------+------------+ 3 rows selected (0.327 seconds)
  • 51. ® © 2015 MapR Technologies 51 CSV  ファイルを SELECT •  型はどうなってるの? –  CSV  ファイルの場合、すべてデフォルトで VARCHAR 型 –  CAST(値 AS データ型) を使ってキャストして使う •  エラー:  空⽂文字列列を数値型にキャストできない 0: jdbc:drill:zk=local> SELECT CAST(columns[0] AS INT) AS id, CAST(columns[1] AS TI MESTAMP) AS createdon, CAST(columns[2] AS INT) AS createdby, CAST(columns[3] AS TIM ESTAMP) AS updatedon, CAST(columns[4] AS INT) AS updatedby FROM dfs.`/tmp/ 😀😀😀.csv` LIMIT 3; Error: SYSTEM ERROR: NumberFormatException: Fragment 1:2 [Error Id: 33d800c9-78ea-473a-8e41-b13e38307af3 on node1:31010] (state=,code=0)
  • 52. ® © 2015 MapR Technologies 52 CSV の空⽂文字列列を NULL として扱うには •  ⽅方法1: CASE  を使う –  カラムごとに空⽂文字の扱いを変えることができる •  ⽅方法2: システムプロパティを変更更する   CASE WHEN columns[2] = '' THEN NULL ELSE CAST(columns[2] AS INT) END 0: jdbc:drill:zk=local> ALTER SYSTEM SET `drill.exec.functions.cast_empty_string_ to_null` = true; +-------+----------------------------------------------------------+ | ok | summary | +-------+----------------------------------------------------------+ | true | drill.exec.functions.cast_empty_string_to_null updated. | +-------+----------------------------------------------------------+
  • 53. ® © 2015 MapR Technologies 53 CSV  ファイルを SELECT •  とりあえず⽅方法2で・・・ 0: jdbc:drill:zk=local> SELECT CAST(columns[0] AS INT) AS id, CAST(columns[1] AS TI MESTAMP) AS createdon, CAST(columns[2] AS INT) AS createdby, CAST(columns[3] AS TIM ESTAMP) AS updatedon, CAST(columns[4] AS INT) AS updatedby FROM dfs.`/tmp/ 😀😀😀.csv` LIMIT 3; +-----+------------------------+------------+------------------------+------------+ | id | createdon | createdby | updatedon | updatedby | +-----+------------------------+------------+------------------------+------------+ | 9 | 2002-01-17 02:15:08.0 | 0 | 2011-10-14 13:47:31.0 | 20 | | 10 | 2002-01-17 02:22:35.0 | 0 | 2011-10-14 13:47:31.0 | 10 | | 11 | 2002-01-17 20:17:27.0 | 0 | 2011-10-14 13:47:32.0 | 0 | +-----+------------------------+------------+------------------------+------------+ 3 rows selected (0.734 seconds)
  • 54. ® © 2015 MapR Technologies 54 やっぱり男ばかりなんでしょうか •  性別は 25 番のカラム –  1 は⼥女女性、2 は男性と思われる –  やはり・・・ 0: jdbc:drill:zk=local> SELECT columns[25] AS gender, count(*) AS number, TRUNC(1 00.0 * count(*) / 31971575, 2) AS percent FROM dfs.`/tmp/😀😀😀.csv` GROUP BY colu mns[25] ORDER BY columns[25]; +---------+-----------+----------+ | gender | number | percent | +---------+-----------+----------+ | | 9809 | 0.03 | | 0 | 2 | 0.0 | | 1 | 4414808 | 13.8 | | 2 | 27546956 | 86.16 | +---------+-----------+----------+ 4 rows selected (31.79 seconds)
  • 55. ® © 2015 MapR Technologies 55 ⼤大統領領がいらっしゃると聞きましたが •  いました 0: jdbc:drill:zk=local> SELECT columns[0] AS pnum, columns[1] AS email FROM dfs.` /tmp/😀😀😀😀😀😀😀😀😀😀😀.csv` WHERE columns[1] = 'barack.obama@whitehouse.gov'; +-----------+------------------------------+ | pnum | email | +-----------+------------------------------+ | 12655726 | barack.obama@whitehouse.gov | +-----------+------------------------------+ 1 row selected (10.566 seconds)
  • 56. ® © 2015 MapR Technologies 56 ビューを作って楽をする •  毎回カラム名を指定したりキャストしたりするのは⼤大変 –  ビューの定義ファイルは  /tmp に「.view.drill」という拡張⼦子のついた JSONファイルとして保存される 0: jdbc:drill:zk=local> CREATE VIEW dfs.tmp.`😀😀😀😀😀😀😀` AS SELECT . . . . . . . . . . . > CAST(columns[0] AS INT) AS id, . . . . . . . . . . . > CAST(columns[1] AS TIMESTAMP) AS createdon, . . . . . . . . . . . > CAST(columns[2] AS INT) AS createdby, . . . . . . . . . . . > CAST(columns[3] AS TIMESTAMP) AS updatedon, . . . . . . . . . . . > CAST(columns[4] AS INT) AS updatedby . . . . . . . . . . . > ... . . . . . . . . . . . > FROM . . . . . . . . . . . > dfs.`/tmp/😀😀😀.csv` . . . . . . . . . . . > ;
  • 57. ® © 2015 MapR Technologies 57 ディレクトリに対してまとめてクエリ •  😀😀😀😀😀😀😀😀トランザクションは CSV ファイルが 2642 個 $ ls 😀😀😀😀😀😀Transactions 2008-03-21_downloaded.csv 2010-08-19_downloaded.csv 2013-01-16_downloaded.csv 2008-03-22_downloaded.csv 2010-08-20_downloaded.csv 2013-01-17_downloaded.csv 2008-03-23_downloaded.csv 2010-08-21_downloaded.csv 2013-01-18_downloaded.csv 2008-03-24_downloaded.csv 2010-08-22_downloaded.csv 2013-01-19_downloaded.csv 2008-03-25_downloaded.csv 2010-08-23_downloaded.csv 2013-01-20_downloaded.csv 2008-03-26_downloaded.csv 2010-08-24_downloaded.csv 2013-01-21_downloaded.csv 2008-03-27_downloaded.csv 2010-08-25_downloaded.csv 2013-01-22_downloaded.csv 2008-03-28_downloaded.csv 2010-08-26_downloaded.csv 2013-01-23_downloaded.csv 2008-03-29_downloaded.csv 2010-08-27_downloaded.csv 2013-01-24_downloaded.csv 2008-03-30_downloaded.csv 2010-08-28_downloaded.csv 2013-01-25_downloaded.csv 2008-03-31_downloaded.csv 2010-08-29_downloaded.csv 2013-01-26_downloaded.csv 2008-04-01_downloaded.csv 2010-08-30_downloaded.csv 2013-01-27_downloaded.csv 2008-04-02_downloaded.csv 2010-08-31_downloaded.csv 2013-01-28_downloaded.csv 2008-04-03_downloaded.csv 2010-09-01_downloaded.csv 2013-01-29_downloaded.csv ...
  • 58. ® © 2015 MapR Technologies 58 ディレクトリに対してまとめてクエリ •  データソースはファイルではなくディレクトリ •  国別トランザクション数のトップ 10 0: jdbc:drill:zk=local> columns[19] AS TXT_COUNTRY, count(*) AS number from dfs.`/tmp/ 😀😀😀😀😀😀Transactions` GROUP BY columns[19] ORDER BY count(*) DESC LIMIT 10;Transactions` GROUP BY columns[19] ORDER BY count(*) DESC LIMIT 10; +--------------+----------+ | TXT_COUNTRY | number | +--------------+----------+ | US | 7591509 | | CA | 823746 | | BR | 197032 | | AU | 146745 | | TW | 118338 | | CL | 109875 | | ZA | 78126 | | AR | 75314 | | JP | 74165 | | GB | 57901 | +--------------+----------+
  • 59. ® © 2015 MapR Technologies 59 ディレクトリを階層構造にしてみる •  年年と⽉月のディレクトリを作って、CSV  ファイルを配置する $ cd 😀😀😀😀😀😀Transactions $ for file in `ls *.csv`; do > dir=`echo $file | cut -c 1-7 | tr - /` >   if [ ! -d $dir ]; then > mkdir -p $dir > fi >     mv $file $dir > done $ ls 2008 2009 2010 2011 2012 2013 2014 2015 $ ls 2008 03 04 05 06 07 08 09 10 11 12 $ ls 2008/03 2008-03-21_downloaded.csv 2008-03-25_downloaded.csv 2008-03-29_downloaded.csv 2008-03-22_downloaded.csv 2008-03-26_downloaded.csv 2008-03-30_downloaded.csv 2008-03-23_downloaded.csv 2008-03-27_downloaded.csv 2008-03-31_downloaded.csv 2008-03-24_downloaded.csv 2008-03-28_downloaded.csv
  • 60. ® © 2015 MapR Technologies 60 ⽉月別トランザクション総額 •  dir0,dir1はディレクトリ名を表す特別なスキーマ 0: jdbc:drill:zk=local> SELECT dir0 AS year, dir1 AS month, TRUNC(SUM(CAST(REGEXP _REPLACE(REGEXP_REPLACE(columns[2], '^(', '-'), ',|)', '') AS DOUBLE)), 2) AS amount from dfs.`/tmp/😀😀😀😀😀😀Transactions` WHERE columns[2] <> 'AMOUNT' GROUP BY dir0, dir1 ORDER BY dir0, dir1; +-------+-------+-----------------+ | dir0 | dir1 | amount | +-------+-------+-----------------+ | 2008 | 03 | 97676.25 | | 2008 | 04 | 266162.39 | | 2008 | 05 | 1330456.45 | | 2008 | 06 | 1630110.26 | | 2008 | 07 | 2590733.03 | | 2008 | 08 | 2743130.11 | | 2008 | 09 | 2436655.66 | | 2008 | 10 | 2534268.59 | | 2008 | 11 | 2934391.31 | ...
  • 61. ® © 2015 MapR Technologies 61 ⽉月別トランザクション総額 😀
  • 62. ® © 2015 MapR Technologies 62 まとめ •  Apache Drill で、データをロードすることなく、すぐに分析を始 めることができる •  多数のファイルが散在している場合でも、まとめてクエリをか けることができる
  • 63. ® © 2015 MapR Technologies 63 Q&A @mapr_japan maprjapan sales-jp@mapr.com お問い合わせはこちらまで MapR maprtech mapr-technologies