use of org.apache.rya.api.RdfCloudTripleStoreConstants.TABLE_LAYOUT in project incubator-rya by apache.
the class HashedSpoWholeRowTriplePatternStrategy method defineRange.
@Override
public Map.Entry<TABLE_LAYOUT, ByteRange> defineRange(final RyaURI subject, final RyaURI predicate, final RyaType object, final RyaURI context, final RdfCloudTripleStoreConfiguration conf) throws IOException {
try {
// s_r(p)(ng)
if (!handles(subject, predicate, object, context)) {
return null;
}
final MessageDigest md = MessageDigest.getInstance("MD5");
final RyaContext ryaContext = RyaContext.getInstance();
final TABLE_LAYOUT table_layout = TABLE_LAYOUT.SPO;
byte[] start;
byte[] stop;
if (predicate != null) {
if (object != null) {
if (object instanceof RyaRange) {
// sp_r(o)
// range = sp_r(o.s)->sp_r(o.e) (remove last byte to remove type info)
RyaRange rv = (RyaRange) object;
rv = ryaContext.transformRange(rv);
final byte[] objStartBytes = ryaContext.serializeType(rv.getStart())[0];
final byte[] objEndBytes = ryaContext.serializeType(rv.getStop())[0];
final byte[] subjBytes = subject.getData().getBytes(StandardCharsets.UTF_8);
final byte[] hashSubj = Hex.encodeHexString(md.digest(subjBytes)).getBytes(StandardCharsets.UTF_8);
final byte[] predBytes = predicate.getData().getBytes(StandardCharsets.UTF_8);
start = Bytes.concat(hashSubj, DELIM_BYTES, subjBytes, DELIM_BYTES, predBytes, DELIM_BYTES, objStartBytes);
stop = Bytes.concat(hashSubj, DELIM_BYTES, subjBytes, DELIM_BYTES, predBytes, DELIM_BYTES, objEndBytes, DELIM_BYTES, LAST_BYTES);
} else {
// spo
// range = spo->spo (remove last byte to remove type info)
// TODO: There must be a better way than creating multiple byte[]
final byte[] subjBytes = subject.getData().getBytes(StandardCharsets.UTF_8);
final byte[] hashSubj = Hex.encodeHexString(md.digest(subjBytes)).getBytes(StandardCharsets.UTF_8);
final byte[] objBytes = ryaContext.serializeType(object)[0];
start = Bytes.concat(hashSubj, DELIM_BYTES, subjBytes, DELIM_BYTES, predicate.getData().getBytes(StandardCharsets.UTF_8), DELIM_BYTES, objBytes, TYPE_DELIM_BYTES);
stop = Bytes.concat(start, LAST_BYTES);
}
} else if (predicate instanceof RyaRange) {
// s_r(p)
// range = s_r(p.s)->s_r(p.e)
RyaRange rv = (RyaRange) predicate;
rv = ryaContext.transformRange(rv);
final byte[] subjBytes = subject.getData().getBytes(StandardCharsets.UTF_8);
final byte[] hashSubj = Hex.encodeHexString(md.digest(subjBytes)).getBytes(StandardCharsets.UTF_8);
final byte[] predStartBytes = rv.getStart().getData().getBytes(StandardCharsets.UTF_8);
final byte[] predStopBytes = rv.getStop().getData().getBytes(StandardCharsets.UTF_8);
start = Bytes.concat(hashSubj, DELIM_BYTES, subjBytes, DELIM_BYTES, predStartBytes);
stop = Bytes.concat(hashSubj, DELIM_BYTES, subjBytes, DELIM_BYTES, predStopBytes, DELIM_BYTES, LAST_BYTES);
} else {
// sp
// range = sp
final byte[] subjBytes = subject.getData().getBytes(StandardCharsets.UTF_8);
final byte[] hashSubj = Hex.encodeHexString(md.digest(subjBytes)).getBytes(StandardCharsets.UTF_8);
start = Bytes.concat(hashSubj, DELIM_BYTES, subjBytes, DELIM_BYTES, predicate.getData().getBytes(StandardCharsets.UTF_8), DELIM_BYTES);
stop = Bytes.concat(start, LAST_BYTES);
}
} else {
// s
// range = s
final byte[] subjBytes = subject.getData().getBytes(StandardCharsets.UTF_8);
final byte[] hashSubj = Hex.encodeHexString(md.digest(subjBytes)).getBytes(StandardCharsets.UTF_8);
start = Bytes.concat(hashSubj, DELIM_BYTES, subjBytes, DELIM_BYTES);
stop = Bytes.concat(start, LAST_BYTES);
}
return new RdfCloudTripleStoreUtils.CustomEntry<TABLE_LAYOUT, ByteRange>(table_layout, new ByteRange(start, stop));
} catch (final RyaTypeResolverException e) {
throw new IOException(e);
} catch (final NoSuchAlgorithmException e) {
throw new IOException(e);
}
}
use of org.apache.rya.api.RdfCloudTripleStoreConstants.TABLE_LAYOUT in project incubator-rya by apache.
the class OspWholeRowTriplePatternStrategy method defineRange.
@Override
public Map.Entry<TABLE_LAYOUT, ByteRange> defineRange(final RyaURI subject, final RyaURI predicate, final RyaType object, final RyaURI context, final RdfCloudTripleStoreConfiguration conf) throws IOException {
try {
// r(o)
if (!handles(subject, predicate, object, context)) {
return null;
}
final RyaContext ryaContext = RyaContext.getInstance();
final TABLE_LAYOUT table_layout = TABLE_LAYOUT.OSP;
byte[] start, stop;
if (subject != null) {
if (subject instanceof RyaRange) {
// o_r(s)
RyaRange ru = (RyaRange) subject;
ru = ryaContext.transformRange(ru);
final byte[] subjStartBytes = ru.getStart().getData().getBytes(StandardCharsets.UTF_8);
final byte[] subjEndBytes = ru.getStop().getData().getBytes(StandardCharsets.UTF_8);
final byte[] objBytes = ryaContext.serializeType(object)[0];
start = Bytes.concat(objBytes, DELIM_BYTES, subjStartBytes);
stop = Bytes.concat(objBytes, DELIM_BYTES, subjEndBytes, DELIM_BYTES, LAST_BYTES);
} else {
// os
final byte[] objBytes = ryaContext.serializeType(object)[0];
start = Bytes.concat(objBytes, DELIM_BYTES, subject.getData().getBytes(StandardCharsets.UTF_8), DELIM_BYTES);
stop = Bytes.concat(start, LAST_BYTES);
}
} else {
if (object instanceof RyaRange) {
// r(o)
RyaRange rv = (RyaRange) object;
rv = ryaContext.transformRange(rv);
start = ryaContext.serializeType(rv.getStart())[0];
stop = Bytes.concat(ryaContext.serializeType(rv.getStop())[0], DELIM_BYTES, LAST_BYTES);
} else {
// o
start = Bytes.concat(ryaContext.serializeType(object)[0], DELIM_BYTES);
stop = Bytes.concat(start, LAST_BYTES);
}
}
return new RdfCloudTripleStoreUtils.CustomEntry<TABLE_LAYOUT, ByteRange>(table_layout, new ByteRange(start, stop));
} catch (final RyaTypeResolverException e) {
throw new IOException(e);
}
}
use of org.apache.rya.api.RdfCloudTripleStoreConstants.TABLE_LAYOUT in project incubator-rya by apache.
the class WholeRowHashedTripleResolver method serialize.
@Override
public Map<TABLE_LAYOUT, TripleRow> serialize(final RyaStatement stmt) throws TripleRowResolverException {
try {
final RyaURI subject = stmt.getSubject();
final RyaURI predicate = stmt.getPredicate();
final RyaType object = stmt.getObject();
final RyaURI context = stmt.getContext();
final Long timestamp = stmt.getTimestamp();
final byte[] columnVisibility = stmt.getColumnVisibility();
final String qualifer = stmt.getQualifer();
final byte[] qualBytes = qualifer == null ? EMPTY_BYTES : qualifer.getBytes(StandardCharsets.UTF_8);
final byte[] value = stmt.getValue();
assert subject != null && predicate != null && object != null;
final byte[] cf = (context == null) ? EMPTY_BYTES : context.getData().getBytes(StandardCharsets.UTF_8);
final Map<TABLE_LAYOUT, TripleRow> tripleRowMap = new HashMap<TABLE_LAYOUT, TripleRow>();
final MessageDigest md = MessageDigest.getInstance("MD5");
final byte[] subjBytes = subject.getData().getBytes(StandardCharsets.UTF_8);
final byte[] subjHashBytes = md.digest(subjBytes);
final byte[] predBytes = predicate.getData().getBytes(StandardCharsets.UTF_8);
final byte[] predHashBytes = md.digest(predBytes);
final byte[][] objBytes = RyaContext.getInstance().serializeType(object);
tripleRowMap.put(TABLE_LAYOUT.SPO, new TripleRow(Bytes.concat(Hex.encodeHexString(subjHashBytes).getBytes(StandardCharsets.UTF_8), DELIM_BYTES, subjBytes, DELIM_BYTES, predBytes, DELIM_BYTES, objBytes[0], objBytes[1]), cf, qualBytes, timestamp, columnVisibility, value));
tripleRowMap.put(TABLE_LAYOUT.PO, new TripleRow(Bytes.concat(Hex.encodeHexString(predHashBytes).getBytes(StandardCharsets.UTF_8), DELIM_BYTES, predBytes, DELIM_BYTES, objBytes[0], DELIM_BYTES, subjBytes, objBytes[1]), cf, qualBytes, timestamp, columnVisibility, value));
tripleRowMap.put(TABLE_LAYOUT.OSP, new TripleRow(Bytes.concat(objBytes[0], DELIM_BYTES, subjBytes, DELIM_BYTES, predBytes, objBytes[1]), cf, qualBytes, timestamp, columnVisibility, value));
return tripleRowMap;
} catch (final RyaTypeResolverException e) {
throw new TripleRowResolverException(e);
} catch (final NoSuchAlgorithmException e) {
throw new TripleRowResolverException(e);
}
}
use of org.apache.rya.api.RdfCloudTripleStoreConstants.TABLE_LAYOUT in project incubator-rya by apache.
the class AccumuloQueryRuleset method getRange.
/**
* Turn a single StatementPattern into a Range.
* @param conf
* @throws IOException if the range can't be resolved
*/
private Map.Entry<TABLE_LAYOUT, ByteRange> getRange(final StatementPattern sp) throws IOException {
final Var context = sp.getContextVar();
final Statement stmt = new NullableStatementImpl((Resource) sp.getSubjectVar().getValue(), (URI) sp.getPredicateVar().getValue(), sp.getObjectVar().getValue(), context == null ? null : (Resource) context.getValue());
final RyaStatement rs = RdfToRyaConversions.convertStatement(stmt);
final TriplePatternStrategy strategy = ryaContext.retrieveStrategy(rs);
final Map.Entry<TABLE_LAYOUT, ByteRange> entry = strategy.defineRange(rs.getSubject(), rs.getPredicate(), rs.getObject(), rs.getContext(), conf);
return entry;
}
use of org.apache.rya.api.RdfCloudTripleStoreConstants.TABLE_LAYOUT in project incubator-rya by apache.
the class MergeToolMapper method writeRyaMutations.
private void writeRyaMutations(final RyaStatement ryaStatement, final Context context, final boolean isDelete) throws IOException, InterruptedException {
if (ryaStatement.getColumnVisibility() == null) {
ryaStatement.setColumnVisibility(AccumuloRdfConstants.EMPTY_CV.getExpression());
}
final Map<TABLE_LAYOUT, Collection<Mutation>> mutationMap = ryaTableMutationFactory.serialize(ryaStatement);
final Collection<Mutation> spoMutations = mutationMap.get(TABLE_LAYOUT.SPO);
final Collection<Mutation> poMutations = mutationMap.get(TABLE_LAYOUT.PO);
final Collection<Mutation> ospMutations = mutationMap.get(TABLE_LAYOUT.OSP);
for (final Mutation mutation : spoMutations) {
writeMutation(spoTable, mutation, context, isDelete);
}
for (final Mutation mutation : poMutations) {
writeMutation(poTable, mutation, context, isDelete);
}
for (final Mutation mutation : ospMutations) {
writeMutation(ospTable, mutation, context, isDelete);
}
}
Aggregations