Khi khối lượng dữ liệu không gian ngày càng lớn, việc lựa chọn đúng định dạng lưu trữ có thể tạo ra khác biệt đáng kể về tốc độ xử lý và chi phí vận hành. GeoParquet là một giải pháp đang được nhiều tổ chức thử nghiệm nhằm giải quyết bài toán này, giúp dữ liệu GIS dễ dàng kết hợp với các công cụ phân tích dữ liệu lớn phổ biến hiện nay. Bài viết tổng hợp những điểm chính về định dạng này cùng một số kinh nghiệm triển khai thực tế, do VSGA biên soạn từ Apache Sedona và OGC.

GeoParquet là gì và tại sao đáng quan tâm?

GeoParquet là cách chuẩn hóa việc lưu dữ liệu địa lý trên nền Apache Parquet – một định dạng file dạng cột được sử dụng rộng rãi trong hệ sinh thái phân tích dữ liệu lớn. Thay vì biến geometry thành chuỗi WKT/GeoJSON trong CSV hoặc lưu trong một database duy nhất, GeoParquet cho phép geometry được lưu cùng schema và metadata không gian ngay trong file Parquet.

Hinh 1 1
Hình 1. Geospatial data in Parquet

Điểm quan trọng của mô hình này là dữ liệu GIS có thể được đưa vào kiến trúc Data Lake/Lakehouse và được xử lý bởi nhiều engine như Spark/Sedona, DuckDB, GeoPandas hoặc các công cụ dựa trên GDAL mà không nhất thiết phải tải toàn bộ dữ liệu vào 1 cơ sở dữ liệu như PostGIS trước. Các lợi ích của GeoParquet bao gồm column pruning, statistics, bounding-box metadata và khả năng spatial predicate push-down khi làm việc với định dạng file này. [1][2]

Vì sao Parquet phù hợp với dữ liệu GIS lớn?

  • Columnar storage: Parquet lưu theo cột, vì vậy truy vấn chỉ cần một số thuộc tính có thể đọc các cột cần thiết thay vì toàn bộ bản ghi.
  • Schema trong file: Metadata của Parquet giúp engine biết kiểu dữ liệu; GeoParquet bổ sung metadata mô tả geometry, geometry type và CRS.
  • Statistics và data skipping: Statistics ở mức file/row group giúp engine loại bỏ các phần dữ liệu chắc chắn không liên quan đến truy vấn.
  • Bounding box: GeoParquet 1.1 có thể lưu thông tin covering/bbox cho geometry, hỗ trợ lọc các row group dựa trên phạm vi không gian.
  • Compression: Dữ liệu dạng cột có thể nén hiệu quả, đặc biệt khi nhiều thuộc tính có tính lặp lại.

GeoParquet khác gì GeoJSON, Shapefile và GeoPackage?

Định dạng

Kiểu lưu trữ

Điểm mạnh

Hạn chế

Phù hợp

GeoJSON

Text / object

Dễ đọc, phổ biến trên Web GIS

File lớn, kém hiệu quả với dữ liệu rất lớn

API/Web GIS, trao đổi dữ liệu nhỏ

Shapefile

Nhiều file

Tương thích phần mềm GIS lâu đời

Giới hạn schema/tên trường, quản lý nhiều file

Trao đổi dữ liệu (legacy)

GeoPackage

SQLite

Một file, chuẩn OGC, hỗ trợ vector/raster

Row-oriented, không tối ưu cho analytics phân tán

Trao đổi và xử lý GIS desktop

GeoParquet

Columnar / Parquet

Analytics lớn, compression, pruning, bbox metadata

Không phải transactional database

Data Lake, ETL, Big Data GIS

Lưu ý: GeoPackage vẫn rất phù hợp khi cần một file GIS portable, có khả năng cập nhật và mang tính transactional theo mô hình SQLite. Tuy nhiên, cũng lưu ý rằng GeoPackage là row-oriented và không có lợi thế column pruning như các định dạng columnar; với analytics lớn, GeoParquet hoặc sử dụng Lakehouse Iceberg thường phù hợp hơn. [3]

Metadata không gian trong GeoParquet

