use of org.apache.rya.indexing.pcj.fluo.api.InsertTriples in project incubator-rya by apache.
the class BatchIT method multiJoinBatchIntegrationTest.
@Test
public void multiJoinBatchIntegrationTest() throws Exception {
final String sparql = "SELECT ?subject1 ?subject2 ?object1 ?object2 WHERE { ?subject1 <urn:predicate_1> ?object1; " + " <urn:predicate_2> ?object2 ." + " ?subject2 <urn:predicate_3> ?object2 } ";
try (FluoClient fluoClient = new FluoClientImpl(getFluoConfiguration())) {
RyaURI subj1 = new RyaURI("urn:subject_1");
RyaStatement statement1 = new RyaStatement(subj1, new RyaURI("urn:predicate_1"), null);
RyaStatement statement2 = new RyaStatement(subj1, new RyaURI("urn:predicate_2"), null);
Set<RyaStatement> statements1 = getRyaStatements(statement1, 10);
Set<RyaStatement> statements2 = getRyaStatements(statement2, 10);
RyaURI subj2 = new RyaURI("urn:subject_2");
RyaStatement statement3 = new RyaStatement(subj2, new RyaURI("urn:predicate_3"), null);
Set<RyaStatement> statements3 = getRyaStatements(statement3, 10);
// Create the PCJ table.
final PrecomputedJoinStorage pcjStorage = new AccumuloPcjStorage(getAccumuloConnector(), getRyaInstanceName());
final String pcjId = pcjStorage.createPcj(sparql);
// Tell the Fluo app to maintain the PCJ and sets batch scan size for StatementPatterns to 5 and
// batch size of joins to 5.
String queryId = new CreateFluoPcj(5, 5).withRyaIntegration(pcjId, pcjStorage, fluoClient, getAccumuloConnector(), getRyaInstanceName()).getQueryId();
List<String> ids = getNodeIdStrings(fluoClient, queryId);
// Stream the data into Fluo.
InsertTriples inserter = new InsertTriples();
inserter.insert(fluoClient, statements1, Optional.absent());
inserter.insert(fluoClient, statements2, Optional.absent());
inserter.insert(fluoClient, statements3, Optional.absent());
getMiniFluo().waitForObservers();
verifyCounts(fluoClient, ids, Arrays.asList(100, 100, 100, 100, 10, 10, 10));
}
}
use of org.apache.rya.indexing.pcj.fluo.api.InsertTriples in project incubator-rya by apache.
the class PcjVisibilityIT method createWithVisibilityFluo.
@Test
public void createWithVisibilityFluo() throws Exception {
final String sparql = "SELECT ?customer ?worker ?city " + "{ " + "?customer <http://talksTo> ?worker. " + "?worker <http://livesIn> ?city. " + "?worker <http://worksAt> <http://Chipotle>. " + "}";
// Triples that will be streamed into Fluo after the PCJ has been created.
final Map<RyaStatement, String> streamedTriples = new HashMap<>();
addStatementVisibilityEntry(streamedTriples, new RyaStatement(new RyaURI("http://Alice"), new RyaURI("http://talksTo"), new RyaURI("http://Bob")), "A&B");
addStatementVisibilityEntry(streamedTriples, new RyaStatement(new RyaURI("http://Bob"), new RyaURI("http://livesIn"), new RyaURI("http://London")), "A");
addStatementVisibilityEntry(streamedTriples, new RyaStatement(new RyaURI("http://Bob"), new RyaURI("http://worksAt"), new RyaURI("http://Chipotle")), "B");
addStatementVisibilityEntry(streamedTriples, new RyaStatement(new RyaURI("http://Alice"), new RyaURI("http://talksTo"), new RyaURI("http://Charlie")), "B&C");
addStatementVisibilityEntry(streamedTriples, new RyaStatement(new RyaURI("http://Charlie"), new RyaURI("http://livesIn"), new RyaURI("http://London")), "B");
addStatementVisibilityEntry(streamedTriples, new RyaStatement(new RyaURI("http://Charlie"), new RyaURI("http://worksAt"), new RyaURI("http://Chipotle")), "C");
addStatementVisibilityEntry(streamedTriples, new RyaStatement(new RyaURI("http://Alice"), new RyaURI("http://talksTo"), new RyaURI("http://David")), "C&D");
addStatementVisibilityEntry(streamedTriples, new RyaStatement(new RyaURI("http://David"), new RyaURI("http://livesIn"), new RyaURI("http://London")), "C");
addStatementVisibilityEntry(streamedTriples, new RyaStatement(new RyaURI("http://David"), new RyaURI("http://worksAt"), new RyaURI("http://Chipotle")), "D");
addStatementVisibilityEntry(streamedTriples, new RyaStatement(new RyaURI("http://Alice"), new RyaURI("http://talksTo"), new RyaURI("http://Eve")), "D&E");
addStatementVisibilityEntry(streamedTriples, new RyaStatement(new RyaURI("http://Eve"), new RyaURI("http://livesIn"), new RyaURI("http://Leeds")), "D");
addStatementVisibilityEntry(streamedTriples, new RyaStatement(new RyaURI("http://Eve"), new RyaURI("http://worksAt"), new RyaURI("http://Chipotle")), "E");
addStatementVisibilityEntry(streamedTriples, new RyaStatement(new RyaURI("http://Frank"), new RyaURI("http://talksTo"), new RyaURI("http://Alice")), "");
addStatementVisibilityEntry(streamedTriples, new RyaStatement(new RyaURI("http://Frank"), new RyaURI("http://livesIn"), new RyaURI("http://London")), "");
addStatementVisibilityEntry(streamedTriples, new RyaStatement(new RyaURI("http://Frank"), new RyaURI("http://worksAt"), new RyaURI("http://Chipotle")), "");
final Connector accumuloConn = super.getAccumuloConnector();
// Create the PCJ Table in Accumulo.
final PrecomputedJoinStorage rootStorage = new AccumuloPcjStorage(accumuloConn, getRyaInstanceName());
final String pcjId = rootStorage.createPcj(sparql);
try (final FluoClient fluoClient = FluoFactory.newClient(super.getFluoConfiguration())) {
// Create the PCJ in Fluo.
new CreateFluoPcj().withRyaIntegration(pcjId, rootStorage, fluoClient, accumuloConn, getRyaInstanceName());
// Stream the data into Fluo.
for (final RyaStatement statement : streamedTriples.keySet()) {
final Optional<String> visibility = Optional.of(streamedTriples.get(statement));
new InsertTriples().insert(fluoClient, statement, visibility);
}
}
// Fetch the exported results from Accumulo once the observers finish working.
super.getMiniFluo().waitForObservers();
setupTestUsers(accumuloConn, getRyaInstanceName(), pcjId);
// Verify ABCDE using root.
final Set<BindingSet> rootResults = toSet(rootStorage.listResults(pcjId));
final Set<BindingSet> rootExpected = Sets.newHashSet();
MapBindingSet bs = new MapBindingSet();
bs.addBinding("customer", VF.createURI("http://Alice"));
bs.addBinding("worker", VF.createURI("http://Bob"));
bs.addBinding("city", VF.createURI("http://London"));
rootExpected.add(bs);
bs = new MapBindingSet();
bs.addBinding("customer", VF.createURI("http://Alice"));
bs.addBinding("worker", VF.createURI("http://Charlie"));
bs.addBinding("city", VF.createURI("http://London"));
rootExpected.add(bs);
bs = new MapBindingSet();
bs.addBinding("customer", VF.createURI("http://Alice"));
bs.addBinding("worker", VF.createURI("http://Eve"));
bs.addBinding("city", VF.createURI("http://Leeds"));
rootExpected.add(bs);
bs = new MapBindingSet();
bs.addBinding("customer", VF.createURI("http://Alice"));
bs.addBinding("worker", VF.createURI("http://David"));
bs.addBinding("city", VF.createURI("http://London"));
rootExpected.add(bs);
assertEquals(rootExpected, rootResults);
final MiniAccumuloCluster cluster = super.getMiniAccumuloCluster();
// Verify AB
final Connector abConn = cluster.getConnector("abUser", "password");
try (final PrecomputedJoinStorage abStorage = new AccumuloPcjStorage(abConn, getRyaInstanceName())) {
final Set<BindingSet> abResults = toSet(abStorage.listResults(pcjId));
final Set<BindingSet> abExpected = Sets.newHashSet();
bs = new MapBindingSet();
bs.addBinding("customer", VF.createURI("http://Alice"));
bs.addBinding("worker", VF.createURI("http://Bob"));
bs.addBinding("city", VF.createURI("http://London"));
abExpected.add(bs);
assertEquals(abExpected, abResults);
}
// Verify ABC
final Connector abcConn = cluster.getConnector("abcUser", "password");
try (final PrecomputedJoinStorage abcStorage = new AccumuloPcjStorage(abcConn, getRyaInstanceName())) {
final Set<BindingSet> abcResults = toSet(abcStorage.listResults(pcjId));
final Set<BindingSet> abcExpected = Sets.newHashSet();
bs = new MapBindingSet();
bs.addBinding("customer", VF.createURI("http://Alice"));
bs.addBinding("worker", VF.createURI("http://Bob"));
bs.addBinding("city", VF.createURI("http://London"));
abcExpected.add(bs);
bs = new MapBindingSet();
bs.addBinding("customer", VF.createURI("http://Alice"));
bs.addBinding("worker", VF.createURI("http://Charlie"));
bs.addBinding("city", VF.createURI("http://London"));
abcExpected.add(bs);
assertEquals(abcExpected, abcResults);
}
// Verify ADE
final Connector adeConn = cluster.getConnector("adeUser", "password");
try (final PrecomputedJoinStorage adeStorage = new AccumuloPcjStorage(adeConn, getRyaInstanceName())) {
final Set<BindingSet> adeResults = toSet(adeStorage.listResults(pcjId));
final Set<BindingSet> adeExpected = Sets.newHashSet();
bs = new MapBindingSet();
bs.addBinding("customer", VF.createURI("http://Alice"));
bs.addBinding("worker", VF.createURI("http://Eve"));
bs.addBinding("city", VF.createURI("http://Leeds"));
adeExpected.add(bs);
assertEquals(adeExpected, adeResults);
}
// Verify no auths.
final Connector noAuthConn = cluster.getConnector("noAuth", "password");
try (final PrecomputedJoinStorage noAuthStorage = new AccumuloPcjStorage(noAuthConn, getRyaInstanceName())) {
final Set<BindingSet> noAuthResults = toSet(noAuthStorage.listResults(pcjId));
assertTrue(noAuthResults.isEmpty());
}
}
use of org.apache.rya.indexing.pcj.fluo.api.InsertTriples in project incubator-rya by apache.
the class BatchIT method simpleScanDelete.
@Test
public void simpleScanDelete() throws Exception {
final String sparql = "SELECT ?subject ?object1 ?object2 WHERE { ?subject <urn:predicate_1> ?object1; " + " <urn:predicate_2> ?object2 } ";
try (FluoClient fluoClient = new FluoClientImpl(getFluoConfiguration())) {
RyaURI subj = new RyaURI("urn:subject_1");
RyaStatement statement1 = new RyaStatement(subj, new RyaURI("urn:predicate_1"), null);
RyaStatement statement2 = new RyaStatement(subj, new RyaURI("urn:predicate_2"), null);
Set<RyaStatement> statements1 = getRyaStatements(statement1, 10);
Set<RyaStatement> statements2 = getRyaStatements(statement2, 10);
// Create the PCJ table.
final PrecomputedJoinStorage pcjStorage = new AccumuloPcjStorage(getAccumuloConnector(), getRyaInstanceName());
final String pcjId = pcjStorage.createPcj(sparql);
// Tell the Fluo app to maintain the PCJ.
String queryId = new CreateFluoPcj().withRyaIntegration(pcjId, pcjStorage, fluoClient, getAccumuloConnector(), getRyaInstanceName()).getQueryId();
List<String> ids = getNodeIdStrings(fluoClient, queryId);
List<String> prefixes = Arrays.asList("urn:subject_1", "urn:subject_1", "urn:object", "urn:subject_1", "urn:subject_1");
// Stream the data into Fluo.
InsertTriples inserter = new InsertTriples();
inserter.insert(fluoClient, statements1, Optional.absent());
inserter.insert(fluoClient, statements2, Optional.absent());
// Verify the end results of the query match the expected results.
getMiniFluo().waitForObservers();
verifyCounts(fluoClient, ids, Arrays.asList(100, 100, 100, 10, 10));
createSpanBatches(fluoClient, ids, prefixes, 10);
getMiniFluo().waitForObservers();
verifyCounts(fluoClient, ids, Arrays.asList(0, 0, 0, 0, 0));
}
}
use of org.apache.rya.indexing.pcj.fluo.api.InsertTriples in project incubator-rya by apache.
the class InputIT method historicAndStreamConflict.
/**
* Simulates the case where a Triple is added to Rya, a new query that
* includes the triple as a historic match is inserted into Fluo, and then
* the same triple is streamed into Fluo. The query's results will already
* include the Triple because they were added while the query was being
* created. This case should not fail or effect the end results in any way.
*/
@Test
public void historicAndStreamConflict() throws Exception {
// A query that finds people who talk to Eve and work at Chipotle.
final String sparql = "SELECT ?x WHERE { " + "?x <http://talksTo> <http://Eve>. " + "?x <http://worksAt> <http://Chipotle>." + "}";
// Triples that are loaded into Rya before the PCJ is created.
final ValueFactory vf = new ValueFactoryImpl();
final Set<Statement> historicTriples = Sets.newHashSet(vf.createStatement(vf.createURI("http://Alice"), vf.createURI("http://talksTo"), vf.createURI("http://Eve")), vf.createStatement(vf.createURI("http://Alice"), vf.createURI("http://worksAt"), vf.createURI("http://Chipotle")));
// Triples that will be streamed into Fluo after the PCJ has been created.
final Set<RyaStatement> streamedTriples = Sets.newHashSet(new RyaStatement(new RyaURI("http://Alice"), new RyaURI("http://talksTo"), new RyaURI("http://Eve")), new RyaStatement(new RyaURI("http://Alice"), new RyaURI("http://worksAt"), new RyaURI("http://Chipotle")));
// The expected final result.
final Set<BindingSet> expected = new HashSet<>();
final MapBindingSet bs = new MapBindingSet();
bs.addBinding("x", vf.createURI("http://Alice"));
expected.add(bs);
// Load the historic data into Rya.
final SailRepositoryConnection ryaConn = super.getRyaSailRepository().getConnection();
for (final Statement triple : historicTriples) {
ryaConn.add(triple);
}
ryaConn.close();
// Create the PCJ table.
final Connector accumuloConn = super.getAccumuloConnector();
final PrecomputedJoinStorage pcjStorage = new AccumuloPcjStorage(accumuloConn, getRyaInstanceName());
final String pcjId = pcjStorage.createPcj(sparql);
try (FluoClient fluoClient = FluoFactory.newClient(super.getFluoConfiguration())) {
// Tell the Fluo app to maintain the PCJ.
new CreateFluoPcj().withRyaIntegration(pcjId, pcjStorage, fluoClient, accumuloConn, getRyaInstanceName());
// Ensure Alice is a match.
super.getMiniFluo().waitForObservers();
Set<BindingSet> results = new HashSet<>();
try (CloseableIterator<BindingSet> resultsIt = pcjStorage.listResults(pcjId)) {
while (resultsIt.hasNext()) {
results.add(resultsIt.next());
}
}
assertEquals(expected, results);
// Stream the same Alice triple into Fluo.
new InsertTriples().insert(fluoClient, streamedTriples, Optional.<String>absent());
// Verify the end results of the query is stiill only Alice.
super.getMiniFluo().waitForObservers();
results = new HashSet<>();
try (CloseableIterator<BindingSet> resultsIt = pcjStorage.listResults(pcjId)) {
while (resultsIt.hasNext()) {
results.add(resultsIt.next());
}
}
assertEquals(expected, results);
}
}
Aggregations