DuckDB调用ST_GeometryType(BLOB)报错,请求解决类型转换问题
解决DuckDB中ST_GeometryType调用报错(BLOB类型参数问题)
问题根源
报错提示ST_GeometryType(BLOB)不匹配,是因为你的Parquet文件中geometry字段以二进制WKB格式存储,DuckDB默认将其识别为BLOB类型,而ST_GeometryType仅接受GEOMETRY或具体几何子类型(如POINT_2D、POLYGON_2D)作为参数。
ST_ASText能正常运行是因为该函数内部支持自动处理BLOB格式的WKB数据,但ST_GeometryType没有这个隐式转换逻辑,必须显式转换参数类型。
解决方案
显式用ST_GeomFromWKB将BLOB类型的geometry字段转换为GEOMETRY类型,再传入ST_GeometryType:
SELECT DISTINCT ST_GeometryType(ST_GeomFromWKB(geometry)) AS geom_type FROM 'PathTo\\*.parquet';
如果需要重复查询,建议先将数据转换后存入表,避免每次转换:
-- 创建转换后的表 CREATE TABLE geo_data AS SELECT ST_GeomFromWKB(geometry) AS geometry FROM 'PathTo\\*.parquet'; -- 查询几何类型 SELECT DISTINCT ST_GeometryType(geometry) AS geom_type FROM geo_data;
验证步骤
可以先确认geometry字段的类型:
DESCRIBE SELECT geometry FROM 'PathTo\\*.parquet' LIMIT 1;
执行后会看到该字段类型为BLOB,验证问题根源。
内容的提问来源于stack exchange,提问作者Holly
相关产品推荐
相关产品推荐

