3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

geoparquet-io を使ったGeoParquet入門

3
Posted at

GeoParquetとは何か

まずGeoParquet ですが、Apache Parquet ファイルに地理空間ベクトルデータを保存するための標準化された方式です。

image.png
https://geoparquet.org/

なお、Apache Parquet は、効率的なデータの保存と取得を目的として設計された、オープンソースの列指向データファイル形式です。 複雑なデータを大量に処理するための高性能な圧縮およびエンコード方式を備えており、多くのプログラミング言語や分析ツールでサポートされています。

image.png
https://parquet.apache.org/

他のファイル形式と比べて何が良いのか

GeoParquet以外で利用されるジオなファイル形式としては、以下のようなファイル形式があり、あえてデメリットを記述してみます。

フォーマット あえてのデメリット
Shapefile 2GBのサイズ制限、複数のファイルに分かれる
GeoJSON テキストベース(処理が遅く、データ量が多い)、ストリーミング非対応
GeoPackage クラウド向けに最適化されていない

上述したファイル形式と比べて、GeoParquetは以下の優位な特徴を持ちます。

  • サイズ制限なし
    • 数十億のフィーチャーを処理可能
  • 高速クエリ
    • 列指向ストレージ、述語プッシュダウン(Predicate Pushdown)
  • クラウドネイティブ
    • S3、GCS、Azureからの部分読み取り
  • 豊富なデータ型
    • 複雑なデータ型の完全なサポート
  • 圧縮
    • ZSTD、LZ4などを用いた効率的な保存

仕様

geometry列

GeoParquetには、空間データを格納する1つ以上のgeometry列が含まれています。

以下の形式がサポートされているようです。これだけあれば、特に困らないはずです。

  • Points, LineStrings, Polygons
  • Multi-geometries (MultiPoint, MultiLineString, MultiPolygon)
  • GeometryCollections

メタデータ

GeoParquetは、key-value型のメタデータにgeokeyを追加します。
こんな感じです。

{
  "version": "1.1.0",
  "primary_column": "geometry",
  "columns": {
    "geometry": {
      "encoding": "WKB",
      "geometry_types": ["Polygon", "MultiPolygon"],
      "crs": { ... },
      "covering": { ... }
    }
  }
}

このメタデータにより、geometryの解釈方法をファイルを利用するツール側に提供します。

試しにOverture Mapsのbuildingで確認してみます。
データは以下からdownloadします。
https://browser.moregeo.it/external/stac.overturemaps.org/2026-08-19.0/buildings/building/00000/00000.json?.asset=asset-aws

メタデータはduckdbのparquet_kv_metadata()で確認します。

duckdb -c ".mode line" -c "SELECT key, decode(value) AS value FROM parquet_kv_metadata('part-00000-66390f89-3dae-58d7-a8f9-dd8538b7141a-c000.zstd.parquet');"

すると、以下が出力されます。

{
  "version": "1.1.0",
  "primary_column": "geometry",
  "columns": {
    "geometry": {
      "encoding": "WKB",
      "geometry_types": [
        "MultiPolygon",
        "Polygon"
      ],
      "bbox": [
        -180.0,
        -84.29460906982422,
        -86.84698486328125,
        14.345832824707031
      ],
      "covering": {
        "bbox": {
          "xmin": ["bbox", "xmin"],
          "ymin": ["bbox", "ymin"],
          "xmax": ["bbox", "xmax"],
          "ymax": ["bbox", "ymax"]
        }
      }
    }
  }
}

座標系(CRS)

GeoParquetでは、座標参照系を定義するためにPROJJSONを使用しているようです。なので、使いたいCRSで定義することができます。

bbox列

GeoParquetでは、事前に計算されたbbox(バウンディングボックス)がbbox列に格納されています。他のファイル形式にはない(はずの)特徴です。

試しに先のデータで確認してみます。

duckdb -c ".mode line" -c "SELECT bbox FROM 'part-00000-66390f89-3dae-58d7-a8f9-dd8538b7141a-c000.zstd.parquet' LIMIT 10;"

すると以下が出力されます。
しっかりレコードごとにbboxの情報が入っています。

