Apache Ignite 中的用户定义函数
User defined functions in Apache Ignite
我想我一定是在文档中遗漏了一些东西。在典型的 DBMS 系统中,您将能够编写一个 UDF,它使用来自另一个 table 的数据。完全不清楚如何从 Ignite UDF 做到这一点。有没有人做过类似的事情,或者甚至可以做这样的事情(显然是人为的)?
static class SqlFunctions {
@QuerySqlFunction
public static int cpi_rate(int x) {
/*sql = select rate from "RATES".cpi where x=?*/
return x;
}
}
Ignite 建立在 H2 数据库之上,用于 SQL 处理,此后它支持 user-defined functions 写入 Java:
public static ResultSet query(Connection conn, String sql) throws SQLException {
return conn.createStatement().executeQuery(sql);
}
CREATE ALIAS QUERY FOR "org.h2.samples.Function.query";
CALL QUERY('SELECT * FROM TEST');
由于可以在自定义函数中访问另一个 table 或缓存,这样做可能会产生副作用,如果使用不当甚至会阻止您的原始查询执行。
也就是说,我认为,根据您的需要,最好在较大的查询中显式 运行 cpi_rate
,例如作为 sub-select 语句。或者您可以 运行 cpi_rate
定期查询并将执行结果缓存在一个简单的 Java 哈希映射或类似的东西中,稍后您可以过滤该静态映射而没有任何副作用。
我想我一定是在文档中遗漏了一些东西。在典型的 DBMS 系统中,您将能够编写一个 UDF,它使用来自另一个 table 的数据。完全不清楚如何从 Ignite UDF 做到这一点。有没有人做过类似的事情,或者甚至可以做这样的事情(显然是人为的)?
static class SqlFunctions {
@QuerySqlFunction
public static int cpi_rate(int x) {
/*sql = select rate from "RATES".cpi where x=?*/
return x;
}
}
Ignite 建立在 H2 数据库之上,用于 SQL 处理,此后它支持 user-defined functions 写入 Java:
public static ResultSet query(Connection conn, String sql) throws SQLException {
return conn.createStatement().executeQuery(sql);
}
CREATE ALIAS QUERY FOR "org.h2.samples.Function.query";
CALL QUERY('SELECT * FROM TEST');
由于可以在自定义函数中访问另一个 table 或缓存,这样做可能会产生副作用,如果使用不当甚至会阻止您的原始查询执行。
也就是说,我认为,根据您的需要,最好在较大的查询中显式 运行 cpi_rate
,例如作为 sub-select 语句。或者您可以 运行 cpi_rate
定期查询并将执行结果缓存在一个简单的 Java 哈希映射或类似的东西中,稍后您可以过滤该静态映射而没有任何副作用。