use of io.confluent.ksql.GenericKey in project ksql by confluentinc.
the class SessionStoreCacheBypass method fetchRangeUncached.
/*
This method is used for range queries. It is invoked by the fetchRange method
*/
private static KeyValueIterator<Windowed<GenericKey>, GenericRow> fetchRangeUncached(final ReadOnlySessionStore<GenericKey, GenericRow> sessionStore, final GenericKey keyFrom, final GenericKey keyTo) {
if (!(sessionStore instanceof MeteredSessionStore)) {
throw new IllegalStateException("Expecting a MeteredSessionStore");
} else {
final StateSerdes<GenericKey, GenericRow> serdes = getSerdes(sessionStore);
final Bytes rawKeyFrom = Bytes.wrap(serdes.rawKey(keyFrom));
final Bytes rawKeyTo = Bytes.wrap(serdes.rawKey(keyTo));
final SessionStore<Bytes, byte[]> wrapped = getInnermostStore(sessionStore);
final KeyValueIterator<Windowed<Bytes>, byte[]> fetch = wrapped.fetch(rawKeyFrom, rawKeyTo);
return new DeserializingIterator(fetch, serdes);
}
}
use of io.confluent.ksql.GenericKey in project ksql by confluentinc.
the class SessionStoreCacheBypass method fetchUncached.
/*
This method is used for single key lookups. It is invoked by the fetch method
*/
private static KeyValueIterator<Windowed<GenericKey>, GenericRow> fetchUncached(final ReadOnlySessionStore<GenericKey, GenericRow> sessionStore, final GenericKey key) {
if (!(sessionStore instanceof MeteredSessionStore)) {
throw new IllegalStateException("Expecting a MeteredSessionStore");
} else {
final StateSerdes<GenericKey, GenericRow> serdes = getSerdes(sessionStore);
final Bytes rawKey = Bytes.wrap(serdes.rawKey(key));
final SessionStore<Bytes, byte[]> wrapped = getInnermostStore(sessionStore);
final KeyValueIterator<Windowed<Bytes>, byte[]> fetch = wrapped.fetch(rawKey);
return new DeserializingIterator(fetch, serdes);
}
}
use of io.confluent.ksql.GenericKey in project ksql by confluentinc.
the class SourceBuilder method buildTableMaterialized.
@Override
Materialized<GenericKey, GenericRow, KeyValueStore<Bytes, byte[]>> buildTableMaterialized(final SourceStep<KTableHolder<GenericKey>> source, final RuntimeBuildContext buildContext, final MaterializedFactory materializedFactory, final Serde<GenericKey> sourceKeySerde, final Serde<GenericRow> sourceValueSerde, final String stateStoreName) {
final PhysicalSchema physicalSchema = getPhysicalSchemaWithPseudoColumnsToMaterialize(source);
final QueryContext queryContext = addMaterializedContext(source);
final Serde<GenericRow> valueSerdeToMaterialize = getValueSerde(buildContext, source, physicalSchema, queryContext);
final Serde<GenericKey> keySerdeToMaterialize = getKeySerde(source, physicalSchema, buildContext, queryContext);
return materializedFactory.create(keySerdeToMaterialize, valueSerdeToMaterialize, stateStoreName);
}
use of io.confluent.ksql.GenericKey in project ksql by confluentinc.
the class KsMaterializedTableIQv2 method get.
@Override
public KsMaterializedQueryResult<Row> get(final int partition, final Optional<Position> position) {
try {
final RangeQuery<GenericKey, ValueAndTimestamp<GenericRow>> query = RangeQuery.withNoBounds();
StateQueryRequest<KeyValueIterator<GenericKey, ValueAndTimestamp<GenericRow>>> request = inStore(stateStore.getStateStoreName()).withQuery(query).withPartitions(ImmutableSet.of(partition));
if (position.isPresent()) {
request = request.withPositionBound(PositionBound.at(position.get()));
}
final StateQueryResult<KeyValueIterator<GenericKey, ValueAndTimestamp<GenericRow>>> result = stateStore.getKafkaStreams().query(request);
final QueryResult<KeyValueIterator<GenericKey, ValueAndTimestamp<GenericRow>>> queryResult = result.getPartitionResults().get(partition);
if (queryResult.isFailure()) {
throw failedQueryException(queryResult);
} else if (queryResult.getResult() == null) {
return KsMaterializedQueryResult.rowIteratorWithPosition(Collections.emptyIterator(), queryResult.getPosition());
} else {
final KeyValueIterator<GenericKey, ValueAndTimestamp<GenericRow>> iterator = queryResult.getResult();
return KsMaterializedQueryResult.rowIteratorWithPosition(Streams.stream(IteratorUtil.onComplete(iterator, iterator::close)).map(keyValue -> Row.of(stateStore.schema(), keyValue.key, keyValue.value.value(), keyValue.value.timestamp())).iterator(), queryResult.getPosition());
}
} catch (final NotUpToBoundException | MaterializationException e) {
throw e;
} catch (final Exception e) {
throw new MaterializationException("Failed to scan materialized table", e);
}
}
use of io.confluent.ksql.GenericKey in project ksql by confluentinc.
the class KsMaterializedTableIQv2 method get.
// CHECKSTYLE_RULES.OFF: CyclomaticComplexity
@Override
public KsMaterializedQueryResult<Row> get(final int partition, final GenericKey from, final GenericKey to, final Optional<Position> position) {
// CHECKSTYLE_RULES.ON: CyclomaticComplexity
try {
final RangeQuery<GenericKey, ValueAndTimestamp<GenericRow>> query;
if (from != null && to != null) {
query = RangeQuery.withRange(from, to);
} else if (from == null && to != null) {
query = RangeQuery.withUpperBound(to);
} else if (from != null && to == null) {
query = RangeQuery.withLowerBound(from);
} else {
query = RangeQuery.withNoBounds();
}
StateQueryRequest<KeyValueIterator<GenericKey, ValueAndTimestamp<GenericRow>>> request = inStore(stateStore.getStateStoreName()).withQuery(query).withPartitions(ImmutableSet.of(partition));
if (position.isPresent()) {
request = request.withPositionBound(PositionBound.at(position.get()));
}
final StateQueryResult<KeyValueIterator<GenericKey, ValueAndTimestamp<GenericRow>>> result = stateStore.getKafkaStreams().query(request);
final QueryResult<KeyValueIterator<GenericKey, ValueAndTimestamp<GenericRow>>> queryResult = result.getPartitionResults().get(partition);
if (queryResult.isFailure()) {
throw failedQueryException(queryResult);
} else if (queryResult.getResult() == null) {
return KsMaterializedQueryResult.rowIteratorWithPosition(Collections.emptyIterator(), queryResult.getPosition());
} else {
final KeyValueIterator<GenericKey, ValueAndTimestamp<GenericRow>> iterator = queryResult.getResult();
return KsMaterializedQueryResult.rowIteratorWithPosition(Streams.stream(IteratorUtil.onComplete(iterator, iterator::close)).map(keyValue -> Row.of(stateStore.schema(), keyValue.key, keyValue.value.value(), keyValue.value.timestamp())).iterator(), queryResult.getPosition());
}
} catch (final NotUpToBoundException | MaterializationException e) {
throw e;
} catch (final Exception e) {
throw new MaterializationException("Failed to range scan materialized table", e);
}
}
Aggregations