Movatterモバイル変換


[0]ホーム

URL:


Satoshi Yamada, profile picture
Uploaded bySatoshi Yamada
PDF, PPTX4,841 views

PostgreSQLとPythonとSQL

SQLやDBの簡単な概要とPythonの親和性、FDW等についての資料です。みんなのPython勉強会#19 で使用しました。https://startpython.connpass.com/event/37958/

Embed presentation

Download as PDF, PPTX
1SQLで遊んでみよう!- PostgreSQLで始めるDB再入門 -みんなのPython勉強会2016/12/7山田聡@denzowill
2本発表内容は所属する会社と何ら関係はなく、私個人の見解しか含んでおりません
30.Who am I?http://enterprisezine.jp/dbonline/detail/8307?p=2● 山田聡@denzowill● StartPythonClubスタッフ● 株式会社アシスト勤務● DBエンジニア6年目● ノンプログラマ、趣味でPython● PostgreSQLとOracleが担当
4アジェンダ1.データベースって?2.PostgreSQLとPython3.SQLの基本4.FDW
5アジェンダ1.データベースって?2.PostgreSQLとPython3.SQLの基本4.FDW
61.データベース● 軍事情報をあつめた基地が由来● 様々な目的で利用するため、整理統合されたデータの集合体● データ活用の基盤として存在一元管理共有利用独立性
71.データベース● 軍事情報をあつめた基地が由来● 様々な目的で利用するため、整理統合されたデータの集合体● データ活用の基盤として存在一元管理共有利用独立性同じデータが散ってるのつらいアプリとデータはお互いに疎でありたいみんなで仲良くしたい
8以降DBは全部RDBMSのことです
91.データベースの種類メジャーな商用RDBMS
101.データベースの種類メジャーなオープンソースのRDBMS
111.OSSDBと商用DB無償で利用できるソースが公開されている自己責任※有償サポートもライセンス料がかかるソース非公開(1企業開発)メーカ責任発展性 安定性など など
121.OSSDBと商用DB技術に自身があるなら全然活用できる!何かあったら不安だからメーカにまかせたい!本当に止められないシステムに挑戦的なシステムやコストを抑えたいシステムになど など
131.OSSDBと商用DBの機能差●コア機能はほとんど差はない●パフォーマンス(パラレル)●高可用性(レプリケーション)●セキュリティ●管理補助の充実
141.OSSDBと商用DBの機能差●コア機能はほとんど差はない●パフォーマンス(パラレル)●高可用性(レプリケーション)●セキュリティ●管理補助の充実
15アジェンダ1.データベースって?2.PostgreSQLとPython3.SQLの基本4.FDW
162.PostgreSQLとPython
172.PostgreSQLはPythonが大好き●PL/Python●SQL関数がPythonでかける●PgAdmin4●管理ツールはFlask製
182.PostgreSQLはPythonが大好き●PL/Python●SQL関数がPythonでかける●PgAdmin4●管理ツールはFlask製sampledb=# CREATE OR REPLACE FUNCTION hello_python(hello_count int)sampledb-# RETURNS SETOF textsampledb-# AS $$sampledb$#sampledb$# for n in range(hello_count):sampledb$# yield "HELLO WORLD"sampledb$#sampledb$# $$ LANGUAGE plpythonu;CREATE FUNCTIONsampledb=# select hello_python(5);hello_python--------------HELLO WORLDHELLO WORLDHELLO WORLDHELLO WORLDHELLO WORLD(5 rows)
192.PostgreSQLはPythonが大好き●PL/Python●SQL関数がPythonでかける●PgAdmin4●管理ツールはFlask製
20アジェンダ1.データベースって?2.PostgreSQLとPython3.SQLの基本4.FDW
213.SQLの基本SQLStructured Query Language●RDBMSへの操作用●非手続き型言語●データの検索・操作●最近はRDBMS以外でも使える
22射影3.SQLの基本SELECT col1, col2 FROM table1;tabl1のすべての行のcol1,col2を表示してください。
23選択3.SQLの基本SELECT col1, col2 FROM table1WHERE col3 = 100;tabl1のcol3が100の行についてcol1,col2を表示してください。
24ソート3.SQLの基本SELECT col1, col2 FROM table1WHERE col3 = 100 ORDER BY col1;tabl1のcol3が100の行についてcol1,col2をcol1の順番で表示してください。
25結合3.SQLの基本SELECTtable1.col1,table2.col1FROMtable1 JOIN table2ON table1.co2 = tabl2.col3table1のcol2とtable2のcol3について同じ行を取得して、table1のcol1とtable2のcol1を表示してください。
26結合3.SQLの基本SELECTtable1.col1,table2.col1FROMtable1 JOIN table2ON table1.co2 = table2.col3JOIN table3ON table2.col2 = table3.col2;table1のcol2とtable2のcol3について同じ行を取得して、さらにその行のcol2とtable3のcol2が同じ行についてtable1のcol1とtable2のcol1を表示してください。
27集約3.SQLの基本SELECT col1, count(*)FROM table1GROUP BY col1;tabl1についてcol1が同じものをまとめて、それぞれについて行数を表示(count(*))してください。
283.SQLの基本col1 | col2 | col3-----------+------+------APPLE | 1 | 100APPLE | 2 | 100APPLE | 2 | 300PEN | 1 | 100PEN | 1 | 200PINEAPPLE | 1 | 200PINEAPPLE | 1 | 100PINEAPPLE | 2 | 100PINEAPPLE | 2 | 300PINEAPPLE | 2 | 400col1 | count-----------+-------PEN | 2APPLE | 3PINEAPPLE | 5
29ここまで欲しいデータの条件しか指定していないことにお気づきですか?
303.手続き型SQLは非手続き型●ほしいデータの条件を指定するだけ●データをどう取り出すかは指定しない●取り出す経路はシステム側に託す●データをどう取り出すか含め開発する●どれをループするのか●どれを条件として比較するのかPythonは手続き型
313.手続き型col1 | col2 | col3-----------+------+------APPLE | 1 | 100APPLE | 2 | 100APPLE | 2 | 300PEN | 1 | 100PEN | 1 | 200PINEAPPLE | 1 | 200PINEAPPLE | 1 | 100PINEAPPLE | 2 | 100PINEAPPLE | 2 | 300PINEAPPLE | 2 | 400[{"col1": "APPLE","col2": 1,"col3": 100,},{"col1": "APPLE","col2": 2,"col3": 100,},:Pythonで扱う想定でディクショナリにしたもの
323.SQLで処理したならsampledb=# SELECT col1, col2 FROM table1sampledb-# WHERE col3 = 100 ORDER BY col1;col1 | col2-----------+------APPLE | 1APPLE | 2PEN | 1PINEAPPLE | 1PINEAPPLE | 2(5 rows)
333.Pythonで同じ処理をするならresult = []# col3==100のデータに絞込for row in data:if row["col3"] == 100:result.append(row)# col1でソートresult.sort(key=lambda x: x["col1"])# 結果の表示for row in result:print row["col1"], row["col2"]
343.Pythonで同じ処理をするならresult = []# col3==100のデータに絞込for row in data:if row["col3"] == 100:result.append(row)# col1でソートresult.sort(key=lambda x: x["col1"])# 結果の表示for row in result:print row["col1"], row["col2"]
353.Pythonで同じ処理をするならresult = []# col3==100のデータに絞込for row in data:if row["col3"] == 100:result.append(row)# col1でソートresult.sort(key=lambda x: x["col1"])# 結果の表示for row in result:print row["col1"], row["col2"]
363.Pythonで同じ処理をするならresult = []# col3==100のデータに絞込for row in data:if row["col3"] == 100:result.append(row)# col1でソートresult.sort(key=lambda x: x["col1"])# 結果の表示for row in result:print row["col1"], row["col2"]
373.Pythonで同じ処理をするなら逆でも結果は同じだが、遅くなる開発者が最適な手続きを考えるresult = []# col3==100のデータに絞込for row in data:if row["col3"] == 100:result.append(row)# col1でソートresult.sort(key=lambda x: x["col1"])# 結果の表示for row in result:print row["col1"], row["col2"]
38非手続き型言語(SQL)では誰が手続きを考えるのか
393.SQLで手続きを作る流れプランナ,オプティマイザ※製品で呼称は違うSQL表の行数データの分布
403.SQLで手続きを作る流れプランナ,オプティマイザ※製品で呼称は違うSQL表の行数データの分布実行計画
413.SQLで手続きを作る流れプランナ,オプティマイザ※製品で呼称は違うSQL表の行数データの分布実行計画データへアクセスする手続き
423.SQLで手続きを作る流れ●大体はプランナの実行計画のほうが優れている●何個も表が結合するSQLの最適解は人間には無理●たまにプランナも失敗する●プランナが上手に動ける環境を整えるのが大事
43アジェンダ1.データベースって?2.PostgreSQLとPython3.SQLの基本4.FDW
444.FDWForeign Data Wrapper外部データラッパー:PostgreSQL 9.1から導入された拡張機能外部のDBや、CSVといった外部リソースをPostgreSQLのテーブルとして扱う機能。様々なリソースにSQLで透過的にアクセスできます。
454.FDWSQLFDW
464.FDWの種類https://wiki.postgresql.org/wiki/Foreign_data_wrappers
474.FDWの作り方FDWの仕様に従って必要なインターフェースを実装するだけ!
484.FDWの作り方FDWの仕様に従って必要なインターフェースを実装するだけ!C言語で!
494.FDWの作り方FDWの仕様に従って必要なインターフェースを実装するだけ!C言語で!つらいorz
504.FDWの作り方https://wiki.postgresql.org/wiki/Foreign_data_wrappersType:Multicorn?
514.FDWの作り方http://multicorn.org/
524.Multicorn●PythonでFDWを実装できるライブラリ●Multicornのクラスを継承して実装するだけfrom multicorn import ForeignDataWrapperclass ConstantForeignDataWrapper(ForeignDataWrapper):def __init__(self, options, columns):super(ConstantForeignDataWrapper, self).__init__(options, columns)self.columns = columnsdef execute(self, quals, columns):for index in range(20):line = {}for column_name in self.columns:line[column_name] = '%s %s' % (column_name, index)yield line
53残りの時間で独自のFDWを実装
54残りの時間で独自のFDWを実装するには残りの時間が短すぎるので続きは次の機会で
55あなたもPythonとPostgreSQLで遊んでみてください

Recommended

PDF
AI・データ利活用継続の鍵はビジネススキル
PDF
PostgreSQLレプリケーション徹底紹介
PDF
MySQL8.0 in COSCUP2017
PPT
障害とオペミスに備える! ~Oracle Databaseのバックアップを考えよう~
PDF
Sql基礎の基礎
PPTX
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
PDF
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
PDF
Redo log improvements MYSQL 8.0
PDF
pg_trgmと全文検索
PDF
MySQL InnoDB Cluster - Advanced Configuration & Operations
PDF
Cookpad TechConf 2016 - DWHに必要なこと
PDF
MySQLトラブル解析入門
PDF
シンプルでシステマチックな Oracle Database, Exadata 性能分析
PDF
Oracle Data Guard による高可用性
PDF
Sqlの書き方セミナー資料
PDF
クラウドのためのアーキテクチャ設計 - ベストプラクティス -
PDF
Oracle Database In Lock
PPTX
Oracle Data Guard basics and how to create manually 18c plus
PDF
XIDを周回させてみよう
PDF
PostgreSQL 9.6 新機能紹介
PDF
実践!DBベンチマークツールの使い方
PPTX
AHVでみるCVM Autopathの仕組み
PDF
Inside vacuum - 第一回PostgreSQLプレ勉強会
PDF
Db2 Warehouse ご紹介資料 20170922
PDF
AIOUG : OTNYathra - Troubleshooting and Diagnosing Oracle Database 12.2 and O...
PDF
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PDF
20180703 AWS Black Belt Online Seminar Amazon Neptune
PDF
Logをs3とredshiftに格納する仕組み
PDF
PostgreSQLとpython

More Related Content

PDF
AI・データ利活用継続の鍵はビジネススキル
PDF
PostgreSQLレプリケーション徹底紹介
PDF
MySQL8.0 in COSCUP2017
PPT
障害とオペミスに備える! ~Oracle Databaseのバックアップを考えよう~
PDF
Sql基礎の基礎
PPTX
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
PDF
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
PDF
Redo log improvements MYSQL 8.0
AI・データ利活用継続の鍵はビジネススキル
PostgreSQLレプリケーション徹底紹介
MySQL8.0 in COSCUP2017
障害とオペミスに備える! ~Oracle Databaseのバックアップを考えよう~
Sql基礎の基礎
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
Redo log improvements MYSQL 8.0

What's hot

PDF
pg_trgmと全文検索
PDF
MySQL InnoDB Cluster - Advanced Configuration & Operations
PDF
Cookpad TechConf 2016 - DWHに必要なこと
PDF
MySQLトラブル解析入門
PDF
シンプルでシステマチックな Oracle Database, Exadata 性能分析
PDF
Oracle Data Guard による高可用性
PDF
Sqlの書き方セミナー資料
PDF
クラウドのためのアーキテクチャ設計 - ベストプラクティス -
PDF
Oracle Database In Lock
PPTX
Oracle Data Guard basics and how to create manually 18c plus
PDF
XIDを周回させてみよう
PDF
PostgreSQL 9.6 新機能紹介
PDF
実践!DBベンチマークツールの使い方
PPTX
AHVでみるCVM Autopathの仕組み
PDF
Inside vacuum - 第一回PostgreSQLプレ勉強会
PDF
Db2 Warehouse ご紹介資料 20170922
PDF
AIOUG : OTNYathra - Troubleshooting and Diagnosing Oracle Database 12.2 and O...
PDF
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PDF
20180703 AWS Black Belt Online Seminar Amazon Neptune
pg_trgmと全文検索
MySQL InnoDB Cluster - Advanced Configuration & Operations
Cookpad TechConf 2016 - DWHに必要なこと
MySQLトラブル解析入門
シンプルでシステマチックな Oracle Database, Exadata 性能分析
Oracle Data Guard による高可用性
Sqlの書き方セミナー資料
クラウドのためのアーキテクチャ設計 - ベストプラクティス -
Oracle Database In Lock
Oracle Data Guard basics and how to create manually 18c plus
XIDを周回させてみよう
PostgreSQL 9.6 新機能紹介
実践!DBベンチマークツールの使い方
AHVでみるCVM Autopathの仕組み
Inside vacuum - 第一回PostgreSQLプレ勉強会
Db2 Warehouse ご紹介資料 20170922
AIOUG : OTNYathra - Troubleshooting and Diagnosing Oracle Database 12.2 and O...
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
20180703 AWS Black Belt Online Seminar Amazon Neptune

Similar to PostgreSQLとPythonとSQL

PDF
Logをs3とredshiftに格納する仕組み
PDF
PostgreSQLとpython
PPTX
Webアプリケーション入門(3)
PDF
外部データラッパによる PostgreSQL の拡張
PDF
オープンソースRDBMS新機能ランダウンOSC2017TokyoSpring
PDF
[db tech showcase Tokyo 2015] A14:Amazon Redshiftの元となったスケールアウト型カラムナーDB徹底解説 その...
PPTX
PandasとSQLとの比較
PDF
経済学のための実践的データ分析 4.SQL ことはじめ
PDF
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PDF
PostgreSQLによるデータ分析ことはじめ
PPT
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
PPT
今年こそ始めたい!SQL超入門 MIRACLE Linux Meetup版 0620
PDF
Lt ingaoho-jsonb+postgeres fdw
PDF
リレーショナルデータベースとの上手な付き合い方 long version
PDF
MySQL 5.5 Update #denatech
PDF
オープンソース・データベースの最新事情
PPTX
SQLチューニング入門 入門編
PPTX
Tuning on my_sql
PPTX
NoSQL Bigtable and Azure Table
PDF
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
Logをs3とredshiftに格納する仕組み
PostgreSQLとpython
Webアプリケーション入門(3)
外部データラッパによる PostgreSQL の拡張
オープンソースRDBMS新機能ランダウンOSC2017TokyoSpring
[db tech showcase Tokyo 2015] A14:Amazon Redshiftの元となったスケールアウト型カラムナーDB徹底解説 その...
PandasとSQLとの比較
経済学のための実践的データ分析 4.SQL ことはじめ
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PostgreSQLによるデータ分析ことはじめ
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
今年こそ始めたい!SQL超入門 MIRACLE Linux Meetup版 0620
Lt ingaoho-jsonb+postgeres fdw
リレーショナルデータベースとの上手な付き合い方 long version
MySQL 5.5 Update #denatech
オープンソース・データベースの最新事情
SQLチューニング入門 入門編
Tuning on my_sql
NoSQL Bigtable and Azure Table
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)

