Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Geo Parquetの仕様を追ってみた
Search
KentarouSuzuki
June 28, 2022
Technology
0
730
Geo Parquetの仕様を追ってみた
現在、GitHubで議論されているGeoParquetがv0.4.0まで仕様が公開されたので、どのような仕様になっているのか、追ってみました。
KentarouSuzuki
June 28, 2022
Tweet
Share
More Decks by KentarouSuzuki
See All by KentarouSuzuki
Discrete Global Grid System(DGGS) について調べた
kentarousuzuki
0
620
空間データのためのRツリー
kentarousuzuki
0
1.1k
Magnet Pattern と Method Overload
kentarousuzuki
0
380
shapelessと代数的データ型
kentarousuzuki
0
350
Other Decks in Technology
See All in Technology
TS-S205_昨年対比2倍以上の機能追加を実現するデータ基盤プロジェクトでのAI活用について
kaz3284
1
210
AIのグローバルトレンド2025 #scrummikawa / global ai trend
kyonmm
PRO
1
300
OCI Oracle Database Services新機能アップデート(2025/06-2025/08)
oracle4engineer
PRO
0
170
なぜテストマネージャの視点が 必要なのか? 〜 一歩先へ進むために 〜
moritamasami
0
230
RSCの時代にReactとフレームワークの境界を探る
uhyo
10
3.5k
複数サービスを支えるマルチテナント型Batch MLプラットフォーム
lycorptech_jp
PRO
1
820
【実演版】カンファレンス登壇者・スタッフにこそ知ってほしいマイクの使い方 / 大吉祥寺.pm 2025
arthur1
1
890
20250912_RPALT_データを集める→とっ散らかる問題_Obsidian紹介
ratsbane666
0
100
Autonomous Database - Dedicated 技術詳細 / adb-d_technical_detail_jp
oracle4engineer
PRO
4
10k
Unlocking the Power of AI Agents with LINE Bot MCP Server
linedevth
0
110
AWSで始める実践Dagster入門
kitagawaz
1
680
AIエージェント開発用SDKとローカルLLMをLINE Botと組み合わせてみた / LINEを使ったLT大会 #14
you
PRO
0
130
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
26
1.9k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Site-Speed That Sticks
csswizardry
10
820
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
The Pragmatic Product Professional
lauravandoore
36
6.9k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
850
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Transcript
Geo Parquetの仕様について追ってみた 1
本日のお話 1. Geo Parquetとは? 2. v0.4.0 時点で決まっている仕様 3. Spatial Index
2
Geo Parquetとは? https://github.com/opengeospatial/geoparquet Geo Parquetとは? 3
ベクタ形式の地理情報データをApach Parquetで扱えるようにした仕様 バージョン 2022年3月9日にv0.1.0が公開 2022年6月28日現在、v0.4.0まで公開されている Geo Parquetとは? 4
代表的な参加会社・団体 azavea CARTO FORSQUARE GeoPandas Microsoft Unfolded Geo Parquetとは? 5
実装 名前 言語 ライブラリ側の対応バージョン GeoPandas Python 0.8.0 sfarrow R GDAL/OGR
C++ 3.5 GeoParquet.jl Julia geoarrow R Parquet-WASM WASM Geo Parquetとは? 6
Motivation 大量のデータをさばくサービスが普及してきている今日の状況で、Parquetといった列志向の データフォーマットでも地理情報を使いたいニーズが増えてきた。 しかし、現状ではParquetで地理情報を効率良く蓄積する方法が定まっていない。 Geo Parquetとは? 7
ゴール Establish a great geospatial format for workflows that excel
with columnar data Introduce columnar data formats to the geospatial world Enable interoperability among cloud data warehouses Persist geospatial data from Apache Arrow (GeoParquetリポジトリのREADMEより) Geo Parquetとは? 8
v0.4.0 時点で決まっている仕様 v0.4.0 時点で決まっている仕様 9
1.地理情報のフォーマット GeoParquetでは地理情報を表すフォーマットはWKB (Well-known binaly) と呼ばれるフォー マットを使い、Parquetの型は BYTE_ARRAY を使用する。 そして、このWKBをParquetのファイルメタデータの primary_column
で指定した、カラム に格納する。 v0.4.0 時点で決まっている仕様 10
また、地理情報の種類としては以下のものをサポートしている。 Point LineString Polygon MultiPoint MultiLineString MultiPolygon GeometoryCollection v0.4.0 時点で決まっている仕様
11
2.座標参照系 カラムのメタデータにはCRS(Coodinate Reference System, 座標参照系)を設定することがで きる。 この時、CRSのフォーマットはPROJJSONと呼ばれるフォーマットで示す。 もしも、この値がなかった場合は、デフォルトでCRS84が選択される。 v0.4.0 時点で決まっている仕様
12
v0.4.0 時点で決まっている仕様 13
座標参照系についてちょっと説明 v0.4.0 時点で決まっている仕様 14
地理情報の世界では、基本的に情報は座標で表す。 例) EASTオフィスの位置: POINT(139.7035426 35.6655141) v0.4.0 時点で決まっている仕様 15
この時、座標の表し方はたくさんあり、用途によって使い分ける。 それを表したのが、座標参照系。 例) EASTオフィスの座標を表す場合 GPSデータ: POINT(139.7035426 35.6655141) WEB上の地図, 厳密さが要求されていない距離計算: POINT(15551727.2242484
4254693.69910994) v0.4.0 時点で決まっている仕様 16
3.Bounding Box v0.4.0 時点で決まっている仕様 17
GeoParquetでは、地理情報を効率的に読み込むために、地理情報を表すカラムのメタデータ にBounding Boxを設定している。 Bounding Box(Bbox)とは? 選択した、Point or LineString or Polygonを全てを含む最小の長方形。
例)山手線の駅とBboxの例 v0.4.0 時点で決まっている仕様 18
このBounding Boxが次に説明するSpatialIndexへとつながります。 v0.4.0 時点で決まっている仕様 19
Spatial Index Spatial Index 20
Spatial Index(空間インデックス)とは、地理情報の検索を高速にするためのインデック ス。 例えば、PostgreSQLを拡張したPostGISでは、空間インデックスをR-Treeを使って実現して いる。 Spatial Index 21
GeoParquetでは、v0.5.0で空間インデックスの実現方法を発表できるように議論が進められ ている。 GitHubのIssue (https://github.com/opengeospatial/geoparquet/issues/13) Spatial Index 22
現在、Spatial Indexの有力な実装方法の一つは、先ほど取り上げたBounding Boxを使って実 現する。 Spatial Index 23
Parquetでは、右の図のようにいくつか の行をまとめたRow GropとPageがあ る。 この時、行ごとのBounding Boxは新し くX(経度)とY(緯度)の値を格納する 画像はParquetのGitHubより引用 Spatial Index
24
表で表すイメージはこんな感じ Name geom MBR.x MBR.y hoge WKB [135, 137] [34,
36] fuga WKB [136, 139] [37, 40] MBR.xとMBR.yが行ごとに作成されたBounding Box Spatial Index 25
行ごとにでBounding Boxを作成し、 Row GroupとPage単位でさらに Bounding Boxを作成する。 イメージ的にはこんな感じ 1. 黒: ファイル単位のB
Box 2. 青: Row Group単位のB Box 3. 赤: Page単位のB Box 画像はWikipediaのR-Treeより引用 Spatial Index 26
CARTOがこちらの方法をSparkのUDFsで定義して、位置の絞り込みを実装したところ、 10minかかっていたクエリが2secにまで短縮した...? https://github.com/opengeospatial/geoparquet/issues/13#issuecomment-1097993976 実装はCartoDB/analytics-toolbox-databricksで公開されています。 Spatial Index 27
他にも、空間充填曲線やParquetで新しく空間データを定義してあげる方法もあげられている ようですが、まだ絶賛議論中っぽそうです。 Spatial Index 28