Submit Search
PostgreSQLによるデータ分析ことはじめ
•
9 likes
•
18,358 views
Ohyama Masanori
Follow
pgconf.asia 2016 チュートリアルの資料です。
Read less
Read more
1 of 79
Download now
Downloaded 64 times
More Related Content
PostgreSQLによるデータ分析ことはじめ
1.
Copyright©2016 NTT corp.
All Rights Reserved. PostgreSQLによるデータ分析 ことはじめ 2016/12/03 PGConf.asia 2016 チュートリアル NTT OSSセンタ DBMS担当 ⼤⼭ 真実
2.
2Copyright©2016 NTT corp.
All Rights Reserved. ⾃⼰紹介 ⼤⼭ 真実 おおやま まさのり 2012-2015 NTTデータ OSSプロフェッショナルサービス Hadoopの検証・サポート 2015-現在 NTT OSSセンタ DBMS担当 PostgreSQLの検証・サポート 注)データ分析の専⾨家ではありません! @ooyamams1987
3.
3Copyright©2016 NTT corp.
All Rights Reserved. • PostgreSQLに関して、データ分析という観点で幅広 いトピックを扱います。 • 時間の制約上⼀つ⼀つを深く触れることはできません。 • この講義がこれから皆様がPostgreSQLを⼗⼆分に使 いこなしていく上での⼊り⼝になれば幸いです。 • もし後⽇ご質問があれば、JPUGのSlackにてご質問く ださい。 はじめに ⽇本PostgreSQLユーザ会公式(?)Slack https://postgresql-jp.slack.com/
4.
4Copyright©2016 NTT corp.
All Rights Reserved. はじめに PostgreSQLはデータ分析にも適したデータベースである! l ⾼機能なSQL l ⼤量データに対応するための機能 • 9.6 からは念願のパラレルクエリが導⼊! l 豊富な関連ツール l 他のDBとの連携機能 OSSだから今すぐ始められる!
5.
5Copyright©2016 NTT corp.
All Rights Reserved. はじめに 今時データ分析と⾔えば、HadoopとかSparkでは? 本当に“ビッグ”なデータを分析したいのであればその通り。 ・画像、映像 ・IoT機器からのセンサーデータ ・⼤量のWebアクセスログ などなど。
6.
6Copyright©2016 NTT corp.
All Rights Reserved. はじめに Q. 分析したいデータはHadoopを使わなきゃいけないほどのサイズ? 企業に存在するデータはそんなに⼤きくない(かも?) 平成27年版 情報通信⽩書 図表5-4-3-9 各データを分析に活⽤している企業等の割合 https://data.cityofnewyork.us/view/gn7m-em8n 2014 Yellow Taxi Trip Data NYの1年分のタクシーの 搭乗ログでも30GBほど。
7.
7Copyright©2016 NTT corp.
All Rights Reserved. はじめに データ活⽤の効果があった企業の特徴として次の特徴が挙げられている 「平成27年版情報通信⽩書」によると… 平成27年版 情報通信⽩書 図表 5-4-3-18 データ活⽤の効果達成率
8.
8Copyright©2016 NTT corp.
All Rights Reserved. はじめに 1.データ分析の専⾨家が⾼度なツールを使って分析している 平成27年版 情報通信⽩書 図表 5-4-3-23 分析⼿法、分析⼈材による効果が得られた割合の⽐較
9.
9Copyright©2016 NTT corp.
All Rights Reserved. はじめに 2.短い間隔でデータ分析を⾏っている 平成27年版 情報通信⽩書 図表 5-4-3-20 効果有無による⽐較(分析頻度)
10.
10Copyright©2016 NTT corp.
All Rights Reserved. はじめに 3.様々な種類のデータを組み合わせてデータ分析を⾏っている 平成27年版 情報通信⽩書 図表 5-4-3-21 効果有無による⽐較 (分析に活⽤するデータの種類)
11.
11Copyright©2016 NTT corp.
All Rights Reserved. はじめに データ分析の専⾨家が、短い間隔で、様々なデータを組み合わせて ⾼度な分析を⾏うことが⼤事! →PostgreSQLは良い選択肢です! 1.データ分析の専⾨家が⾼度なツールを使って分析している 2.短い間隔でデータ分析を⾏っている 3.様々な種類のデータを組み合わせてデータ分析を⾏っている データ活⽤の効果があった企業の特徴 なぜ?
12.
12Copyright©2016 NTT corp.
All Rights Reserved. はじめに PostgreSQLでデータ分析を⾏うときのポイント 1.⾼機能なSQLを使いこなせ! 2.⼤容量データへの対応はこうだ! 3.他のデータベースと連携させろ! 4.豊富なツールを使いこなせ!
13.
13Copyright©2016 NTT corp.
All Rights Reserved. 1.⾼機能なSQLを使いこなせ!
14.
14Copyright©2016 NTT corp.
All Rights Reserved. ⾼機能なSQLを使いこなせ! 1. 統計・集約関数 2. ウィンドウ関数 3. CTE (With句) 省略! きっとそーだいさんが話してくれるはず!
15.
15Copyright©2016 NTT corp.
All Rights Reserved. ⾼機能なSQLを使いこなせ!
16.
16Copyright©2016 NTT corp.
All Rights Reserved. ⾼機能なSQLを使いこなせ! 3.CTE (With句) SELECT ... FROM (SELECT ... FROM t1 JOIN (SELECT ... FROM ...) a ON (...) ) b JOIN (SELECT ... FROM ...) c ON (...) データ分析で使いがちな複雑な ⼊れ⼦構造のSQLでもわかりやすく 記述可能 WITH a AS ( SELECT ... FROM ... ), b AS ( SELECT ... FROM t1 JOIN a ON (...) ), c AS ( SELECT ... FROM ... ) SELECT ... FROM b JOIN c ON ... CTEなし CTEあり t1 a (select...) b t1 × a c (select...) result
17.
17Copyright©2016 NTT corp.
All Rights Reserved. 2.⼤容量データへの対応はこうだ!
18.
18Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 1. パラレルクエリ 2. パーティショニング 3. BRINインデックス 4. ストリーミングレプリケーション
19.
19Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 1. パラレルクエリ 2. パーティショニング 3. BRINインデックス 4. ストリーミングレプリケーション
20.
20Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 1.パラレルクエリ 澤⽥雅彦「PostgreSQL 9.6 新機能紹介」 http://www.slideshare.net/masahikosa wada98/postgresql-96-69228794
21.
21Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 1.パラレルクエリ 澤⽥雅彦「PostgreSQL 9.6 新機能紹介」 http://www.slideshare.net/masahikosa wada98/postgresql-96-69228794
22.
22Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 13Copyright©2016 NTT corp. All Rights Reserved. • HPE ProLiant DL580 GEN9 • Intel Xeon E7-8890 v4 2.20GHz (4P/192 core (96-HT)) • 2TB RAM • Workload Accelerator(PCIe SSD) • Read : 715,000 IOPS, 3.0GB/s • Write : 95,000 IOPS, 2.5GB/s Evaluation on a great machine Supported by Thank you! 1.パラレルクエリ
23.
23Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 17Copyright©2016 NTT corp. All Rights Reserved. 0 50 100 150 200 250 300 350 400 0 20 40 60 80 100 120 140 160 180 200 ExecutionTime(s) Parallel Degree Parallel Query on 192 cores machine • All table data(400GB) is on the shared buffer; no disk access. • Simple aggregation, count(*). • Parallel query makes aggregation 19x faster!! 385 sec 21 sec 1.パラレルクエリ
24.
24Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 19Copyright©2016 NTT corp. All Rights Reserved. 3,006 3,966 8,272 40 6,000 28 177 1,029 2,111 0 1,000 2,000 3,000 4,000 5,000 6,000 7,000 8,000 9,000 SF1 SF10 SF50 SF100 TotalExecutionTime(sec) Hive PostgreSQL 9.1.3 PostgreSQL 9.6.0 • Compare DBT-3 benchmark result with Hive (SF1 - SF100) • Hive flushes data to disk whenever finished each job, which could be overhead. • Now in 2016 we should use Hive on Tez. • On the other hand, PostgreSQL has the all table data in shared buffer. • Parallel execution in memory bring us much performance improvement. SF1 to SF100 - CDH4.1.2 - 24 cores (12-HT) - 32G RAM - 2TB SATA - PostgresSQL 9.1.3 - 8 cores (4-HT) - 16G RAM - SATA 1.パラレルクエリ
25.
25Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 1. パラレルクエリ 2. パーティショニング 3. BRINインデックス 4. ストリーミングレプリケーション
26.
26Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 2.パーティショニング PGECons「2013年度活動成果報告」 https://www.pgecons.org/wp- content/uploads/2014/05/ca3a0b2d4d 00c62d43aa367594a72589.pdf
27.
27Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 2.パーティショニング https://www.pgecons.org/wp-content/uploads/2014/05/ca3a0b2d4d00c62d43aa367594a72589.pdf PGECons「2013年度活動成果報告」 https://www.pgecons.org/wp- content/uploads/2014/05/ca3a0b2d4d 00c62d43aa367594a72589.pdf
28.
28Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 2.パーティショニング メリット デメリット • (パーティション単位での)参照性能向上 • テーブルの保守性向上(⼀部の場⾯において) • INSERT性能の低下、ON CONFLICT句との併⽤時の制約 • 別のパーティションに移るようなUPDATEにはUPDATE⽤の トリガを別途する必要あり • プランニングコスト上昇 (パーティション数は100までを推奨) • 複雑なクエリだと不適切なプランになる可能性がある (チェック制約は単純なものにすることを推奨) 詳細はPostgreSQLの公式マニュアルを参照してください https://www.postgresql.jp/document/9.5/html/ddl-partitioning.html
29.
29Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 2.パーティショニング 図 6.1: パーティション表作成フロー パーティションの作成はちょっと大変 PGECons「2015年度活動成果報告」 https://www.pgecons.org/wp- content/uploads/PGECons/2015/WG3/ PGECons_2015_WG3_DBTools.pdf
30.
30Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 2.パーティショニング パーティショニングを簡単に操作するためのツール • pg_part https://github.com/uptimejp/pg_part • pg_partman https://github.com/keithf4/pg_partman • pg_pathman https://github.com/postgrespro/pg_pathman pg_part, pg_partman に関してはPGEConsに詳細な解説資料あり。 • 2015年度WG3活動報告書(データベースツール編) https://www.pgecons.org/wp- content/uploads/PGECons/2015/WG3/PGECons_2015_WG3_DBTools.pdf • 付録_パーティションツール https://www.pgecons.org/wp- content/uploads/PGECons/2015/WG3/PGECons_2015_WG3_DBTools_appendix_chapter6.pdf
31.
31Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 2.パーティショニング pg_pathman Pg_pathman UPDATE and DELETE Support and Benchmark Alexander Korotkov「Pg_pathman UPDATE and DELETE Support and Benchmark」 http://akorotkov.github.io/blog/2016/0 3/18/pg_pathman-update-delete- benchmark/
32.
32Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 2.パーティショニング PostgreSQL本体機能としてのパーティション機能は NTT OSSセンタ の Amit Langote が全⼒開発中! PostgreSQL 10 をお楽しみに!
33.
33Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 1. パラレルクエリ 2. パーティショニング 3. BRINインデックス 4. ストリーミングレプリケーション
34.
34Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 3.BRINインデックス 澤⽥雅彦「 PostgreSQL 9.5 新機能紹介」 http://www.slideshare.net/hadoopxnttd ata/postgresql-95-new-features-nttdata
35.
35Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 3.BRINインデックス http://www.slideshare.net/hadoopxnttdata/postgresql-95-new-features-nttdata 澤⽥雅彦「 PostgreSQL 9.5 新機能紹介」 http://www.slideshare.net/hadoopxnttd ata/postgresql-95-new-features-nttdata
36.
36Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 3.BRINインデックス http://www.slideshare.net/hadoopxnttdata/postgresql-95-new-features-nttdata 澤⽥雅彦「 PostgreSQL 9.5 新機能紹介」 http://www.slideshare.net/hadoopxnttd ata/postgresql-95-new-features-nttdata
37.
37Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 3.BRINインデックス 0.00% 20.00% 40.00% 60.00% 80.00% 100.00% 0 5000 10000 15000 20000 BRIN vs. BTREE Bitmap Index Scan on 100M rows (table sorted) BTREE BRIN (128) BRIN (4) fraction of table matching the condition duration[miliseconds] Tomas Vondra「PostgreSQL9.5,9.6,次期バージョンに おける性能向上」http://www.pgconf.asia/JP/wp- content/uploads/2016/12/performance-9.5-and- beyond.pdf
38.
38Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 3.BRINインデックス btree BRIN (1) BRIN (4) BRIN (128) 0 500 1000 1500 2000 2500 2142 11 2.8 0.13 BRIN vs. BTREE Index size on 100M rows (sorted) size(MB) http://www.pgconf.asia/JP/wp- content/uploads/2016/12/performance-9.5-and-beyond.pdf Tomas Vondra「PostgreSQL9.5,9.6,次期バージョンに おける性能向上」http://www.pgconf.asia/JP/wp- content/uploads/2016/12/performance-9.5-and- beyond.pdf
39.
39Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 1. パラレルクエリ 2. パーティショニング 3. BRINインデックス 4. ストリーミングレプリケーション
40.
40Copyright©2016 NTT corp.
All Rights Reserved. Copyright © NTT COMWARE CORPORATION 2015 Copyright © 2015 NTT corp. All Rights Reserved. 開発プロジェクトの最大のミッション 最大のミッション、それは「性能の担保」 大量データの計算処理を確実に時間内で完了しつつ、処理時間の安定化も図れ 大規模な分析処理を行いつつ、関連システムからのオンライン処理をさばけ 6 DBMS • 業務データ • 過去履歴 • ...など 仮想化基盤 分析業務利用者 関連システム群 オペレータ 夜間帯 バッチ処理 日中帯 オンライン処理 情報分析処理 時間帯 処理内容 夜... バ... オンライン処理 AP 情報分析処理 AP バッチ処理AP ⼤容量データへの対応はこうだ! 4.ストリーミングレプリケーション 朝倉 佑貴,⼭⽥ 達朗「料⾦系基幹システム へのPostgreSQL導⼊事例」 https://www.pgecons.org/wp- content/uploads/2015/09/PGECons3_N TT_20150911.pdf
41.
41Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 4.ストリーミングレプリケーション https://www.pgecons.org/wp-content/uploads/2015/09/PGECons3_NTT_20150911.pdf
42.
42Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! https://www.pgecons.org/wp-content/uploads/2015/09/PGECons3_NTT_20150911.pdf Copyright © NTT COMWARE CORPORATION 2015 Copyright © 2015 NTT corp. All Rights Reserved. 性能特性の異なる業務が互いに影響しないよう設計せよ 12 常に最新のデータに対して大規模分析処理を行いたい でも、オンライン処理の性能に影響を与えたくない ストリーミングレプリケーションで分析処理用のリードレプリカを構築 情報分析処理 AP オンライン処理 AP バッチ処理AP マスタ リード レプリカ レプリケーション DBが2つに分かれ 分析処理が オンライン処理に 影響しない DBが2つに分かれ 分析処理が オンライン処理に 影響しない レプリケーションで 最新データに対する 分析処理が可能 レプリケーション処理 によって、分析処理の SQLが実行中に中断 されないよう設定(*) する必要あり レプリカ側で テーブルへのデータ反映処理が 全く進まなくなった!! NTT OSSセンタの助力もあり 無事解決 対処策は後半で 4.ストリーミングレプリケーション
43.
43Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! Copyright © NTT COMWARE CORPORATION 2015 Copyright © 2015 NTT corp. All Rights Reserved. WAL適用と競合する参照クエリとは何か? ◆競合の典型的な例 クエリ実行中に行削除が行われた場合 40 リード レプリカ ①SELECT * FROM HOGE; ②DELETE FROM HOGE; VACUUM HOGE; ⑤WAL適用 参照中のHOGEテーブル に対し、WALはデータ 削除、と記載。 1つの対象に操作が2つ。 → これが競合 ③WAL転送 内容はHOGEテーブルの行削除(物理削除) 競合発生の場合、 WAL適用が優先されるため、 実行中の参照クエリは中断される。 競合は回避できないか? マスタ ④SELECTのクエリを中断 4.ストリーミングレプリケーション 朝倉 佑貴,⼭⽥ 達朗「料⾦系基幹システム へのPostgreSQL導⼊事例」 https://www.pgecons.org/wp- content/uploads/2015/09/PGECons3_N TT_20150911.pdf
44.
44Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! Copyright © NTT COMWARE CORPORATION 2015 Copyright © 2015 NTT corp. All Rights Reserved. フィードバックのパラメータを追加し解決へ! ◆本案件では以下のパラメータを組み合わせて採用 44 max_standby_streaming_delay=30秒 → -1 WALが到着してから何秒後にWAL適用を開始するかを設定する。 -1 : クエリ完了までWAL適用は行わない リードレプリカ側はクエリ中断を回避しつつ、 データ反映処理が行われるようになり、課題は解決 hot_standby_feedback=OFF → ON トランザクションIDをマスタに伝え、参照する可能性がある行の削除を待ってもらう。 ON : 有効 追加 4.ストリーミングレプリケーション ※マスタのテーブルの肥⼤化に注意 朝倉 佑貴,⼭⽥ 達朗「料⾦系基幹システム へのPostgreSQL導⼊事例」 https://www.pgecons.org/wp- content/uploads/2015/09/PGECons3_N TT_20150911.pdf
45.
45Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 37Copyright©2016 NTT corp. All Rights Reserved. マルチ同期レプリケーション マスタ スタンバイ A スタンバイ B スタンバイ C 同期 レプリケーション 同期 レプリケーション ⾮同期 レプリケーション • 複数のスタンバイサーバに対して同期レプリケーションを使用可能 • より高可用な構成を組むことが可能に スタンバイAとスタンバイBに 同期レプリケーションを使⽤ 4.ストリーミングレプリケーション PostgreSQL 9.6 ではレプリケーション機能がさらに進化! 澤⽥雅彦「PostgreSQL 9.6 新機能紹介」 http://www.slideshare.net/masahikosa wada98/postgresql-96-69228794
46.
46Copyright©2016 NTT corp.
All Rights Reserved. ⼤容量データへの対応はこうだ! 4.ストリーミングレプリケーション Quorum Commit マルチ同期レプリケーション機能は NTT OSSセンタ の 澤⽥ 雅彦 が全⼒開発中! PostgreSQL 10 をお楽しみに!
47.
47Copyright©2016 NTT corp.
All Rights Reserved. 3.他のデータベースと連携させろ!
48.
48Copyright©2016 NTT corp.
All Rights Reserved. 他のデータベースと連携させろ! http://www.slideshare.net/babystarmonja/postgre-sql-11764943?from_action=save ・FDW - Foreign data wrappers PostgreSQLの外部にあるデータに普通のSELECT⽂でアクセスするためのしくみ 花⽥ 茂「外部データラッパによる PostgreSQL の拡張」 http://www.slideshare.net/babystarmo nja/postgre-sql- 11764943?from_action=save
49.
49Copyright©2016 NTT corp.
All Rights Reserved. 他のデータベースと連携させろ! ・FDW - Foreign data wrappers Postgres_fdw file_fdw については、PostgreSQL本体の追加モジュール(contrib)として 提供されているのですぐに利⽤可能。 # create extension postgres_fdw; CREATE EXTENSION ※postgres_fdwではCREATE FOREIGN DATA WRAPPER は⾃動的に実⾏される # ¥dew 外部データラッパーの一覧 名前 | 所有者 | ハンドラー | バリデータ --------------+----------+----------------------+------------------------ postgres_fdw | postgres | postgres_fdw_handler | postgres_fdw_validator
50.
50Copyright©2016 NTT corp.
All Rights Reserved. 他のデータベースと連携させろ! ・FDW - Foreign data wrappers ローカルPostgreSQL リモートPostgreSQL リモートMySQL PostgreSQL⽤外部データラッパ # CREATE EXTENSION postgres_fdw; (CREATE FOREIGN DATA WRAPPER …) MySQL⽤ 外部データ ラッパ 外部サーバ CREATE SERVER … リモートサーバのホスト名、DB名、ポート番号など ユーザーマッピング CREATE USER MAPPING … リモートサーバで使⽤する ユーザ名、パスワードなど 外部テーブル CREATE FOREIGN TABLE … アクセスしたいリモートサーバの テーブルを定義
51.
51Copyright©2016 NTT corp.
All Rights Reserved. 他のデータベースと連携させろ! Demo various pushdown features etc. ====================================================================== 1. Select 句ののプッシュダウン select * from ft1; ローカルサーバから外部テーブルにSELECT 2. Where 句のプッシュダウン select * from ft1 where val < 10; -- WHERE clause pushdown 3. DML プッシュダウン delete from ft1 where val % 2 = 0; -- DML pushdown update ft1 set val2 = val + 2; 4. Sortプッシュダウン select * from ft1 order by val; PGCon 2016 で⾏われた Ashutosh Bapat のチュートリアル https://www.pgcon.org/2016/schedule/attachments/419_pgfdw_demo_script FDWの設定⼿順は上記URL、または、PostgreSQLの公式マニュアルを参照。
52.
52Copyright©2016 NTT corp.
All Rights Reserved. 他のデータベースと連携させろ! 6. Joinプッシュダウン select * from ft1 join ft2 on (ft1.val = ft2.val) where ft1.val2 < 15; ※ローカルのテーブルとリモートのテーブルのJoinも可能 7. Analyze 実行 analyze ft2; select * from pg_statistic where starelid = 'ft2'::regclass; ※Analyze対象の全データをローカルPostgreSQLに転送することに注意 8. View、Materialized Viewの作製 create view ft_join as select ft1.val ft1_val, ft1.val2 ft1_val2, ft2.val2 ft2_val2 from ft1 left join ft2 on (ft1.val = ft2.val); create materialized view mv_ft_join as select ft1.val ft1_val, ft1.val2 ft1_val2, ft2.val2 ft2_val2 from ft1 left join ft2 on (ft1.val = ft2.val); select * from ft_join; select * from mv_ft_join; PGCon 2016 で⾏われた Ashutosh Bapat のpostgres_fdwチュートリアル https://www.pgcon.org/2016/schedule/attachments/419_pgfdw_demo_script
53.
53Copyright©2016 NTT corp.
All Rights Reserved. 他のデータベースと連携させろ! 分析に必要なデータはRDBの中にある場合が多い。 →必要なデータを保持しているDBに透過的に直接アクセス! 基幹DB データソース SQL ユーザー 基幹DB 基幹DB BIツール PostgreSQL FDW FDW FDW
54.
54Copyright©2016 NTT corp.
All Rights Reserved. 他のデータベースと連携させろ! http://www.slideshare.net/masahikosawada98/postgresql-96-69228794 澤⽥雅彦「PostgreSQL 9.6 新機能紹介」 http://www.slideshare.net/masahikosa wada98/postgresql-96-69228794
55.
55Copyright©2016 NTT corp.
All Rights Reserved. 他のデータベースと連携させろ! ・FDW - Foreign data wrappers FDWは NTT OSSセンタ の 藤⽥ 悦郎 堀⼝ 恭太郎 ⼭⽥ 達郎 も全⼒開発中! PostgreSQL 10 をお楽しみに!
56.
56Copyright©2016 NTT corp.
All Rights Reserved. 4.豊富なツールを使いこなせ!
57.
57Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! ここではデータ分析の観点で以下のツールをご紹介する。 1. Apache MADlib (Incubating) 2. その他 1. Orange 2. PostGIS 3. ⽇本語全⽂検索ツール PostgreSQLをより便利にする多様なツールが 様々な組織・個⼈によって公開されている。 参考:NTT OSSセンタ が公開しているPostgreSQL関連のOSSはこちら NTT OSS Center DBMS Development and Support Team https://github.com/ossc-db https://sourceforge.net/projects/pgstatsinfo/
58.
58Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) http://madlib.incubator.apache.org/
59.
59Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) ・オープンソースソフトウェア(2-clause BSD license) ・豊富な統計・機械学習ライブラリをUDF(※)で簡単に利⽤可能 https://cwiki.apache.org/confluence/display/MADLIB/Architecture ※UDF:ユーザ定義関数 https://www.postgresql.jp/document/9.5/html/xfunc.html http://pgsqldeepdive.blogspot.jp/2016/01/plpython-aggregation-function.html
60.
60Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) http://madlib.incubator.apache.org/community-artifacts/Apache- MADlib-user-survey-results-Oct-2016.pdf
61.
61Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! http://madlib.incubator.apache.org/community-artifacts/Apache- MADlib-user-survey-results-Oct-2016.pdf 11 Q5 - Frequently Used Algorithms 1.Apache MADlib (Incubating)
62.
62Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) インストールは省略! ・PostgreSQL 9.6 へのインストールはソースコードからの ビルドがお勧め。(RPMからはインストールできませんでした。私の環境起因?) ・PostgreSQL 9.5 へのインストールはRPMがお勧め。 https://cwiki.apache.org/confluence/display/MADLIB/Installation+Guide Installation Guide https://dist.apache.org/repos/dist/release/incubator/madlib/1.9.1-incubating/ # select madlib.version(); version -------- MADlib version: 1.10.0-dev, git revision: rel/v1.9.1-8-g82e56a4, cmake configuration time: ...
63.
63Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) 例1:相関係数 # select * from pearson_test; ItemID | User1 | User2 | User3 | User4 | User5 --------+-------+-------+-------+-------+------- 101 | 5.0 | 2.0 | 2.5 | 5.0 | 4.0 102 | 3.0 | 4.4 | 2.0 | 4.0 | 3.0 103 | 2.5 | 5.0 | 2.0 | 3.0 | 2.0 104 | 4.0 | 1.0 | 4.0 | 4.5 | 4.0 105 | 2.5 | 5.0 | 2.5 | 2.0 | 3.5 106 | 2.5 | 4.5 | 3.0 | 4.0 | 5.0 107 | 2.5 | 1.0 | 5.0 | 3.5 | 2.0 # select corr("User1","User4") from pearson_test; corr ------------------- 0.769711105935245 例11. PostgreSQL本体の相関係数関数を使った場合
64.
64Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) 例1:相関係数 # select madlib.correlation( 'pearson_test’,'pearson_test_output’ ,'"User1","User2","User3","User4","User5"'); # select * from pearson_test_output; column_position | variable | User1 | User2 | User3 | User4 | User5 -----------------+----------+---------------------+--------------------+-------------------+-------------------+------- 1 | User1 | 1 | | | | 2 | User2 | -0.546929577338552 | 1 | | | 3 | User3 | -0.0377195470232912 | -0.79465632134891 | 1 | | 4 | User4 | 0.769711105935245 | -0.582961865158075 | 0.149966529063513 | 1 | 5 | User5 | 0.364518243177598 | 0.0260498161861346 | -0.10096620601608 | 0.410984968442742 | 1 例12. MADlibの相関係数関数を使った場合 select madlib.correlation( ‘インプットテーブル名’ ,‘アウトプットテーブル名’ ,’”相関を求めたいカラム名”, “…”, “…”ʼ);
65.
65Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) 例2:サポートベクターマシン(SVM) Ver.1.9.0 からの新機能! • サポートベクターマシンとは? http://qiita.com/pesuchin/items/c55f40b69aa1aec2bd19 Ø 教師あり学習を⽤いるパター ン認識モデルの⼀つ。 Ø 分類や回帰へ適⽤。 Ø 現在知られている⼿法の中で も認識性能が優れた学習モデ ルの⼀つ。 pesuchin「機械学習⼊⾨〜ハードマー ジンSVM編〜」 http://qiita.com/pesuchin/items/c5 5f40b69aa1aec2bd19
66.
66Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) 例2:サポートベクターマシン(SVM) • カーネルトリック Ø カーネル関数を⽤いてパターンを有限もしくは無 限次元の特徴空間へ写像し、特徴空間上で線形分 離を⾏う pesuchin「機械学習⼊⾨〜ハードマー ジンSVM編〜」 http://qiita.com/pesuchin/items/c5 5f40b69aa1aec2bd19
67.
67Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) 例2:サポートベクターマシン(SVM) • カーネルトリックのイメージ 「SVM with polynomial kernel visualization」 https://www.youtube.com/watch?v=3liCbRZPrZA
68.
68Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) 例2:サポートベクターマシン(SVM) 例21. まずはマニュアルに記載の例を試してみる id tax bedroom bath price size lot 1 590 2 1.0 50000 770 22100 2 1050 3 2.0 85000 1410 12000 3 20 3 1.0 22500 1060 3500 4 870 2 2.0 90000 1300 17500 5 1320 3 2.0 133000 1500 30000 6 1350 2 1.0 90500 820 25700 7 2790 3 2.5 260000 2130 25000 8 680 2 1.0 142500 1170 22000 9 1840 3 2.0 160000 1500 19000 … … … … … … … houseテーブル https://madlib.incubator.apache.org/docs/latest/group__grp__svm.html • bedroom, bath , size など の情報から、price が 100,000 以下の物件かどう かを推測する。 • マニュアルではカーネルトリ ックを使わないもの、使った ものがそれぞれが例⽰されて いる。
69.
69Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) • リニアモデル作成(カーネル不使⽤) SELECT madlib.svm_classification('houses', 'houses_svm', 'price < 100000', 'ARRAY[1, tax, bath, size]'); • ガウスカーネルを使ったノンリニアモデル作成 SELECT madlib.svm_classification( 'houses', 'houses_svm_gaussian', 'price < 100000', 'ARRAY[1, tax, bath, size]', 'gaussian', 'n_components=10', '', 'init_stepsize=1, max_iter=200'); • 予測モデル作成
70.
70Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) • リニアモデルによる予測結果 select * from houses_pred; id | prediction | decision_function ----+------------+-------------------- 1 | t | 0.0938672144797545 2 | t | 0.134445050268981 3 | t | 1.90320546662703 ... • 作成したモデルを使って予測してみる • リニアモデルによる予測(元データを流⽤して実施) SELECT madlib.svm_predict('houses_svm', 'houses', 'id', 'houses_pred');
71.
71Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) • 予測結果の⽐較 SELECT *, price < 100000 AS target FROM houses JOIN houses_pred USING (id) ORDER BY id; id price prediction decision_function observed 1 50000 True 0.0938672144798 True 2 85000 True 0.134445050269 True 3 22500 True 1.90320546663 True 4 90000 True 0.34410006693 True 5 133000 False -0.314618105199 False 6 90500 False -1.53502545094 True 7 260000 False -2.5421155107 False 8 142500 True 0.608110606339 False 9 160000 False -1.49051126913 False … … … … … id price prediction decision_function observed 1 50000 True 2.42762512244 True 2 85000 True 1.76050726948 True 3 22500 True 1.14044931256 True 4 90000 True 1.10706143597 True 5 133000 False -1.26570595537 False 6 90500 True 1.33794522323 True 7 260000 False -1.0164054774 False 8 142500 False -1.09640506629 False 9 160000 False -1.92695648532 False … … … … … リニアモデルによる予測結果 ノンリニアモデルによる予測結果
72.
72Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) • AUC (Area under the curve) による識別性能の⽐較 select madlib.area_under_roc('houses_pred_roc', 'houses_pred_roc_output', 'prediction', 'observed'); area_under_roc 0.79464285714285714285500000000000000000000 • リニアモデル select madlib.area_under_roc('houses_pred_gaussian_roc', 'houses_pred_gaussian_roc_output', 'prediction', 'observed'); • ノンリニアモデル area_under_roc 1.00000000000000000000000000000000000000000
73.
73Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) 例22. : UC Irvine Machine Learning Repository - Adult Data Set http://archive.ics.uci.edu/ml/datasets/Adult • 1994年の国勢調査に基づくデータ • 性別、年齢、学歴、職種などの情報に加えて、所得が$50K/年を 超えているかいないかが記録されている • 属性情報からその⼈の所得が$50K/年を超えているかを予測する ためによく使われるデータセット 例2:サポートベクターマシン(SVM) SVMを使った試⾏錯誤の詳細は下記URLで! https://github.com/ooyamams/pgconf.asia_tutorial
74.
74Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) 例22. : UC Irvine Machine Learning Repository - Adult Data Set http://archive.ics.uci.edu/ml/datasets/Adult 例2:サポートベクターマシン(SVM) SVMを使った試⾏錯誤の詳細は下記Githubで! https://github.com/ooyamams/pgconf.asia_tutorial/blo b/master/MADlib_test_SVM_adult.ipynb
75.
75Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 1.Apache MADlib (Incubating) 使ってみた感想 • UDFを⾃分で作成せずに、PostgreSQL内のデータに対して⾼度な分 析や機械学習ができるのは⼤変魅⼒的。 • ただし… Ø ⼩さいデータであれば、DBからロードして、ローカルPCにて PythonやらRやらで分析したほうが効率的であるのは確か。 (Pythonの機械学習系のライブラリの充実度は素晴らしい) Ø サポートベクターマシンを本格的に使うとなるとパラメーター チューニングが⼤変。グリットサーチやベイズ最適化などの ツール類がまだ存在しない(たぶん)なので追加されることを期 待。(クロスバリデーションはできる。)
76.
76Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! • GPL 3.0 • スロベニアのリュブリャナ⼤学バイオインフォマティクス研究所が中 ⼼となって開発 • AXLE PROJECT で開発が推進されたソフトウェアの⼀つ (Advanced Analytics for Extremely Large European Databases) 2.その他のツール http://orange.biolab.si/orange3/
77.
77Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! 2.その他のツール
78.
78Copyright©2016 NTT corp.
All Rights Reserved. 豊富なツールを使いこなせ! • PostGIS http://www.postgis.net/ Ø PostgreSQL データベースで地理空間情報を扱うための拡張 Ø ⽇本語による紹介記事 http://lets.postgresql.jp/documents/tutorial/PostGIS/1/ • ⽇本語全⽂検索ツール Ø pg_bigm http://pgbigm.osdn.jp/ Ø PGroonga https://pgroonga.github.io/ja/ pg_bigmの開発者である澤⽥雅彦による⽇本語全⽂検索の解説 http://www.slideshare.net/hadoopxnttdata/postgresqlpgbigm -mysqlpostgresql 2.その他のツール
79.
79Copyright©2016 NTT corp.
All Rights Reserved. 最後に改めて… データ分析の専⾨家が、短い間隔で、様々なデータを組み合わせて ⾼度な分析を⾏うことが⼤事! →PostgreSQLは良い選択肢です! 1.データ分析の専⾨家が⾼度なツールを使って分析している 2.短い間隔でデータ分析を⾏っている 3.様々な種類のデータを組み合わせてデータ分析を⾏っている データ活⽤の効果があった企業の特徴
Download