2015-10-13 10 views
0

Приведенные примеры, которые охватывают @QuerySqlFunction тривиальны. Я положил один ниже. Тем не менее, я ищу пример/решение/подсказку для обеспечения вычисления перекрестных строк, например. средний, сумма, ... Возможно ли это?Как реализовать SUM с помощью функции @QuerySqlFunction?

В этом примере функция возвращает значение 0 из массива, в основном реализацию ARRAY_GET (x, 0). Все остальные примеры, которые я видел, похожи: 1 строка, получить значение, что-то сделать с ним. Но мне нужно уметь вычислять сумму сгруппированного результата или, возможно, намного больше бизнес-логики. Если бы кто-то мог предоставить мне функцию QuerySqlFunction для СУММ, я предполагаю, что это позволит мне делать гораздо больше, чем просто СУММ.

Шаг 1: Написать функцию

public class MyIgniteFunctions { 
@QuerySqlFunction 
public static double value1(double[] values) { 
    return values[0]; 
} 
} 

Шаг 2: Регистрация функция

CacheConfiguration<Long, MyFact> factResultCacheCfg = ... 
factResultCacheCfg.setSqlFunctionClasses(new Class[] { MyIgniteFunctions.class }); 

Шаг 3: Используйте его в запросе

SELECT 
     MyDimension.groupBy1, 
     MyDimension.groupBy2, 
     SUM(VALUE1(MyFact.values)) 
FROM 
    "dimensionCacheName".DimDimension, 
    "factCacheName".FactResult 
WHERE 
     MyDimension.uid=MyFact.dimensionUid 
GROUP BY 
     MyDimension.groupBy1, 
     MyDimension.groupBy2 
+0

Ignite поддерживает стандартную функцию SUM. Вам будет достаточно для вас? Или вы хотите реализовать некоторую настраиваемую функцию агрегации? –

+0

Этот вопрос представляется дубликатом другого вопроса и был дан ответ здесь: http://stackoverflow.com/questions/33097103/how-to-sum-an-array-of-doubles-with-ignite-data-grid- sql – Dmitriy

+0

Я знаю и понимаю, что есть стандартная функция SUM SUM. Мне не нужен СУММ. Мне нужна пример реализации QuerySqlFunction, которая обеспечивает функциональность в нескольких строках. Хорошим примером будет реализация SUM в качестве функции QuerySqlFunction. Это позволило бы мне понять, как написать QuerySqlFunction для нескольких строк, учитывая конкретный контекст, например. «группа». –

ответ

0

Я не верю. В настоящее время Ignite имеет чистую поддержку API для пользовательской пользовательской QuerySqlFunction, которая охватывает несколько строк.

Если вам нужно что-то подобное, я предлагаю вам использовать IgniteCompute APIs и распространять ваши вычисления, лямбды или замыкания на участвующие узлы Ignite. Затем изнутри вашего закрытия вы можете либо выполнять локальные SQL-запросы, либо выполнять любые другие операции кеша, включая сканирование с использованием предикатов по локально кэшированным данным.

Этот подход будет выполняться через несколько узлов Ignite параллельно и должен хорошо работать.