我们有Geoserver 2.21.1,Geotools 27.1和SAP Hana的Geotools插件。数据在SAP中,我们在数据库中使用非常复杂的查询和视图。
我们发现,在使用(默认)基于成本的优化时,Hana需要很长时间来优化一些查询。
我试图了解如何在Geoserver中使用Select提示,但没有成功。
一个例子..。这是Geoserver在数据库中生成的“sql类型”:
SELECT "ID","DISTRICT_ID","DISTRICT_NAME","GEOLOC".ST_AsBinary() as "GEOLOC"
FROM
(select ID,DISTRICT_ID,DISTRICT_NAME,GEOLOC FROM MG_SPATIAL.V_GIS_DISTRICT
) as "vtable"
WHERE "GEOLOC".ST_IntersectsRectPlanar(ST_GeomFromWKB(?, 3067), ST_GeomFromWKB(?, 3067)) = 1 LIMIT 1000000 OFFSET 0我想让Geoserver在执行此语句时使用提示OPTIMIZATION_LEVEL (RULE_BASED),如下所示:
SELECT "ID","DISTRICT_ID","DISTRICT_NAME","GEOLOC".ST_AsBinary() as "GEOLOC"
FROM
(select ID,DISTRICT_ID,DISTRICT_NAME,GEOLOC FROM MG_SPATIAL.V_GIS_DISTRICT
) as "vtable"
WHERE "GEOLOC".ST_IntersectsRectPlanar(ST_GeomFromWKB(?, 3067), ST_GeomFromWKB(?, 3067)) = 1 LIMIT 1000000 OFFSET 0
WITH HINT OPTIMIZATION_LEVEL (RULE_BASED) 这样将提示应用到SQL中是可能的吗?如果我在SQL视图中将提示添加到SQL语句中,结果是这样的,这不是我想要的:
SELECT "ID","DISTRICT_ID","DISTRICT_NAME","GEOLOC".ST_AsBinary() as "GEOLOC"
FROM
(select ID,DISTRICT_ID,DISTRICT_NAME,GEOLOC FROM MG_SPATIAL.V_GIS_DISTRICT
WITH HINT OPTIMIZATION_LEVEL (RULE_BASED)
) as "vtable"
WHERE "GEOLOC".ST_IntersectsRectPlanar(ST_GeomFromWKB(?, 3067), ST_GeomFromWKB(?, 3067)) = 1 LIMIT 1000000 OFFSET 0有人给你小费吗?
发布于 2022-09-27 15:01:22
正如伊恩已经指出的,在GeoServer中似乎没有现成的功能。一般来说,我认为有以下几种选择:
为了进一步讨论选项1,您还可以在GeoTools Jira中打开一个问题,并分配组件hana以及HANA插件的开发人员。
发布于 2022-09-21 16:05:40
您需要修改相关的数据存储代码--参见https://github.com/geotools/geotools/tree/main/modules/plugin/jdbc/jdbc-hana。这种提示注入可能会出现在HanaFilterToSQL.java代码中。
https://stackoverflow.com/questions/73647691
复制相似问题