Создание конвейерных SQL / NOSQL-запросов в Java - PullRequest
1 голос
/ 01 марта 2012

Я пытаюсь создать среду на Java, которая будет поддерживать цепочечные / конвейерные запросы, в которых выходные данные одного запроса будут преобразованы для использования в качестве входных данных для других запросов.Что-то вроде PyCascading Эти запросы будут выполняться во время выполнения.Я посмотрел на некоторые фреймворки и наткнулся на Apache Camel & Spring Integration , поскольку они предоставляют концепцию сцепления и маршрутизации (Enterprise Integration Patterns).Я нашел Apache Camel лучше, чем Spring Integration (IMHO).


Должен ли я использовать Apache Camel для своей платформы или есть ли лучший способ добиться этого?

Мой синтаксис запроса будет

Query query1 = "select customer.id from customer where customer.name = 'ABC'";
Query query2 = "select account.id from account where account.custid in {$1}";
// $1 will be the input of second query
from(query1).inputto(query2).printOutput();

1 Ответ

1 голос
/ 02 марта 2012

Это возможно, используя camel-jdbc и несколько базовых функций Camel (например, simple ), чтобы вы могли встроить анализ результата ...

Результат [CAMEL-JDBC] возвращается в теле OUT в виде ArrayList [HashMap [String, Object]] Объект List содержит список строк и карту объекты содержат каждую строку с ключом String в качестве имени столбца.

Этот результат затем можно использовать для динамического построения последующих запросов ...

from("direct:start")
  .setBody(constant("select customer.id as ID from customer where customer.name = 'ABC'"))
  .to("jdbc:myDataSource")

  //now, use simple/ognl to extract the first result and the 'ID' from the Map in the body
  .setBody(simple("select account.id from account where account.custid in ${body[0][ID]}"))
  .to("jdbc:myDataSource")

  .log("ACCOUNT IDS = ${body}");
...