SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Writable Arrow_Fdw
HeteroDB,Inc
Chief Architect & CEO
KaiGai Kohei <kaigai@heterodb.com>
Arrowって何よ?(1/3)
▌Apache Arrow 形式
 構造化データを列形式で保存・交換するためのデータ形式。
 “ビッグデータ処理” 向けデータ交換の形式として広く利用されつつある。
✓Spark、Impala、Drill、Python (PyArrow)、R、etc...
 整数、実数、日付時刻、文字列など基本的なデータ型を定義。
NVIDIA GPU
PostgreSQL / PG-Strom
PostgreSQL Unconference Apr-20202
Arrowって何よ?(2/3)
▌Apache Arrow形式の内部構造
 Header
• “ARROW1¥0¥0” という文字列。
 Schema Definition
• 列定義情報。データ型、列名、列番号など。
 Record Batch
• 一定の行数のデータを列形式で配置したブロック
• 例えば、N = 100万行で (Int32, Float64) というデータ
定義なら、Int32が100万個並び、次いで Float64 が
100万個並んでこの領域に書き込まれる。
 Dictionary Batch
• 辞書圧縮のための領域。
1 = 東京都、2 = 神奈川県、3 = 大阪府、、、
• 処理系がきちんと対応していたら褒めてあげて。
 Footer
• RecordBatchやDictionaryBatchのオフセット、サイズな
どの情報を保持する。
Header “ARROW1¥0¥0”
Schema Definition
DictionaryBatch-0
RecordBatch-0
RecordBatch-k
Footer
• DictionaryBatch[0] (offset, size)
• RecordBatch[0] (offset, size)
:
• RecordBatch[k] (offset, size)
Apache Arrow ファイル
PostgreSQL Unconference Apr-20203
Arrowって何よ?(3/3)-参考:列データと可変長データ
▌詳しく知りたい方は、@stou さんの発表資料をご覧ください
 Apache Arrow 東京ミートアップ
https://www.slideshare.net/kou/apachearrowtokyomeetup2018
 Apache Arrowの最新情報(2019年9月版)
https://www.clear-code.com/blog/2019/9/30.html
列A (Int32) - nullmap
列A (Int32) - values
列B (Utf8) - nullmap
列B (Utf8) - offset
列B (Utf8) - values
RecordBatch
1101101
12 34 0 56 78 0 89
列A (Int32) - nullmap
列A (Int32) - values
1101101
0 5 8 8 13 17 17
列B (Utf8) - nullmap
列B (Utf8) - offset
列B (Utf8) - values
‘R’ ‘a’ ‘m’ ‘e’ ‘n’ ‘I’ ‘c’ ‘e’ ‘C’ ‘u’ ‘r’
21
文字列長 = offset[i+1] - offset[i]
PostgreSQL Unconference Apr-20204
Arrow_Fdwって?(1/2)
PostgreSQL
Table
Foreign Table
file_fdw
Foreign Table
Arrow_fdw
CSVファイル Apache Arrow
ファイル
CSV➔Heap変換 ArrowHeap変換
Apache Arrow形式のファイルを、
あたかも PostgreSQL のテーブル
であるかのように読み書きする
ためのドライバ機能
PostgreSQL Unconference Apr-20205
Arrow_Fdwって?(2/2)
ファイルをコピーするだけでデータのインポートが完了する。
データ
ソース
Apache Arrow
INSERT INTO ...
COPY FROM ...
cp -f /path/from/source
/path/to/destination
• バイナリ互換データ形式
• 非トランザクショナル
従来の方法
• テキスト ➔ バイナリ変換
• トランザクションログにも書き出し
PostgreSQL Unconference Apr-20206
ログ収集デーモン:
想定利用シーン:IoT/M2Mログの集計・解析処理
PostgreSQL Unconference Apr-20207
Manufacturing Logistics Mobile Home electronics
なぜApache Arrowか?
 分析のためにDBへデータを取り込む時間が馬鹿にならない。
 列データ形式なので、プロセッサ・I/Oの使用効率が高い。
JBoF: Just Bunch of Flash
NVME-over-Fabric
(RDMA)
DB管理者
BIツール(可視化)
機械学習アプリケーション
(E.g, 異常検知など)
共通データ
フレーム PG-Strom
Apache Arrowファイルの作り方
▌バイナリをゴニョる。
 KaiGaiの俺メモ:Dive into Apache Arrow(その1)
https://kaigai.hatenablog.com/entry/2019/01/14/144040
▌Pythonなどでライブラリを利用
 例えば、PyArrowのIPCモジュールを使って Data Frame を書き出す、など。
▌pg2arrow / mysql2arrow コマンド
 PostgreSQLやMySQLで実行したクエリの結果を Arrow 形式で書き出す
