Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,363 views

Published on

スキーマフリー SQL エンジン Apache Drill の概要、利用事例、ロードマップを紹介。オープンデータの分析を例に Drill の使い方を説明します。2015年9月15日に開催されたTokyo Apache Drill Meetupでの講演資料です。

Published in: Data & Analytics

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

  1. 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. 2. ® © 2015 MapR Technologies 2 ⾃自⼰己紹介 •  草薙  昭彦 (@nagix) •  MapR Technologies データエンジニア NS-SHAFT 無料!
  3. 3. ® © 2015 MapR Technologies 3
  4. 4. ® © 2015 MapR Technologies 4 Apache Drill 1.0 リリース (5/19) http://drill.apache.org
  5. 5. ® © 2015 MapR Technologies 5 本⽇日のトピック •  Apache Drill 概要 •  利利⽤用事例例 •  ロードマップ •  オープンデータを分析してみよう
  6. 6. ® © 2015 MapR Technologies 6© 2015 MapR Technologies ® Apache Drill 概要
  7. 7. ® © 2015 MapR Technologies 7 ⾮非構造化データ 構造化データ 1980 2000 20101990 2020 データは2年年で倍に増える ⾮非構造化データ  の割合は 企業や組織が集めたデータ の  80%以上  に増⼤大する 出典: Human-Computer Interaction & Knowledge Discovery in Complex Unstructured, Big Data 合計格納データサイズ
  8. 8. ® © 2015 MapR Technologies 8 1980 2000 20101990 2020 固定スキーマ DB管理理者が構造を管理理 動的/柔軟なスキーマ アプリケーションが構造を管理理 ⾮非リレーショナルデータベースリレーショナルデータベース GB〜~TB TB〜~PBデータサイズ データベース データは⾮非リレーショナルデータストアに向かう データ構造 開発スタイル 構造化 構造化、半構造化、⾮非構造化 計画的(リリースサイクル=数ヶ⽉月〜~数年年) 反復復的(リリースサイクル=数⽇日〜~数週間)
  9. 9. ® © 2015 MapR Technologies 9 ⾮非構造化データの時代の  SQL とは? SQL の使いやすさ NoSQL の柔軟性 •  SQL •  BI (Tableau、MicroStrategy など) •  低レイテンシ •  スケーラビリティ •  スキーマ管理理なし –  HDFS (Parquet、JSON など) –  HBase –  … •  データ変換・複製なし
  10. 10. ® © 2015 MapR Technologies 10 Industry's First Schema-free SQL engine for Big Data ®
  11. 11. ® © 2015 MapR Technologies 11 セルフサービスからスキーマフリーへの拡張 迅速さ&ビジネス価値 BI のユースケース IT部⾨門主導のBI セルフサービス BI スキーマフリー データ探索索 IT部⾨門主導のBI IT部⾨門主導のBI セルフサービス BI IT 部⾨門への依存なしで アナリストが主導 IT 部⾨門の  ETL の⽀支援を 受け、アナリストが主導 IT 部⾨門が作成する レポート、スプレッドシート 1980年年代 -1990年年代 2000年年代 現在
  12. 12. ® © 2015 MapR Technologies 12 即時分析により「即断可能な」ビジネスを実現 Hadoop
 データ データ モデリング 変換 データ移動 (任意) ユーザー Hadoop
 データ ユーザー 管理理された アプローチ 探索索的な アプローチ 新しいビジネスの問いかけソースデータの変更更 結果を得るまでの合計時間: 数週間から数ヶ⽉月 結果を得るまでの合計時間: 数分
  13. 13. ® © 2015 MapR Technologies 13 Drill は  動的なスキーマディスカバリ  をサポート •  固定スキーマ •  中央管理理されたレポジトリのスキー   マを利利⽤用  (Hive メタストア) •  固定スキーマ、変化するスキーマ、   もしくはスキーマレス •  中央管理理されたレポジトリのスキーマ、   ⾃自⼰己記述型データのスキーマを利利⽤用 2動的にスキーマを発⾒見見事前にスキーマを宣⾔言 SCHEMA ON WRITE SCHEMA BEFORE READ SCHEMA ON THE FLY
  14. 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. 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. 16. ® © 2015 MapR Technologies 16 アーキテクチャの概要 •  コモディティサーバのクラスタ –  各ノード上でデーモン  (drillbit) が動作 •  他の実⾏行行エンジンには⾮非依存  (MapReduce, Spark, Tez) –  より優れた性能と管理理性 •  ZooKeeper が逐⼀一変化するクラスタのメンバーシップ情報を管理理 –  drillbit は  ZooKeeper を利利⽤用してクラスタ内の他の  drillbit を⾒見見つける –  クライアントは  ZooKeeper を利利⽤用して  drillbit を⾒見見つける •  データ処理理単位は  カラムナレコードバッチ   –  性能への影響を最⼩小限に抑えつつスキーマの柔軟性を実現
  17. 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. 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. 19. ® © 2015 MapR Technologies 19 drillbit 内部のコアモジュール   SQL パーサ Hive HBase 分散キャッシュ ストレージプラグイン MongoDB DFS 物理理プラン 実⾏行行エンジン論論理理プラン オプティマイザ RPC エンドポイント
  20. 20. ® © 2015 MapR Technologies 20© 2015 MapR Technologies ® 利利⽤用事例例
  21. 21. ® © 2015 MapR Technologies 21 バックグラウンド •  M.C. Srivas – MapR Technologies CTO 兼  共同創業者 •  サーチ –  MapReduce, Bigtable •  チーフアーキテクト –  現  Netapp •  AFS –  AFS チームリード –  現
  22. 22. ® © 2015 MapR Technologies 22 Drill は幅広い⽤用途にむけて設計されている Raw Data Exploration JSON Analytics Data Hub Analytics… Hive HBaseファイル ディレクトリ … {JSON}, Parquet Text ファイル … …
  23. 23. ® © 2015 MapR Technologies 23 通信機器メーカー 収益を創出する IOT サービスを構築 •  SaaS 向けのインタラクティブな操作のエンジンとしての Apache Drill •  動的なデータを  JSON  でネイティブに表現 •  すべての BI ツールに  ODBC コネクタを使って接続 ⽬目標 課題 ソリューション •  携帯電話事業者に新しい収益のためのサービスを提供 •  ネットワークやユーザーに関する即時の、より深い情報分析が可能に •  ⾮非常に低コスト、ETL処理理は不不要 ビジネス インパクト •  携帯電話ユーザーの体験をプロアクティブにモニターして改善 •  多様な異異なるデータソース •  データは⾮非常に多様かつ動的 •  新しいデータに対するインタラクティブ、アドホック、即時の分析
  24. 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. 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. 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. 27. ® © 2015 MapR Technologies 27© 2015 MapR Technologies ® ロードマップ
  28. 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. 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. 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. 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. 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. 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. 34. ® © 2015 MapR Technologies 34 その他の重点エリア •  クエリ性能の改善 •  より⾼高いスケーラビリティ & 同時実⾏行行時の処理理時間の安 定性 •  モニタリングおよび管理理機能の改善 •  BI ツール連携 •  ユーザビリティ
  35. 35. ® © 2015 MapR Technologies 35© 2015 MapR Technologies ® オープンデータを分析してみよう
  36. 36. ® © 2015 MapR Technologies 36 Drill で政府統計情報  (e-Stat) を分析してみよう
  37. 37. ® © 2015 MapR Technologies 37 Drill で政府統計情報  (e-Stat) を分析してみよう 政府統計情報  e-Stat を  Apache Drill で分析してみる http://nagix.hatenablog.com/entry/2015/05/21/232526
  38. 38. ® © 2015 MapR Technologies 38 今、もっとも注⽬目の⾼高いオープンデータ
  39. 39. ® © 2015 MapR Technologies 39 😀
  40. 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. 41. ® © 2015 MapR Technologies 41 オープンデータ $ ls -l 😀
  42. 42. ® © 2015 MapR Technologies 42 README $ cat README 😀
  43. 43. ® © 2015 MapR Technologies 43 余談 😀
  44. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 61. ® © 2015 MapR Technologies 61 ⽉月別トランザクション総額 😀
  62. 62. ® © 2015 MapR Technologies 62 まとめ •  Apache Drill で、データをロードすることなく、すぐに分析を始 めることができる •  多数のファイルが散在している場合でも、まとめてクエリをか けることができる
  63. 63. ® © 2015 MapR Technologies 63 Q&A @mapr_japan maprjapan sales-jp@mapr.com お問い合わせはこちらまで MapR maprtech mapr-technologies

×