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 哈希映射或类似的东西中,稍后您可以过滤该静态映射而没有任何副作用。