ためのコマンド。
 使用例)
% pg2arrow -h localhost -d pgsql ¥
-c ‘SELECT * FROM hoge’ ¥
-o /dev/shm/hoge.arrow
▌書き込み可能 Arrow_Fdw 外部テーブル
 Arrow_FdwへのINSERTをRecordBatchの追加と捉えて、外部テーブルの背後に
存在する Apache Arrow ファイルへ追記するための機能。
PostgreSQL Unconference Apr-20208
Writable Arrow_Fdw 外部テーブルを定義する
▌ポイント
① 外部テーブルのバックエンドに指定するファイルは1個だけ
② writableオプションに ‘true’ を指定する。
▌定義例
=# CREATE FOREIGN TABLE ft (
id int,
x real,
y real,
z real
) SERVER arrow_fdw
OPTIONS (file '/dev/shm/ft.arrow', writable 'true');
CREATE FOREIGN TABLE
PostgreSQL Unconference Apr-20209
Writable Arrow_Fdw 外部テーブルにINSERTする
=# INSERT INTO ft (SELECT x, pgstrom.random_float(1, -1000, 1000),
pgstrom.random_float(1, -1000, 1000),
pgstrom.random_float(1, -1000, 1000)
FROM generate_series(1,500) x);
=# SELECT * FROM ft limit 10;
id | x | y | z
----+------------+------------+------------
1 | -796.3072 | -980.48663 | 854.43024
2 | -167.9222 | 860.1901 | 158.72714
3 | 257.10052 | 835.6227 | 536.2602
4 | 34.197735 | 328.64984 | 427.6224
5 | -713.2156 | 27.131866 | 156.22997
6 | -271.762 | 20.40196 | 526.8236
7 | -251.07478 | -567.57733 | 623.1641
8 | -936.90576 | -843.47284 | -65.439545
9 | -908.04553 | 426.0469 | -399.97433
10 | -549.8333 | 651.3198 | 792.652
(10 rows)
PostgreSQL Unconference Apr-202010
生成された Apache Arrow ファイルを確認する
$ python3
>>> import pyarrow as pa
>>> f = pa.ipc.open_file('/dev/shm/ft.arrow')
>>> f.schema
id: int32
x: float
y: float
z: float
>>> f.get_record_batch(0).to_pandas()
id x y z
0 1 -796.307190 -980.486633 854.430237
1 2 -167.922195 860.190125 158.727142
2 3 257.100525 835.622681 536.260193
3 4 34.197735 328.649841 427.622406
4 5 -713.215576 27.131866 156.229965
.. ... ... ... ...
495 496 759.468506 866.489990 -883.853699
496 497 997.161987 70.487015 -544.648804
497 498 -883.911377 647.152466 -504.539886
498 499 -803.238892 -566.325012 -612.984070
499 500 40.926250 -209.205719 911.291443
[500 rows x 4 columns]
当然だが、SQLで
確認した結果と同じ
PostgreSQL Unconference Apr-202011
Arrowファイルへの追記メカニズム
Header “ARROW1¥0¥0”
Schema Definition
DictionaryBatch-0
RecordBatch-0
RecordBatch-k
Footer
• DictionaryBatch[0]
• RecordBatch[0]
:
• RecordBatch[k]
Arrowファイル(追記前)
Header “ARROW1¥0¥0”
Schema Definition
DictionaryBatch-0
RecordBatch-0
RecordBatch-k
Footer (new revision)
• DictionaryBatch[0]
• RecordBatch[0]
:
• RecordBatch[k]
• RecordBatch[k+1]
Arrowファイル(追記後)
RecordBatch-(k+1)
オリジナルの
フッターを
上書きする
1回の INSERT で
書き込まれた内容
PostgreSQL Unconference Apr-202012
Arrowファイルへの追記メカニズム
Header “ARROW1¥0¥0”
Schema Definition
DictionaryBatch-0
RecordBatch-0
RecordBatch-k
Footer
• DictionaryBatch[0]
• RecordBatch[0]
:
• RecordBatch[k]
Arrowファイル(追記前)
Header “ARROW1¥0¥0”
Schema Definition
DictionaryBatch-0
RecordBatch-0
RecordBatch-k
Footer (new revision)
• DictionaryBatch[0]
• RecordBatch[0]
:
• RecordBatch[k]
• RecordBatch[k+1]
Arrowファイル(追記後)
RecordBatch-(k+1)
オリジナルの
フッターを
上書きする
Footer
• DictionaryBatch[0]
• RecordBatch[0]
:
• RecordBatch[k]
元のフッタのイメージと
オフセット、サイズを
バックアップしておけば、
ロールバックも可能
PostgreSQL Unconference Apr-202013
ROLLBACKもできるYO!!
postgres=# INSERT INTO ft VALUES (1,'Tokyo'),(2,'Osaka');
INSERT 0 2
postgres=# BEGIN;
BEGIN
postgres=# INSERT INTO ft VALUES (3,'Nagoya'),(4,'Kyoto');
INSERT 0 2
postgres=# SELECT * FROM ft;
id | x
----+--------
1 | Tokyo
2 | Osaka
3 | Nagoya
4 | Kyoto
(4 rows)
PostgreSQL Unconference Apr-202014
ROLLBACKもできるYO!!
postgres=# SAVEPOINT sv;
SAVEPOINT
postgres=# INSERT INTO ft VALUES (5, 'Yokohama');
INSERT 0 1
postgres=# SELECT * FROM ft;
id | x
----+----------
1 | Tokyo
2 | Osaka
3 | Nagoya
4 | Kyoto
5 | Yokohama
(5 rows)
PostgreSQL Unconference Apr-202015
ROLLBACKもできるYO!!
postgres=# ROLLBACK TO sv;
ROLLBACK
postgres=# SELECT * FROM ft;
id | x
----+--------
1 | Tokyo
2 | Osaka
3 | Nagoya
4 | Kyoto
(4 rows)
postgres=# ABORT;
ROLLBACK
postgres=# SELECT * FROM ft;
id | x
----+-------
1 | Tokyo
2 | Osaka
(2 rows)
PostgreSQL Unconference Apr-202016
Writable Arrow_Fdwの制限事項
▌INSERTのみサポート
 UPDATE / DELETEはできません。
 そもそも Apache Arrow はそういうファイル形式ではありません。