bbox = {'xmin': -179.96853637695312, 'xmax': -179.96385192871094, 'ymin': -77.9577407836914, 'ymax': -77.95699310302734}
bbox = {'xmin': -177.90383911132812, 'xmax': -177.9037628173828, 'ymin': -29.251535415649414, 'ymax': -29.251474380493164}
bbox = {'xmin': -177.90599060058594, 'xmax': -177.9058837890625, 'ymin': -29.252044677734375, 'ymax': -29.251943588256836}
bbox = {'xmin': -177.89398193359375, 'xmax': -177.89389038085938, 'ymin': -29.276037216186523, 'ymax': -29.275997161865234}
bbox = {'xmin': -177.9291534423828, 'xmax': -177.9290771484375, 'ymin': -29.243871688842773, 'ymax': -29.243837356567383}
bbox = {'xmin': -177.9291534423828, 'xmax': -177.9290313720703, 'ymin': -29.24364471435547, 'ymax': -29.243497848510742}
bbox = {'xmin': -177.92898559570312, 'xmax': -177.92892456054688, 'ymin': -29.24506187438965, 'ymax': -29.244983673095703}
bbox = {'xmin': -177.92909240722656, 'xmax': -177.9289093017578, 'ymin': -29.24496841430664, 'ymax': -29.244903564453125}
bbox = {'xmin': -177.92825317382812, 'xmax': -177.92811584472656, 'ymin': -29.245588302612305, 'ymax': -29.24551773071289}
bbox = {'xmin': -177.92794799804688, 'xmax': -177.9277801513672, 'ymin': -29.246417999267578, 'ymax': -29.246337890625}

事前にbboxを計算し、列に格納しておくことで、計算負荷の高いジオメトリ演算を行う前にbboxの重複を確認することができます。
これにより、高速な空間フィルタリングが可能になるわけです。

メタデータの取り扱い

GeoParquet 1.1 以降の covering メタデータは、クエリエンジンに対して、フィルタリングに bbox 列をどのように使用すべきかを指示するようです。

先のデータでも、以下のようにメタデータを持っていました。

"covering": {
  "bbox": {
    "xmin": ["bbox", "xmin"],
    "ymin": ["bbox", "ymin"],
    "xmax": ["bbox", "xmax"],
    "ymax": ["bbox", "ymax"]
  }
}

Row Groups(行グループ)

Parquetファイルは、行グループ(行の塊)に分割されています。行グループ内の空間的な順序付けにより、近接するフィーチャがまとめて保持されるため、クエリのパフォーマンスが向上します。
つまり、位置関係を考慮した並び順にすることが重要ということです。

RowGroupsごとの統計情報を見てみます。

duckdb -c ".mode box" -c "SELECT
  row_group_id,
  row_group_num_rows,
  path_in_schema,
  stats_min_value,
  stats_max_value,
  stats_null_count,
  total_compressed_size
FROM parquet_metadata('part-00000-66390f89-3dae-58d7-a8f9-dd8538b7141a-c000.zstd.parquet')
WHERE path_in_schema LIKE 'bbox%'
  AND row_group_id < 5
ORDER BY row_group_id, path_in_schema;"

結果です。
Row Groupsごとにbbox情報を持てています。

