Skip to main content

read

Extrait les données d'un datastore distribué (datastore ou timeseries datastore) SPARQL

L'extraction est réalisé par une requête SPARQL SELECT, DESCRIBE, CONSTRUCT, ASK ou via une transaction.

La clause placée après la clause read() reçoit les données extraites des datastores

Patterns

Distributed storage

Usage

interface org.mddynamics.network.stream.LinkStream
public LinkStream read(String label, String url, Atomic... atomics) throws StreamDefinitionException;

@param label: libellé de la clause, affichée sur l'arborescence du stream (onglet packages)

@param url: URL de distribution de la fonction lambda

paramètre d'URL datastore.name (requis) désigne le nom du datastore cible

paramètre d'URL datastore.set (optionnel) désigne le nom du graphe cible, sinon le graphe par défaut est utilisé

paramètre d'URL datastore.start (optionnel) indique le début de période pour une timeseries, au format YYYY (année), YYYYMM (mois), YYYYMMDD (jour) ou YYYYMMDDHhh (heure)

paramètre d'URL datastore.end (optionnel) indique la fin de période pour une timeseries, au format YYYY (année), YYYYMM (mois), YYYYMMDD (jour) ou YYYYMMDDHhh (heure)

datastore.context (optionnel) désigne le domaine ou le namespace du datastore. Par défaut, les données sont stockées dans le namespace du stream via la référence du stream. Cette option peut permettre de définir tout autre namespace, dont l'accès aux données d'une autre version du stream ou d'un autre stream

@param atomics: fonction lambda (au moins une requise) définissant la requête ou la transaction

@return retourne l'instance du flux (approche DSL)

@exception Si l'exception StreamDefinitionException est levée la compilation échoue et un message d'erreur s'affiche

Lorsque plusieurs fonctions lambda sont définies, elles sont exécutées séquentiellement sur les mêmes données reçues en entrée. Cela permet d'exécuter plusieurs traitements logiques distincts et de transmettre les résultats vers la clause suivante de l'algorithme (à la façon d'une fonction "JOIN")

signature d'une fonction lambda Atomic
public Object (LinkStream stream, Event event) -> { return ... }

@param stream: context d'exécution du stream

@param event: payload. L'objet org.mddynamics.network.stream.Event est un wrapper

@return: requête ou transaction à exécuter

Il est possible de retourner l'objet Event ou tout autre objet sérialisable. Si l'objet retourné est une instance de java.lang.Iterable alors chaque élément de la liste sera utilisé comme requête ou transaction à exécuter

Si plusieurs requêtes sont définies, elles doivent retourner le même type d'objet

Exemple de code


@Override
public void build() throws Exception {

make("power yield api")
.from("api", "www.mddynamics.fr/app/api", (stream, request) -> {
return valid(request);
})
.read("yield", "www.mddynamics.fr/app/store/yield", (stream, request) -> {
return stream.util(SPARQL.class).query(
"prefix : <http://mddynamics.fr/link/>",
"prefix list: <http://jena.apache.org/ARQ/list#>",
"select ?yield ?timestamp where {",
"?metric a :Metric;",
":timestamp ?timestamp;",
":data/list:member ?value.",
"filter (?timestamp >= ?from && ?timestamp < ?to", Param("from", request), Param("to", request)
"} order by ?timestamp"
);
})
.reply("nominal response", (stream, response) -> {
return response;
});
}