▌同時に書き込みできるのは1トランザクションのみ
 バルクロード以外の用途で使うとは思っていないので…。
▌データを消去したい時は TRUNCATE で消去した後、再ロード
 と、思ったら、PostgreSQL v13では外部テーブルの
TRUNCATE が入らなかったので、当面の間は代わりに↓を。。。
pgstrom.arrow_fdw_truncate(regclass)
PostgreSQL Unconference Apr-202017
関連情報
▌リポジトリ
 https://github.com/heterodb/pg-strom
※ Arrow_FdwはPG-Stromの機能の一つとして実装されています
▌ドキュメント
 PG-Strom公式ドキュメント:列指向データストア (Arrow_Fdw)
http://heterodb.github.io/pg-strom/ja/arrow_fdw/
▌パッケージの入手
 HeteroDB Software Distribution Center
https://heterodb.github.io/swdc/
PostgreSQL Unconference Apr-202018
お知らせ ー GPU版PostGISのテストケースを作る人募集
https://heterodb.com/recruit/
PostgreSQL Unconference Apr-202019
20200424_Writable_Arrow_Fdw

Contenu connexe

Tendances

20191115-PGconf.Japan
20191115-PGconf.Japan20191115-PGconf.Japan
20191115-PGconf.JapanKohei KaiGai
 
20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdw20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdwKohei KaiGai
 
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習x1 ichi
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwToshi Harada
 
20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCache20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCacheKohei KaiGai
 
使ってみませんか?pg hint_plan
使ってみませんか?pg hint_plan使ってみませんか?pg hint_plan
使ってみませんか?pg hint_planMasao Fujii
 
20210731_OSC_Kyoto_PGStrom3.0
20210731_OSC_Kyoto_PGStrom3.020210731_OSC_Kyoto_PGStrom3.0
20210731_OSC_Kyoto_PGStrom3.0Kohei KaiGai
 
スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Con...
スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Con...スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Con...
スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Con...Yahoo!デベロッパーネットワーク
 
Hadoop -NameNode HAの仕組み-
Hadoop -NameNode HAの仕組み-Hadoop -NameNode HAの仕組み-
Hadoop -NameNode HAの仕組み-Yuki Gonda
 
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]Kohei KaiGai
 
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#820170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8Kohei KaiGai
 
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望Kohei KaiGai
 
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみpg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみMasahiko Sawada
 
Geotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 online
Geotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 onlineGeotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 online
Geotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 onlineRyousuke Wayama
 
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)NTT DATA Technology & Innovation
 
20171220_hbstudy80_pgstrom
20171220_hbstudy80_pgstrom20171220_hbstudy80_pgstrom
20171220_hbstudy80_pgstromKohei KaiGai
 