┌──────────────┬────────────────────┬────────────────┬─────────────────────┬─────────────────────┬──────────────────┬───────────────────────┐
│ row_group_id │ row_group_num_rows │ path_in_schema │   stats_min_value   │   stats_max_value   │ stats_null_count │ total_compressed_size │
├──────────────┼────────────────────┼────────────────┼─────────────────────┼─────────────────────┼──────────────────┼───────────────────────┤
│ 0            │ 17954              │ bbox, xmax     │ -179.96385192871094 │ -175.18429565429688 │ 0                │ 40421                 │
│ 0            │ 17954              │ bbox, xmin     │ -179.96853637695312 │ -175.18446350097656 │ 0                │ 40546                 │
│ 0            │ 17954              │ bbox, ymax     │ -77.95699310302734  │ -21.13321304321289  │ 0                │ 62638                 │
│ 0            │ 17954              │ bbox, ymin     │ -77.9577407836914   │ -21.133363723754883 │ 0                │ 62780                 │
│ 1            │ 16433              │ bbox, xmax     │ -179.99989318847656 │ -175.19676208496094 │ 0                │ 47998                 │
│ 1            │ 16433              │ bbox, xmin     │ -180.0              │ -175.1969451904297  │ 0                │ 47942                 │
│ 1            │ 16433              │ bbox, ymax     │ -21.133319854736328 │ -14.348917007446289 │ 0                │ 59742                 │
│ 1            │ 16433              │ bbox, ymin     │ -21.13348388671875  │ -14.348978996276855 │ 0                │ 59845                 │
│ 2            │ 16906              │ bbox, xmax     │ -175.184326171875   │ -159.77847290039062 │ 0                │ 39970                 │
│ 2            │ 16906              │ bbox, xmin     │ -175.1845245361328  │ -159.7786407470703  │ 0                │ 39891                 │
│ 2            │ 16906              │ bbox, ymax     │ -83.64997100830078  │ -21.130237579345703 │ 0                │ 63164                 │
│ 2            │ 16906              │ bbox, ymin     │ -83.65001678466797  │ -21.130550384521484 │ 0                │ 63000                 │
│ 3            │ 20133              │ bbox, xmax     │ -175.16015625       │ -159.7785186767578  │ 0                │ 57955                 │
│ 3            │ 20133              │ bbox, xmin     │ -175.1603546142578  │ -159.7786407470703  │ 0                │ 57794                 │
│ 3            │ 20133              │ bbox, ymax     │ -21.13045310974121  │ -14.34656047821045  │ 0                │ 75497                 │
│ 3            │ 20133              │ bbox, ymin     │ -21.130571365356445 │ -14.346781730651855 │ 0                │ 75115                 │
│ 4            │ 25803              │ bbox, xmax     │ -178.181396484375   │ -171.7863311767578  │ 0                │ 71617                 │
│ 4            │ 25803              │ bbox, xmin     │ -178.18148803710938 │ -171.78665161132812 │ 0                │ 71584                 │
│ 4            │ 25803              │ bbox, ymax     │ -14.345525741577148 │ -13.80778694152832  │ 0                │ 95124                 │
│ 4            │ 25803              │ bbox, ymin     │ -14.345602989196777 │ -13.807939529418945 │ 0                │ 95478                 │
└──────────────┴────────────────────┴────────────────┴─────────────────────┴─────────────────────┴──────────────────┴───────────────────────┘

結局のところ、GeoParquetをいつ使用すればよいのか

GeoParquet を使用すべき場合

  • ファイルサイズが数百MBを超える場合
  • クラウドネイティブなアクセスパターンが必要な場合
  • 分析やクエリが主なユースケースである場合
  • データパイプラインを構築している場合
  • 効率的な圧縮が必要な場合

他の形式を検討する場合

  • 従来のGISツールとの相互運用性が不可欠な場合(Shapefileを使用)
  • データ量が少なく、簡潔さが重視される場合(GeoJSONを使用)
  • 編集ワークフローが主な用途である場合(GeoPackageを使用)

geoparquet-io

geoparquet-io は、DuckDBおよびPyArrowを基盤とした、GeoParquetファイル向けの高速I/Oおよび変換ツールです。

image.png
https://geoparquet.io/

geoparquet-io を使うと、GeoParquet ファイルの作成と最適化を行うことができるようです。

タスク gpio コマンド
他の形式から変換する gpio convert
bbox列を追加する gpio add bbox
空間的な順序を適用する gpio sort hilbert
ベストプラクティスの妥当性を確認する gpio check all
大容量ファイルの分割 gpio partition

使ってみましょう。

CLIとPythonからの利用が選べますが、今回はCLIでやってみます。

なお、利用するPCは以下です。

  • 機種:MacBook Air(Mac14,2)
  • チップ:Apple M2

まずはinstall

uvがinstallしてあるのは前提とします。

uv tool install geoparquet-io

読み書きしてみよう

読み書きしてみるデータとして、国土数値情報ダウンロードサイトから「行政区域データ」の全国(2026年)のShapeデータを利用します。
https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-2026.html