More from Satoshi Yamada

PDF
Pythonで業務改善をしたときにあった問題(ライト版)
PDF
pythonでemlファイルを扱う話
PDF
bottle.pyをつかったチャットアプリ作成チュートリアル
PDF
bottleで始めるWEBアプリの最初の一歩
PDF
Requestsで始める5分前帰社
PDF
DBエンジニアに必要だったPythonのスキル
PDF
本気でPythonで宛名書きした話
PDF
10080分でPythonからIP Messeneger
PDF
15分で情シスに怒られる方法
PDF
Djangoで業務改善したい
PDF
PostgreSQL実行計画入門@関西PostgreSQL勉強会
PDF
201505 PostgreSQLアンカンファレンス(PL/Pythonで作るWEBアプリ)
PDF
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PDF
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
Pythonで業務改善をしたときにあった問題(ライト版)
pythonでemlファイルを扱う話
bottle.pyをつかったチャットアプリ作成チュートリアル
bottleで始めるWEBアプリの最初の一歩
Requestsで始める5分前帰社
DBエンジニアに必要だったPythonのスキル
本気でPythonで宛名書きした話
10080分でPythonからIP Messeneger
15分で情シスに怒られる方法
Djangoで業務改善したい
PostgreSQL実行計画入門@関西PostgreSQL勉強会
201505 PostgreSQLアンカンファレンス(PL/Pythonで作るWEBアプリ)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)

PostgreSQLとPythonとSQL


[8]ページ先頭

©2009-2025 Movatter.jp