[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...
[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...
[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...Insight Technology, Inc.
 
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)Masahiko Sawada
 

Tendances (20)

20191115-PGconf.Japan
20191115-PGconf.Japan20191115-PGconf.Japan
20191115-PGconf.Japan
 
20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdw20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdw
 
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdw
 
20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCache20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCache
 
使ってみませんか?pg hint_plan
使ってみませんか?pg hint_plan使ってみませんか?pg hint_plan
使ってみませんか?pg hint_plan
 
20210731_OSC_Kyoto_PGStrom3.0
20210731_OSC_Kyoto_PGStrom3.020210731_OSC_Kyoto_PGStrom3.0
20210731_OSC_Kyoto_PGStrom3.0
 
スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Con...
スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Con...スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Con...
スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Con...
 
JSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのかJSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのか
 
Hadoop -NameNode HAの仕組み-
Hadoop -NameNode HAの仕組み-Hadoop -NameNode HAの仕組み-
Hadoop -NameNode HAの仕組み-
 
pg_trgmと全文検索
pg_trgmと全文検索pg_trgmと全文検索
pg_trgmと全文検索
 
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
 
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#820170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8
 
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
 
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみpg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
 
Geotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 online
Geotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 onlineGeotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 online
Geotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 online
 
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
 
20171220_hbstudy80_pgstrom
20171220_hbstudy80_pgstrom20171220_hbstudy80_pgstrom
20171220_hbstudy80_pgstrom
 
[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...
[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...
[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...
 
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
 

Similaire à 20200424_Writable_Arrow_Fdw

【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [実践編]
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [実践編]【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [実践編]
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [実践編]Hideo Takagi
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するTakahito Tejima
 
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014Shigeru Hanada
 
簡単!AWRをEXCELピボットグラフで分析しよう♪
簡単!AWRをEXCELピボットグラフで分析しよう♪簡単!AWRをEXCELピボットグラフで分析しよう♪
簡単!AWRをEXCELピボットグラフで分析しよう♪Yohei Azekatsu
 
サイバージェント 秋葉原ラボのHBase 活用事例
サイバージェント 秋葉原ラボのHBase 活用事例サイバージェント 秋葉原ラボのHBase 活用事例
サイバージェント 秋葉原ラボのHBase 活用事例cyberagent
 
ARMテンプレートでサーバーレスに挑む!
ARMテンプレートでサーバーレスに挑む!ARMテンプレートでサーバーレスに挑む!
ARMテンプレートでサーバーレスに挑む!Kazumi IWANAGA
 
20190314 PGStrom Arrow_Fdw
20190314 PGStrom Arrow_Fdw20190314 PGStrom Arrow_Fdw
20190314 PGStrom Arrow_FdwKohei KaiGai
 
データサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリデータサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリSatoshi Kitajima
 
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lakede:code 2017
 
Introduction new features in Spark 3.0
Introduction new features in Spark 3.0Introduction new features in Spark 3.0
Introduction new features in Spark 3.0Kazuaki Ishizaki
 
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門Koichi Hamada
 
統計環境R_データ入出力編2016
統計環境R_データ入出力編2016統計環境R_データ入出力編2016
統計環境R_データ入出力編2016wada, kazumi
 
Spark Analytics - スケーラブルな分散処理
Spark Analytics - スケーラブルな分散処理Spark Analytics - スケーラブルな分散処理
Spark Analytics - スケーラブルな分散処理Tusyoshi Matsuzaki
 
Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門Keisuke Fujikawa
 
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 090510分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905Nobuaki Oshiro
 
CloudTrail ログの検索を爆速化してみた
CloudTrail ログの検索を爆速化してみたCloudTrail ログの検索を爆速化してみた
CloudTrail ログの検索を爆速化してみたYohei Azekatsu
 

Similaire à 20200424_Writable_Arrow_Fdw (20)

【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [実践編]
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [実践編]【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [実践編]
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [実践編]
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
 
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
簡単!AWRをEXCELピボットグラフで分析しよう♪
簡単!AWRをEXCELピボットグラフで分析しよう♪簡単!AWRをEXCELピボットグラフで分析しよう♪
簡単!AWRをEXCELピボットグラフで分析しよう♪
 
PostgreSQL 9.5 新機能紹介
PostgreSQL 9.5 新機能紹介PostgreSQL 9.5 新機能紹介
PostgreSQL 9.5 新機能紹介
 
サイバージェント 秋葉原ラボのHBase 活用事例
サイバージェント 秋葉原ラボのHBase 活用事例サイバージェント 秋葉原ラボのHBase 活用事例
サイバージェント 秋葉原ラボのHBase 活用事例
 
ARMテンプレートでサーバーレスに挑む!
ARMテンプレートでサーバーレスに挑む!ARMテンプレートでサーバーレスに挑む!
ARMテンプレートでサーバーレスに挑む!
 
Azure DataLake 大全
Azure DataLake 大全Azure DataLake 大全
Azure DataLake 大全
 
20190314 PGStrom Arrow_Fdw
20190314 PGStrom Arrow_Fdw20190314 PGStrom Arrow_Fdw
20190314 PGStrom Arrow_Fdw
 
データサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリデータサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリ
 
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
 
Introduction new features in Spark 3.0
Introduction new features in Spark 3.0Introduction new features in Spark 3.0
Introduction new features in Spark 3.0
 
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
統計環境R_データ入出力編2016
統計環境R_データ入出力編2016統計環境R_データ入出力編2016
統計環境R_データ入出力編2016
 
Spark Analytics - スケーラブルな分散処理
Spark Analytics - スケーラブルな分散処理Spark Analytics - スケーラブルな分散処理
Spark Analytics - スケーラブルな分散処理
 
Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門
 
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 090510分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905
 
CloudTrail ログの検索を爆速化してみた
CloudTrail ログの検索を爆速化してみたCloudTrail ログの検索を爆速化してみた
CloudTrail ログの検索を爆速化してみた
 

Plus de Kohei KaiGai

20221116_DBTS_PGStrom_History
20221116_DBTS_PGStrom_History20221116_DBTS_PGStrom_History
20221116_DBTS_PGStrom_HistoryKohei KaiGai
 
20221111_JPUG_CustomScan_API
20221111_JPUG_CustomScan_API20221111_JPUG_CustomScan_API
20221111_JPUG_CustomScan_APIKohei KaiGai
 
20210928_pgunconf_hll_count
20210928_pgunconf_hll_count20210928_pgunconf_hll_count
20210928_pgunconf_hll_countKohei KaiGai
 
20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20210301_PGconf_Online_GPU_PostGIS_GiST_Index20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20210301_PGconf_Online_GPU_PostGIS_GiST_IndexKohei KaiGai
 
20201128_OSC_Fukuoka_Online_GPUPostGIS
20201128_OSC_Fukuoka_Online_GPUPostGIS20201128_OSC_Fukuoka_Online_GPUPostGIS
20201128_OSC_Fukuoka_Online_GPUPostGISKohei KaiGai
 
20201006_PGconf_Online_Large_Data_Processing
20201006_PGconf_Online_Large_Data_Processing20201006_PGconf_Online_Large_Data_Processing
20201006_PGconf_Online_Large_Data_ProcessingKohei KaiGai
 
20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_BetaKohei KaiGai
 
20190909_PGconf.ASIA_KaiGai
20190909_PGconf.ASIA_KaiGai20190909_PGconf.ASIA_KaiGai
20190909_PGconf.ASIA_KaiGaiKohei KaiGai
 
20181212 - PGconfASIA - LT - English
20181212 - PGconfASIA - LT - English20181212 - PGconfASIA - LT - English
20181212 - PGconfASIA - LT - EnglishKohei KaiGai
 
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LTKohei KaiGai
 
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
20181211 - PGconf.ASIA - NVMESSD&GPU for BigDataKohei KaiGai
 
20181210 - PGconf.ASIA Unconference
20181210 - PGconf.ASIA Unconference20181210 - PGconf.ASIA Unconference
20181210 - PGconf.ASIA UnconferenceKohei KaiGai
 
20181116 Massive Log Processing using I/O optimized PostgreSQL
20181116 Massive Log Processing using I/O optimized PostgreSQL20181116 Massive Log Processing using I/O optimized PostgreSQL
20181116 Massive Log Processing using I/O optimized PostgreSQLKohei KaiGai
 
20181016_pgconfeu_ssd2gpu_multi
20181016_pgconfeu_ssd2gpu_multi20181016_pgconfeu_ssd2gpu_multi
20181016_pgconfeu_ssd2gpu_multiKohei KaiGai
 
20181025_pgconfeu_lt_gstorefdw
20181025_pgconfeu_lt_gstorefdw20181025_pgconfeu_lt_gstorefdw
20181025_pgconfeu_lt_gstorefdwKohei KaiGai
 
20180920_DBTS_PGStrom_EN
20180920_DBTS_PGStrom_EN20180920_DBTS_PGStrom_EN
20180920_DBTS_PGStrom_ENKohei KaiGai
 
20180920_DBTS_PGStrom_JP
20180920_DBTS_PGStrom_JP20180920_DBTS_PGStrom_JP
20180920_DBTS_PGStrom_JPKohei KaiGai
 

Plus de Kohei KaiGai (17)

20221116_DBTS_PGStrom_History
20221116_DBTS_PGStrom_History20221116_DBTS_PGStrom_History
20221116_DBTS_PGStrom_History
 
20221111_JPUG_CustomScan_API
20221111_JPUG_CustomScan_API20221111_JPUG_CustomScan_API
20221111_JPUG_CustomScan_API
 
20210928_pgunconf_hll_count
20210928_pgunconf_hll_count20210928_pgunconf_hll_count
20210928_pgunconf_hll_count
 
20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20210301_PGconf_Online_GPU_PostGIS_GiST_Index20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20210301_PGconf_Online_GPU_PostGIS_GiST_Index
 
20201128_OSC_Fukuoka_Online_GPUPostGIS
20201128_OSC_Fukuoka_Online_GPUPostGIS20201128_OSC_Fukuoka_Online_GPUPostGIS
20201128_OSC_Fukuoka_Online_GPUPostGIS
 
20201006_PGconf_Online_Large_Data_Processing
20201006_PGconf_Online_Large_Data_Processing20201006_PGconf_Online_Large_Data_Processing
20201006_PGconf_Online_Large_Data_Processing
 
20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta
 
20190909_PGconf.ASIA_KaiGai
20190909_PGconf.ASIA_KaiGai20190909_PGconf.ASIA_KaiGai
20190909_PGconf.ASIA_KaiGai
 
20181212 - PGconfASIA - LT - English
20181212 - PGconfASIA - LT - English20181212 - PGconfASIA - LT - English
20181212 - PGconfASIA - LT - English
 
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT
 
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
 
20181210 - PGconf.ASIA Unconference
20181210 - PGconf.ASIA Unconference20181210 - PGconf.ASIA Unconference
20181210 - PGconf.ASIA Unconference
 
20181116 Massive Log Processing using I/O optimized PostgreSQL
20181116 Massive Log Processing using I/O optimized PostgreSQL20181116 Massive Log Processing using I/O optimized PostgreSQL
20181116 Massive Log Processing using I/O optimized PostgreSQL
 
20181016_pgconfeu_ssd2gpu_multi
20181016_pgconfeu_ssd2gpu_multi20181016_pgconfeu_ssd2gpu_multi
20181016_pgconfeu_ssd2gpu_multi
 
20181025_pgconfeu_lt_gstorefdw
20181025_pgconfeu_lt_gstorefdw20181025_pgconfeu_lt_gstorefdw
20181025_pgconfeu_lt_gstorefdw
 
20180920_DBTS_PGStrom_EN
20180920_DBTS_PGStrom_EN20180920_DBTS_PGStrom_EN
20180920_DBTS_PGStrom_EN
 
20180920_DBTS_PGStrom_JP
20180920_DBTS_PGStrom_JP20180920_DBTS_PGStrom_JP
20180920_DBTS_PGStrom_JP
 

20200424_Writable_Arrow_Fdw

  • 1. Writable Arrow_Fdw HeteroDB,Inc Chief Architect & CEO KaiGai Kohei <kaigai@heterodb.com>
  • 2. Arrowって何よ?(1/3) ▌Apache Arrow 形式  構造化データを列形式で保存・交換するためのデータ形式。  “ビッグデータ処理” 向けデータ交換の形式として広く利用されつつある。 ✓Spark、Impala、Drill、Python (PyArrow)、R、etc...  整数、実数、日付時刻、文字列など基本的なデータ型を定義。 NVIDIA GPU PostgreSQL / PG-Strom PostgreSQL Unconference Apr-20202
  • 3. Arrowって何よ?(2/3) ▌Apache Arrow形式の内部構造  Header • “ARROW1¥0¥0” という文字列。  Schema Definition • 列定義情報。データ型、列名、列番号など。  Record Batch • 一定の行数のデータを列形式で配置したブロック • 例えば、N = 100万行で (Int32, Float64) というデータ 定義なら、Int32が100万個並び、次いで Float64 が 100万個並んでこの領域に書き込まれる。  Dictionary Batch • 辞書圧縮のための領域。 1 = 東京都、2 = 神奈川県、3 = 大阪府、、、 • 処理系がきちんと対応していたら褒めてあげて。  Footer • RecordBatchやDictionaryBatchのオフセット、サイズな どの情報を保持する。 Header “ARROW1¥0¥0” Schema Definition DictionaryBatch-0 RecordBatch-0 RecordBatch-k Footer • DictionaryBatch[0] (offset, size) • RecordBatch[0] (offset, size) : • RecordBatch[k] (offset, size) Apache Arrow ファイル PostgreSQL Unconference Apr-20203
  • 4. Arrowって何よ?(3/3)-参考:列データと可変長データ ▌詳しく知りたい方は、@stou さんの発表資料をご覧ください  Apache Arrow 東京ミートアップ https://www.slideshare.net/kou/apachearrowtokyomeetup2018  Apache Arrowの最新情報(2019年9月版) https://www.clear-code.com/blog/2019/9/30.html 列A (Int32) - nullmap 列A (Int32) - values 列B (Utf8) - nullmap 列B (Utf8) - offset 列B (Utf8) - values RecordBatch 1101101 12 34 0 56 78 0 89 列A (Int32) - nullmap 列A (Int32) - values 1101101 0 5 8 8 13 17 17 列B (Utf8) - nullmap 列B (Utf8) - offset 列B (Utf8) - values ‘R’ ‘a’ ‘m’ ‘e’ ‘n’ ‘I’ ‘c’ ‘e’ ‘C’ ‘u’ ‘r’ 21 文字列長 = offset[i+1] - offset[i] PostgreSQL Unconference Apr-20204
  • 5. Arrow_Fdwって?(1/2) PostgreSQL Table Foreign Table file_fdw Foreign Table Arrow_fdw CSVファイル Apache Arrow ファイル CSV➔Heap変換 ArrowHeap変換 Apache Arrow形式のファイルを、 あたかも PostgreSQL のテーブル であるかのように読み書きする ためのドライバ機能 PostgreSQL Unconference Apr-20205
  • 6. Arrow_Fdwって?(2/2) ファイルをコピーするだけでデータのインポートが完了する。 データ ソース Apache Arrow INSERT INTO ... COPY FROM ... cp -f /path/from/source /path/to/destination • バイナリ互換データ形式 • 非トランザクショナル 従来の方法 • テキスト ➔ バイナリ変換 • トランザクションログにも書き出し PostgreSQL Unconference Apr-20206
  • 7. ログ収集デーモン: 想定利用シーン:IoT/M2Mログの集計・解析処理 PostgreSQL Unconference Apr-20207 Manufacturing Logistics Mobile Home electronics なぜApache Arrowか?  分析のためにDBへデータを取り込む時間が馬鹿にならない。  列データ形式なので、プロセッサ・I/Oの使用効率が高い。 JBoF: Just Bunch of Flash NVME-over-Fabric (RDMA) DB管理者 BIツール(可視化) 機械学習アプリケーション (E.g, 異常検知など) 共通データ フレーム PG-Strom
  • 8. Apache Arrowファイルの作り方 ▌バイナリをゴニョる。  KaiGaiの俺メモ:Dive into Apache Arrow(その1) https://kaigai.hatenablog.com/entry/2019/01/14/144040 ▌Pythonなどでライブラリを利用  例えば、PyArrowのIPCモジュールを使って Data Frame を書き出す、など。 ▌pg2arrow / mysql2arrow コマンド  PostgreSQLやMySQLで実行したクエリの結果を Arrow 形式で書き出す ためのコマンド。  使用例) % pg2arrow -h localhost -d pgsql ¥ -c ‘SELECT * FROM hoge’ ¥ -o /dev/shm/hoge.arrow ▌書き込み可能 Arrow_Fdw 外部テーブル  Arrow_FdwへのINSERTをRecordBatchの追加と捉えて、外部テーブルの背後に 存在する Apache Arrow ファイルへ追記するための機能。 PostgreSQL Unconference Apr-20208
  • 9. Writable Arrow_Fdw 外部テーブルを定義する ▌ポイント ① 外部テーブルのバックエンドに指定するファイルは1個だけ ② writableオプションに ‘true’ を指定する。 ▌定義例 =# CREATE FOREIGN TABLE ft ( id int, x real, y real, z real ) SERVER arrow_fdw OPTIONS (file '/dev/shm/ft.arrow', writable 'true'); CREATE FOREIGN TABLE PostgreSQL Unconference Apr-20209
  • 10. Writable Arrow_Fdw 外部テーブルにINSERTする =# INSERT INTO ft (SELECT x, pgstrom.random_float(1, -1000, 1000), pgstrom.random_float(1, -1000, 1000), pgstrom.random_float(1, -1000, 1000) FROM generate_series(1,500) x); =# SELECT * FROM ft limit 10; id | x | y | z ----+------------+------------+------------ 1 | -796.3072 | -980.48663 | 854.43024 2 | -167.9222 | 860.1901 | 158.72714 3 | 257.10052 | 835.6227 | 536.2602 4 | 34.197735 | 328.64984 | 427.6224 5 | -713.2156 | 27.131866 | 156.22997 6 | -271.762 | 20.40196 | 526.8236 7 | -251.07478 | -567.57733 | 623.1641 8 | -936.90576 | -843.47284 | -65.439545 9 | -908.04553 | 426.0469 | -399.97433 10 | -549.8333 | 651.3198 | 792.652 (10 rows) PostgreSQL Unconference Apr-202010
  • 11. 生成された Apache Arrow ファイルを確認する $ python3 >>> import pyarrow as pa >>> f = pa.ipc.open_file('/dev/shm/ft.arrow') >>> f.schema id: int32 x: float y: float z: float >>> f.get_record_batch(0).to_pandas() id x y z 0 1 -796.307190 -980.486633 854.430237 1 2 -167.922195 860.190125 158.727142 2 3 257.100525 835.622681 536.260193 3 4 34.197735 328.649841 427.622406 4 5 -713.215576 27.131866 156.229965 .. ... ... ... ... 495 496 759.468506 866.489990 -883.853699 496 497 997.161987 70.487015 -544.648804 497 498 -883.911377 647.152466 -504.539886 498 499 -803.238892 -566.325012 -612.984070 499 500 40.926250 -209.205719 911.291443 [500 rows x 4 columns] 当然だが、SQLで 確認した結果と同じ PostgreSQL Unconference Apr-202011
  • 12. Arrowファイルへの追記メカニズム Header “ARROW1¥0¥0” Schema Definition DictionaryBatch-0 RecordBatch-0 RecordBatch-k Footer • DictionaryBatch[0] • RecordBatch[0] : • RecordBatch[k] Arrowファイル(追記前) Header “ARROW1¥0¥0” Schema Definition DictionaryBatch-0 RecordBatch-0 RecordBatch-k Footer (new revision) • DictionaryBatch[0] • RecordBatch[0] : • RecordBatch[k] • RecordBatch[k+1] Arrowファイル(追記後) RecordBatch-(k+1) オリジナルの フッターを 上書きする 1回の INSERT で 書き込まれた内容 PostgreSQL Unconference Apr-202012
  • 13. Arrowファイルへの追記メカニズム Header “ARROW1¥0¥0” Schema Definition DictionaryBatch-0 RecordBatch-0 RecordBatch-k Footer • DictionaryBatch[0] • RecordBatch[0] : • RecordBatch[k] Arrowファイル(追記前) Header “ARROW1¥0¥0” Schema Definition DictionaryBatch-0 RecordBatch-0 RecordBatch-k Footer (new revision) • DictionaryBatch[0] • RecordBatch[0] : • RecordBatch[k] • RecordBatch[k+1] Arrowファイル(追記後) RecordBatch-(k+1) オリジナルの フッターを 上書きする Footer • DictionaryBatch[0] • RecordBatch[0] : • RecordBatch[k] 元のフッタのイメージと オフセット、サイズを バックアップしておけば、 ロールバックも可能 PostgreSQL Unconference Apr-202013
  • 14. ROLLBACKもできるYO!! postgres=# INSERT INTO ft VALUES (1,'Tokyo'),(2,'Osaka'); INSERT 0 2 postgres=# BEGIN; BEGIN postgres=# INSERT INTO ft VALUES (3,'Nagoya'),(4,'Kyoto'); INSERT 0 2 postgres=# SELECT * FROM ft; id | x ----+-------- 1 | Tokyo 2 | Osaka 3 | Nagoya 4 | Kyoto (4 rows) PostgreSQL Unconference Apr-202014
  • 15. ROLLBACKもできるYO!! postgres=# SAVEPOINT sv; SAVEPOINT postgres=# INSERT INTO ft VALUES (5, 'Yokohama'); INSERT 0 1 postgres=# SELECT * FROM ft; id | x ----+---------- 1 | Tokyo 2 | Osaka 3 | Nagoya 4 | Kyoto 5 | Yokohama (5 rows) PostgreSQL Unconference Apr-202015
  • 16. ROLLBACKもできるYO!! postgres=# ROLLBACK TO sv; ROLLBACK postgres=# SELECT * FROM ft; id | x ----+-------- 1 | Tokyo 2 | Osaka 3 | Nagoya 4 | Kyoto (4 rows) postgres=# ABORT; ROLLBACK postgres=# SELECT * FROM ft; id | x ----+------- 1 | Tokyo 2 | Osaka (2 rows) PostgreSQL Unconference Apr-202016
  • 17. Writable Arrow_Fdwの制限事項 ▌INSERTのみサポート  UPDATE / DELETEはできません。  そもそも Apache Arrow はそういうファイル形式ではありません。 ▌同時に書き込みできるのは1トランザクションのみ  バルクロード以外の用途で使うとは思っていないので…。 ▌データを消去したい時は TRUNCATE で消去した後、再ロード  と、思ったら、PostgreSQL v13では外部テーブルの TRUNCATE が入らなかったので、当面の間は代わりに↓を。。。 pgstrom.arrow_fdw_truncate(regclass) PostgreSQL Unconference Apr-202017
  • 18. 関連情報 ▌リポジトリ  https://github.com/heterodb/pg-strom ※ Arrow_FdwはPG-Stromの機能の一つとして実装されています ▌ドキュメント  PG-Strom公式ドキュメント:列指向データストア (Arrow_Fdw) http://heterodb.github.io/pg-strom/ja/arrow_fdw/ ▌パッケージの入手  HeteroDB Software Distribution Center https://heterodb.github.io/swdc/ PostgreSQL Unconference Apr-202018