Files
email-tracker/external/duckdb/test/geoparquet/roundtrip.test
2025-10-24 19:21:19 -05:00

141 lines
5.3 KiB
SQL

# name: test/geoparquet/roundtrip.test
# group: [geoparquet]
require spatial
require parquet
#------------------------------------------------------------------------------
# Test points
#------------------------------------------------------------------------------
query II nosort point_result
SELECT col, geometry FROM '__WORKING_DIRECTORY__/data/geoparquet/data-point-wkt.csv'
query II nosort point_result
SELECT col, st_astext(geometry) FROM '__WORKING_DIRECTORY__/data/geoparquet/data-point-encoding_wkb.parquet'
# Now write it back to parquet
statement ok
COPY (SELECT col, geometry FROM '__WORKING_DIRECTORY__/data/geoparquet/data-point-wkt.csv')
TO '__TEST_DIR__/data-point-out.parquet' (FORMAT PARQUET)
# Test that the data is the same
query II nosort point_result
SELECT col, geometry FROM '__TEST_DIR__/data-point-out.parquet'
#------------------------------------------------------------------------------
# Test linestrings
#------------------------------------------------------------------------------
query II nosort linestring_result
SELECT col, geometry FROM '__WORKING_DIRECTORY__/data/geoparquet/data-linestring-wkt.csv'
query II nosort linestring_result
SELECT col, st_astext(geometry) FROM '__WORKING_DIRECTORY__/data/geoparquet/data-linestring-encoding_wkb.parquet'
# Now write it back to parquet
statement ok
COPY (SELECT col, geometry FROM '__WORKING_DIRECTORY__/data/geoparquet/data-linestring-encoding_wkb.parquet')
TO '__TEST_DIR__/data-linestring-out.parquet' (FORMAT PARQUET)
# Test that the data is the same
query II nosort linestring_result
SELECT col, geometry FROM '__TEST_DIR__/data-linestring-out.parquet'
#------------------------------------------------------------------------------
# Test polygons
#------------------------------------------------------------------------------
query II nosort polygon_result
SELECT col, geometry FROM '__WORKING_DIRECTORY__/data/geoparquet/data-polygon-wkt.csv'
query II nosort polygon_result
SELECT col, st_astext(geometry) FROM '__WORKING_DIRECTORY__/data/geoparquet/data-polygon-encoding_wkb.parquet'
# Now write it back to parquet
statement ok
COPY (SELECT col, geometry FROM '__WORKING_DIRECTORY__/data/geoparquet/data-polygon-encoding_wkb.parquet')
TO '__TEST_DIR__/data-polygon-out.parquet' (FORMAT PARQUET)
# Test that the data is the same
query II nosort polygon_result
SELECT col, geometry FROM '__TEST_DIR__/data-polygon-out.parquet'
#------------------------------------------------------------------------------
# Test multipoints
#------------------------------------------------------------------------------
query II nosort multipoint_result
SELECT col, ST_GeomFromText(geometry) FROM '__WORKING_DIRECTORY__/data/geoparquet/data-multipoint-wkt.csv'
query II nosort multipoint_result
SELECT col, geometry FROM '__WORKING_DIRECTORY__/data/geoparquet/data-multipoint-encoding_wkb.parquet'
# Now write it back to parquet
statement ok
COPY (SELECT col, geometry FROM '__WORKING_DIRECTORY__/data/geoparquet/data-multipoint-encoding_wkb.parquet')
TO '__TEST_DIR__/data-multipoint-out.parquet' (FORMAT PARQUET)
# Test that the data is the same
query II nosort multipoint_result
SELECT col, geometry FROM '__TEST_DIR__/data-multipoint-out.parquet'
#------------------------------------------------------------------------------
# Test multilinestrings
#------------------------------------------------------------------------------
query II nosort multilinestring_result
SELECT col, geometry FROM '__WORKING_DIRECTORY__/data/geoparquet/data-multilinestring-wkt.csv'
query II nosort multilinestring_result
SELECT col, st_astext(geometry) FROM '__WORKING_DIRECTORY__/data/geoparquet/data-multilinestring-encoding_wkb.parquet'
# Now write it back to parquet
statement ok
COPY (SELECT col, geometry FROM '__WORKING_DIRECTORY__/data/geoparquet/data-multilinestring-encoding_wkb.parquet')
TO '__TEST_DIR__/data-multilinestring-out.parquet' (FORMAT PARQUET)
# Test that the data is the same
query II nosort multilinestring_result
SELECT col, geometry FROM '__TEST_DIR__/data-multilinestring-out.parquet'
#------------------------------------------------------------------------------
# Test multipolygons
#------------------------------------------------------------------------------
query II nosort multipolygon_result
SELECT col, geometry FROM '__WORKING_DIRECTORY__/data/geoparquet/data-multipolygon-wkt.csv'
query II nosort multipolygon_result
SELECT col, st_astext(geometry) FROM '__WORKING_DIRECTORY__/data/geoparquet/data-multipolygon-encoding_wkb.parquet'
# Now write it back to parquet
statement ok
COPY (SELECT col, geometry FROM '__WORKING_DIRECTORY__/data/geoparquet/data-multipolygon-encoding_wkb.parquet')
TO '__TEST_DIR__/data-multipolygon-out.parquet' (FORMAT PARQUET)
# Test that the data is the same
query II nosort multipolygon_result
SELECT col, geometry FROM '__TEST_DIR__/data-multipolygon-out.parquet'
#------------------------------------------------------------------------------
# Inspect metadata
#------------------------------------------------------------------------------
query I
SELECT decode(value) as col
FROM parquet_kv_metadata('__TEST_DIR__/data-multipolygon-out.parquet') WHERE key = 'geo';
----
{"version":"1.0.0","primary_column":"geometry","columns":{"geometry":{"encoding":"WKB","geometry_types":["MultiPolygon"],"bbox":[5.0,5.0,45.0,45.0]}}}