SAP HANA 空间函数
SAP HANA SPATIAL FUNCTION
我想在 SAP HANA DB 中创建函数来计算两点之间的距离。
create function "kostya"."calc_distance" (in a ST_Point, in b ST_Point)
returns dist DOUBLE
AS
BEGIN
dist = a.ST_Distance(b);
END
当我尝试执行这段代码时出现错误:
feature not supported: Unsupported parameter type:ST_POINT: line 2 col 48 (at pos 48)
但是当我执行类似的 SQL 查询时:
select NEW ST_Point(10, 1).ST_Distance( NEW ST_Point(1, 1)) FROM dummy;
我有写入结果。
有什么建议吗?
从docs我们了解到:
The input and output parameters of a procedure can have any of the primitive SQL types or a table type.
遗憾的是,地理空间数据类型未按此类列出。
因此,您必须将 a.ST_X()
等标量值传递给函数,然后使用 ST_Point(DOUBLE, DOUBLE)
constructor 在过程中将它们组合回 ST_Point
,如下所示:
CREATE FUNCTION "calc_distance" (
IN a_long DOUBLE,
IN a_lat DOUBLE,
IN b_long DOUBLE,
IN b_lat DOUBLE
) RETURNS dist DOUBLE
AS
BEGIN
SELECT NEW ST_Point(:a_long, :a_lat).ST_Distance(
NEW ST_Point(:b_long, :b_lat)) INTO dist FROM dummy;
END;
-- sample usage
SELECT "calc_distance"(a.ST_X(), a.ST_Y(), b.ST_X(), b.ST_Y())
FROM (
SELECT NEW ST_Point(10.0, 50.0) AS a, NEW ST_Point(11.0, 51.0) AS b FROM dummy
);
这在没有 HANA 102.01 基于 Web 的开发 Workbench 的抱怨的情况下工作。从安装了 SAP Development Tools for Eclipse 的 Eclipse Luna,我们得到
java.sql.SQLWarning: Not recommended feature: Using SELECT INTO in Scalar UDF
Statement 'CREATE FUNCTION "calc_distance" ( IN a_long DOUBLE, IN a_lat DOUBLE, IN b_long DOUBLE, IN b_lat ...'
successfully executed in 16 ms 272 µs (server processing time: 7 ms 460 µs) - Rows Affected: 0
也许在 SAP HANA Studio 中警告变成了错误。那边好像正在处理中:)
从 SAP HANA SPS11 开始,扩展了对空间数据类型的支持。请参阅 SAP HANA 学院的 this video。
我想在 SAP HANA DB 中创建函数来计算两点之间的距离。
create function "kostya"."calc_distance" (in a ST_Point, in b ST_Point)
returns dist DOUBLE
AS
BEGIN
dist = a.ST_Distance(b);
END
当我尝试执行这段代码时出现错误:
feature not supported: Unsupported parameter type:ST_POINT: line 2 col 48 (at pos 48)
但是当我执行类似的 SQL 查询时:
select NEW ST_Point(10, 1).ST_Distance( NEW ST_Point(1, 1)) FROM dummy;
我有写入结果。
有什么建议吗?
从docs我们了解到:
The input and output parameters of a procedure can have any of the primitive SQL types or a table type.
遗憾的是,地理空间数据类型未按此类列出。
因此,您必须将 a.ST_X()
等标量值传递给函数,然后使用 ST_Point(DOUBLE, DOUBLE)
constructor 在过程中将它们组合回 ST_Point
,如下所示:
CREATE FUNCTION "calc_distance" (
IN a_long DOUBLE,
IN a_lat DOUBLE,
IN b_long DOUBLE,
IN b_lat DOUBLE
) RETURNS dist DOUBLE
AS
BEGIN
SELECT NEW ST_Point(:a_long, :a_lat).ST_Distance(
NEW ST_Point(:b_long, :b_lat)) INTO dist FROM dummy;
END;
-- sample usage
SELECT "calc_distance"(a.ST_X(), a.ST_Y(), b.ST_X(), b.ST_Y())
FROM (
SELECT NEW ST_Point(10.0, 50.0) AS a, NEW ST_Point(11.0, 51.0) AS b FROM dummy
);
这在没有 HANA 102.01 基于 Web 的开发 Workbench 的抱怨的情况下工作。从安装了 SAP Development Tools for Eclipse 的 Eclipse Luna,我们得到
java.sql.SQLWarning: Not recommended feature: Using SELECT INTO in Scalar UDF
Statement 'CREATE FUNCTION "calc_distance" ( IN a_long DOUBLE, IN a_lat DOUBLE, IN b_long DOUBLE, IN b_lat ...'
successfully executed in 16 ms 272 µs (server processing time: 7 ms 460 µs) - Rows Affected: 0
也许在 SAP HANA Studio 中警告变成了错误。那边好像正在处理中:)
从 SAP HANA SPS11 开始,扩展了对空间数据类型的支持。请参阅 SAP HANA 学院的 this video。