GeoParquetに変換する

convertを使用することで変換できます。

$ gpio convert N03-20260101.shp N03-20260101.parquet

Converting N03-20260101.shp...
Done in 8.0s
Output: N03-20260101.parquet (173.45 MB)
✓ Output passes GeoParquet validation (metadata checks)

Shapefileだった時のファイルサイズと比較してみると、だいぶサイズが小さくなっています。

image.png

ファイルのプロパティを確認する

inspectを使用して、任意のGeoParquetのプロパティを確認できます。

$ gpio inspect N03-20260101.parquet

📄 N03-20260101.parquet (173.45 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rows: 125,130
Row Groups: 2
Compression: ZSTD
Parquet Type: No Parquet geo logical type
GeoParquet Version: 1.1.0
CRS: EPSG:6668
Geometry Types: Polygon
Bbox: [122.932606, 20.422746, 153.986675, 45.557243]

Columns (9):
┏━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Name    ┃ Type                                                       ┃
┡━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ OGC_FID │ BIGINT                                                     │
│ N03_001 │ VARCHAR                                                    │
│ N03_002 │ VARCHAR                                                    │
│ N03_003 │ VARCHAR                                                    │
│ N03_004 │ VARCHAR                                                    │
│ N03_005 │ VARCHAR                                                    │
│ N03_007 │ VARCHAR                                                    │
│ geom 🌍 │ GEOMETRY('EPSG:6668')                                      │
│ bbox    │ STRUCT(xmin DOUBLE, ymin DOUBLE, xmax DOUBLE, ymax DOUBLE) │
└─────────┴────────────────────────────────────────────────────────────┘

なおサブコマンドの head をつけると、任意の先頭行をプレビューすることができます。

$ gpio inspect head N03-20260101.parquet 5

📄 N03-20260101.parquet (173.45 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rows: 125,130
Row Groups: 2
Compression: ZSTD
Parquet Type: No Parquet geo logical type
GeoParquet Version: 1.1.0
CRS: EPSG:6668
Geometry Types: Polygon
Bbox: [122.932606, 20.422746, 153.986675, 45.557243]

Columns (9):
┏━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Name    ┃ Type                                                       ┃
┡━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ OGC_FID │ BIGINT                                                     │
│ N03_001 │ VARCHAR                                                    │
│ N03_002 │ VARCHAR                                                    │
│ N03_003 │ VARCHAR                                                    │
│ N03_004 │ VARCHAR                                                    │
│ N03_005 │ VARCHAR                                                    │
│ N03_007 │ VARCHAR                                                    │
│ geom 🌍 │ GEOMETRY('EPSG:6668')                                      │
│ bbox    │ STRUCT(xmin DOUBLE, ymin DOUBLE, xmax DOUBLE, ymax DOUBLE) │
└─────────┴────────────────────────────────────────────────────────────┘

Preview (first 5 rows):
┏━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ OGC_FID ┃ N03_001 ┃ N03_002 ┃ N03_003  ┃ N03_004 ┃ N03_005 ┃ N03_007 ┃ geom                                          ┃
┡━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ 124662  │ 沖縄県  │ NULL    │ 八重山郡 │ 竹富町  │ NULL    │ 47381   │ POLYGON ((123.56962 24.196531946, 123.5696... │
│ 124660  │ 沖縄県  │ NULL    │ 八重山郡 │ 竹富町  │ NULL    │ 47381   │ POLYGON ((123.568986109 24.195202775, 123.... │
│ 124665  │ 沖縄県  │ NULL    │ 八重山郡 │ 竹富町  │ NULL    │ 47381   │ POLYGON ((123.566391946 24.196553333, 123.... │
│ 124657  │ 沖縄県  │ NULL    │ 八重山郡 │ 竹富町  │ NULL    │ 47381   │ POLYGON ((123.568247497 24.194924721, 123.... │
│ 124658  │ 沖縄県  │ NULL    │ 八重山郡 │ 竹富町  │ NULL    │ 47381   │ POLYGON ((123.568473891 24.194947225, 123.... │
└─────────┴─────────┴─────────┴──────────┴─────────┴─────────┴─────────┴───────────────────────────────────────────────┘

データをいじってみる

bboxを追加する

空間クエリを高速化するためbboxを追加してみます。
add bboxコマンドでbboxを追加できます。

まず、bboxを削除したparquetファイルを準備しました。

$ gpio inspect N03-20260101_no_bbox.parquet

📄 N03-20260101_no_bbox.parquet (196.18 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rows: 125,130
Row Groups: 1
Compression: ZSTD
Parquet Type: No Parquet geo logical type
GeoParquet Version: 1.1.0
CRS: EPSG:6668
Geometry Types: Polygon
Bbox: [122.932606, 20.422746, 153.986675, 45.557243]

Columns (8):
┏━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Name    ┃ Type                  ┃
┡━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩
│ OGC_FID │ BIGINT                │
│ N03_001 │ VARCHAR               │
│ N03_002 │ VARCHAR               │
│ N03_003 │ VARCHAR               │
│ N03_004 │ VARCHAR               │
│ N03_005 │ VARCHAR               │
│ N03_007 │ VARCHAR               │
│ geom 🌍 │ GEOMETRY('EPSG:6668') │
└─────────┴───────────────────────┘

add bboxコマンドでbboxを追加してみます。

$ gpio add bbox N03-20260101_no_bbox.parquet N03-20260101_with_bbox.parquet 

Processing 125,130 features...
Successfully added bbox column 'bbox' to: N03-20260101_with_bbox.parquet

inspectコマンドでbboxが追加できたか確認してみます。

$ gpio inspect N03-20260101_with_bbox.parquet 

📄 N03-20260101_with_bbox.parquet (173.45 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rows: 125,130
Row Groups: 2
Compression: ZSTD
Parquet Type: No Parquet geo logical type
GeoParquet Version: 1.1.0
CRS: EPSG:6668
Geometry Types: Polygon
Bbox: [122.932606, 20.422746, 153.986675, 45.557243]

Columns (9):
┏━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Name    ┃ Type                                                       ┃
┡━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ OGC_FID │ BIGINT                                                     │
│ N03_001 │ VARCHAR                                                    │
│ N03_002 │ VARCHAR                                                    │
│ N03_003 │ VARCHAR                                                    │
│ N03_004 │ VARCHAR                                                    │
│ N03_005 │ VARCHAR                                                    │
│ N03_007 │ VARCHAR                                                    │
│ geom 🌍 │ GEOMETRY('EPSG:6668')                                      │
│ bbox    │ STRUCT(xmin DOUBLE, ymin DOUBLE, xmax DOUBLE, ymax DOUBLE) │
└─────────┴────────────────────────────────────────────────────────────┘

bboxが追加できていますね。

データを並び替える

sortコマンドを使って、データを「ヒルベルト曲線」という特殊な一筆書きの線に沿って並べ替えてみます。これにより、空間クエリの処理を高速化することができます。

$ gpio sort hilbert N03-20260101_with_bbox.parquet N03-20260101_with_bbox_sorted.parquet

Hilbert sorting to GeoParquet v1.1 provides no spatial filter pushdown benefit. Consider using --geoparquet-version 2.0 to enable native geo_bbox row group statistics.

今回使用したGeoParquet v1.1のファイルでは、Hilbertソート時に、空間フィルタの高速化に効果がないという警告が表示されました。ただし、v1.1でも、bbox列の統計情報を読み込み側が利用できれば、ソートによる高速化が期待できます。地理的に近い地物をまとめることで、検索範囲と重ならないRow Groupを読み飛ばしやすくなるためです。

一方、v2.0ではジオメトリ列自体に空間統計情報を持てるため、対応する読み込みエンジンであれば、別途bbox列を追加せずに同様の最適化が可能です。ソートの効果を得るために、必ずしもv2.0が必要というわけではありません。

空間インデックスの追加

H3インデックスの追加

H3インデックスを追加するにはadd h3コマンドを使用します。
--resolutionオプションで解像度を指定できます。

$ gpio add h3 N03-20260101.parquet N03-20260101_h3.parquet --resolution 9

Adding H3 column 'h3_cell' (resolution 9)...
Processing 125,130 features...
Successfully added H3 column 'h3_cell' (resolution 9) to: N03-20260101_h3.parquet

--resolutionオプションで指摘する解像度については、以下を参考にしてみてください。

  • resolution 7
    • 約5km2のcell
  • resolution 9
    • 約105m2のcell(default)
  • resolution 11
    • 約2m2のcell
  • resolution 13
    • 約0.004m2のcell

A5インデックスの追加

A5インデックスを追加するにはadd a5コマンドを使用します。
--resolutionオプションで解像度を指定できます。

$ gpio add a5 N03-20260101.parquet N03-20260101_a5.parquet --resolution 15

Adding A5 column 'a5_cell' (resolution 15)...
Processing 125,130 features...
Successfully added A5 column 'a5_cell' (resolution 15) to: N03-20260101_a5.parquet

ベストプラクティスの確認

check allコマンドを利用すると、指定したファイルが以下のベストプラクティスに則っているか確認することができます。

  • 空間的順序(ヒルベルト曲線)
  • メタデータを含むBbox列
  • ZSTD圧縮
  • 適切な行グループのサイズ

試しに使ってみます。
Row Groupの容量だけが推奨値を少し下回っているようですが、それ以外は問題ない結果を確認することができます。

$ gpio check all N03-20260101_with_bbox_sorted.parquet

Row Group Analysis:
Number of row groups: 3
Average group size: 57.81 MB
Row group size is suboptimal. Recommended size is 64-256 MB
Average rows per group: 41,710
Row count per group is optimal

Total file size: 173.43 MB

Row Group Guidelines:
- Optimal size: 64-256 MB per row group
- Optimal rows: 10,000-200,000 rows per group
- Small files (<64 MB): single row group is fine
- Spatial queries: 10,000-50,000 rows per group with Hilbert sorting and GeoParquet v2.0 enables optimal row group skipping

GeoParquet Metadata:
✓ Version 1.1.0
✓ Found bbox column 'bbox' with proper metadata covering
ℹ️  GeoParquet 2.0 is available, with native spatial stats and filter pushdown. Run: gpio convert geoparquet input.parquet output.parquet --geoparquet-version 2.0

Compression Analysis:
✓ ZSTD compression on geometry column 'geom'

Bloom Filter Analysis:
Bloom filters found on 6 column(s): N03_001, N03_003, N03_004, N03_005, N03_007, N03_002
Total bloom filter size: 8.09 KB

Spatial Order Analysis:
✓ Data appears to be spatially ordered

Spec Validation:
  ✓ 28 checks passed

試しにbboxがないデータで試してみます。
bbox列がないことによる指摘が表示されています。

$ gpio check all N03-20260101_no_bbox.parquet 

Row Group Analysis:
Number of row groups: 1
Average group size: 196.18 MB
Row group size is optimal (64-256 MB)
Average rows per group: 125,130
Row count per group is optimal

Total file size: 196.18 MB

GeoParquet Metadata:
✓ Version 1.1.0
❌ No bbox column found (recommended for better performance)
ℹ️  GeoParquet 2.0 is available, with native spatial stats and filter pushdown. Run: gpio convert geoparquet input.parquet output.parquet --geoparquet-version 2.0

Compression Analysis:
✓ ZSTD compression on geometry column 'geom'

Bloom Filter Analysis:
No bloom filters detected

Spatial Order Analysis:
No bbox column or native geo_bbox stats found - using slower sampling method. For faster checks, add bbox column with 'gpio add bbox' or use GeoParquet 2.0.

Results:
Ratio (consecutive / random): 0.0006210923486861035
=> Data seems strongly spatially clustered.
✓ Data appears to be spatially ordered

Spec Validation:
  ✓ 24 checks passed
  WARNING: N03-20260101_no_bbox.parquet - No bbox column found

まとめ

geoparquet-ioの活用を通してGeoParquetの特徴がわかった気がします。
今回紹介して以外にもgeoparquet-ioはいろんなコマンドがあるようです。
色々試してみて、別の記事でネタとして昇華していきたいと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?