首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向Geoserver层添加SQL提示?

如何向Geoserver层添加SQL提示?
EN

Stack Overflow用户
提问于 2022-09-08 10:36:12
回答 2查看 128关注 0票数 2

我们有Geoserver 2.21.1,Geotools 27.1和SAP Hana的Geotools插件。数据在SAP中,我们在数据库中使用非常复杂的查询和视图。

我们发现,在使用(默认)基于成本的优化时,Hana需要很长时间来优化一些查询。

我试图了解如何在Geoserver中使用Select提示,但没有成功。

一个例子..。这是Geoserver在数据库中生成的“sql类型”:

代码语言:javascript
复制
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),如下所示:

代码语言:javascript
复制
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语句中,结果是这样的,这不是我想要的:

代码语言:javascript
复制
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

有人给你小费吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-27 15:01:22

正如伊恩已经指出的,在GeoServer中似乎没有现成的功能。一般来说,我认为有以下几种选择:

  1. 实现一个参数作为HANA插件的一部分(正如伊恩所提议的):--这意味着您可以在GeoServer中的存储级别上设置一个参数。在此存储上发出的所有查询都将使用该提示。如果希望对其他层的查询不使用此提示,则需要在没有提示参数的情况下设置第二个存储区,并将相应的层分配给第二个存储区。
  2. 作为层的一部分实现了一个提示参数:据我所知,这不能通过修补SAP插件来实现,因为该层是单个底层存储的抽象。
  3. 在服务器端设置提示: SAP为某些预定义查询提供在数据库端应用提示的能力。在这种情况下,单个客户端(在您的示例中是GeoServer)不需要提供提示。注意,当使用带有GeoServer层参数的SQL查询时,当参数通过GeoServer注入到string时,这种方法将无法工作。

为了进一步讨论选项1,您还可以在GeoTools Jira中打开一个问题,并分配组件hana以及HANA插件的开发人员。

票数 1
EN

Stack Overflow用户

发布于 2022-09-21 16:05:40

您需要修改相关的数据存储代码--参见https://github.com/geotools/geotools/tree/main/modules/plugin/jdbc/jdbc-hana。这种提示注入可能会出现在HanaFilterToSQL.java代码中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73647691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档