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
810
0
Share
Geo Parquetの仕様を追ってみた
現在、GitHubで議論されているGeoParquetがv0.4.0まで仕様が公開されたので、どのような仕様になっているのか、追ってみました。
KentarouSuzuki
June 28, 2022
More Decks by KentarouSuzuki
See All by KentarouSuzuki
Discrete Global Grid System(DGGS) について調べた
kentarousuzuki
0
800
空間データのためのRツリー
kentarousuzuki
0
1.3k
Magnet Pattern と Method Overload
kentarousuzuki
0
400
shapelessと代数的データ型
kentarousuzuki
0
370
Other Decks in Technology
See All in Technology
CloudTrail を見つめ直してみる
kazzpapa3
1
130
[Oracle TechNight#99] 生成AI時代のAI/ML入門 ~ AIとオラクルデータベースの関係 (前半)
oracle4engineer
PRO
1
100
20年前の「OSS革命」に学ぶ AI時代の生存戦略
samakada
0
500
コミュニティ・勉強会を作るのは目的じゃない
ohmori_yusuke
0
270
バイブコーディングで3倍早く⚪⚪を作ってみた
samakada
0
200
PyCon JPに学ぶ『決め方の決め方』: TechLead Conference 2026
terapyon
1
250
GitHub Copilot Dev Days
tomokusaba
0
110
「SaaSの次の時代」に重要性を増すステークホルダーマネジメントの要諦 ~解像度を圧倒的に高めPdMの価値を最大化させる方法~
kakehashi
PRO
3
3k
AIが自律的に働く時代へ Amazon Quick で実現するAIエージェント紹介
koheiyoshikawa
0
150
国内外の生成AIセキュリティの最新動向 & AIガードレール製品「chakoshi」のご紹介 / Latest Trends in Generative AI Security (Domestic & International) & Introduction to AI Guardrail Product "chakoshi"
nttcom
4
1.6k
AIが盛んな時代に 技術記事を書き始めて起きた私の中での小さな変化
peintangos
0
310
No Types Needed, Just Callable Method Check
dak2
1
2.3k
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
9.8k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
470
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
250
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
How to make the Groovebox
asonas
2
2.1k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
220
How to Ace a Technical Interview
jacobian
281
24k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
110
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
180
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