Một file GeoParquet không chỉ chứa các cột dữ liệu. Metadata của geometry có thể mô tả geometry column, encoding, geometry types, bounding box và CRS. Với GeoParquet 1.1, metadata có thể liên kết geometry với các cột xmin, ymin, xmax, ymax để hỗ trợ lọc dữ liệu theo không gian.

Điều này tạo ra khác biệt quan trọng so với CSV chứa WKT: engine có thêm thông tin để quyết định phần nào của dataset cần đọc. Ví dụ, nếu truy vấn chỉ quan tâm một khu vực không nằm trong bbox của một row group, engine có thể bỏ qua row group đó thay vì đọc toàn bộ dữ liệu. Cơ chế này được môt tả như một cách giảm lượng dữ liệu phải scan. [2]

GeoParquet kết hợp Spark và Apache Sedona

Apache Sedona/Spark hỗ trợ đọc/ghi GeoParquet và có thể suy luận geometry từ metadata của GeoParquet. Ngoài ra, Sedona cũng hỗ trợ spatial predicate push-down, giúp tận dụng metadata để hạn chế lượng dữ liệu phải đọc. [2][4]

Ví dụ logic xử lý:

  1. Đọc tập GeoParquet từ Object Storage.
  2. Lọc theo khoảng thời gian trước để giảm dữ liệu.
  3. Lọc theo bbox/AOI để tận dụng data skipping.
  4. Thực hiện ST_Intersects, ST_DWithin, spatial join hoặc aggregation bằng Sedona/Spark.
  5. Ghi kết quả thành GeoParquet hoặc nạp tập kết quả nhỏ vào cơ sở dữ liệu như PostGIS.

Một số lưu ý khi ứng dụng GeoParquet

  • CRS: Cần thống nhất CRS và kiểm tra metadata. GeoParquet hỗ trợ lưu CRS, nhưng engine vẫn có thể có khác biệt về axis order; cần kiểm soát rõ lon/lat và lat/lon trong pipeline. [2]
  • File size và row group: Không nên tạo quá nhiều file nhỏ. Nên thiết kế kích thước file/row group hợp lý và cân nhắc spatial sorting để tăng khả năng data skipping. [2][5]
  • Partitioning: Có thể partition theo thời gian hoặc khu vực tùy workload. Partition quá chi tiết có thể tạo small-file problem.
  • Không thay thế PostGIS trong mọi trường hợp: GeoParquet rất mạnh cho analytical workload nhưng không phải transactional database. PostGIS vẫn phù hợp cho ứng dụng cần cập nhật dữ liệu, spatial index và truy vấn phục vụ API.
  • Data lifecycle: Nên xác định rõ schema evolution, versioning và retention thay vì chỉ chuyển file từ database sang Parquet.

Liên hệ với hệ thống geospatial hiện tại

Nếu hệ thống đã sử dụng PostGIS, Object Storage (S3), Spark và các pipeline xử lý dữ liệu, GeoParquet có thể được xem là lớp dữ liệu trung gian giữa database và data lake. Một hướng triển khai thực tế có thể là: PostGIS phục vụ dữ liệu nghiệp vụ; Object Storage (S3) + GeoParquet lưu lịch sử lớn; Spark/Sedona xử lý batch processing; GeoPandas dùng cho exploratory analytics; kết quả được đưa về dashboard/API service khi cần.

Kết luận

GeoParquet không đơn giản là ‘Parquet có geometry’. Giá trị lớn hơn nằm ở việc đưa geospatial data vào mô hình columnar analytics, đồng thời giữ metadata không gian đủ để các engine có thể tối ưu việc đọc dữ liệu. Khi kết hợp với Object Storage, Spark/Sedona và các engine phân tích dữ liệu, GeoParquet là một lựa chọn đáng cân nhắc để xây dựng Spatial Data Lake, đặc biệt với dataset và workload lớn.

Tài liệu/nguồn tham khảo

[1] Open Geospatial Consortium (OGC) – Geospatial standards and data formats
[2] Apache Sedona – GeoParquet with Spark; metadata, bbox, predicate push-down
[3] Open Geospatial Consortium – GeoPackage Standard
[4] Apache Sedona – Spatial DataFrame / SQL, GeoParquet support
[5] Apache Sedona – SedonaDB 0.2.0, GeoParquet 1.1 and spatial sorting