Search in sources :

Example 11 with FixedSplitSource

use of com.facebook.presto.spi.FixedSplitSource in project presto by prestodb.

the class RedisSplitManager method getSplits.

@Override
public ConnectorSplitSource getSplits(ConnectorTransactionHandle transaction, ConnectorSession session, ConnectorTableLayoutHandle layout) {
    RedisTableHandle redisTableHandle = convertLayout(layout).getTable();
    List<HostAddress> nodes = new ArrayList<>(redisConnectorConfig.getNodes());
    Collections.shuffle(nodes);
    checkState(!nodes.isEmpty(), "No Redis nodes available");
    ImmutableList.Builder<ConnectorSplit> builder = ImmutableList.builder();
    long numberOfKeys = 1;
    // splits by splitting zset in chunks
    if (redisTableHandle.getKeyDataFormat().equals("zset")) {
        try (Jedis jedis = jedisManager.getJedisPool(nodes.get(0)).getResource()) {
            numberOfKeys = jedis.zcount(redisTableHandle.getKeyName(), "-inf", "+inf");
        } catch (Exception e) {
            throw Throwables.propagate(e);
        }
    }
    long stride = REDIS_STRIDE_SPLITS;
    if (numberOfKeys / stride > REDIS_MAX_SPLITS) {
        stride = numberOfKeys / REDIS_MAX_SPLITS;
    }
    for (long startIndex = 0; startIndex < numberOfKeys; startIndex += stride) {
        long endIndex = startIndex + stride - 1;
        if (endIndex >= numberOfKeys) {
            endIndex = -1;
        }
        RedisSplit split = new RedisSplit(connectorId, redisTableHandle.getSchemaName(), redisTableHandle.getTableName(), redisTableHandle.getKeyDataFormat(), redisTableHandle.getValueDataFormat(), redisTableHandle.getKeyName(), startIndex, endIndex, nodes);
        builder.add(split);
    }
    return new FixedSplitSource(builder.build());
}
Also used : Jedis(redis.clients.jedis.Jedis) ImmutableList(com.google.common.collect.ImmutableList) FixedSplitSource(com.facebook.presto.spi.FixedSplitSource) ArrayList(java.util.ArrayList) HostAddress(com.facebook.presto.spi.HostAddress) ConnectorSplit(com.facebook.presto.spi.ConnectorSplit)

Aggregations

FixedSplitSource (com.facebook.presto.spi.FixedSplitSource)11 ConnectorSplit (com.facebook.presto.spi.ConnectorSplit)10 ImmutableList (com.google.common.collect.ImmutableList)8 HostAddress (com.facebook.presto.spi.HostAddress)5 ColumnHandle (com.facebook.presto.spi.ColumnHandle)3 Node (com.facebook.presto.spi.Node)3 ArrayList (java.util.ArrayList)3 ConnectorSession (com.facebook.presto.spi.ConnectorSession)2 ConnectorSplitSource (com.facebook.presto.spi.ConnectorSplitSource)2 ConnectorTableLayoutHandle (com.facebook.presto.spi.ConnectorTableLayoutHandle)2 ConnectorSplitManager (com.facebook.presto.spi.connector.ConnectorSplitManager)2 ConnectorTransactionHandle (com.facebook.presto.spi.connector.ConnectorTransactionHandle)2 Domain (com.facebook.presto.spi.predicate.Domain)2 NullableValue (com.facebook.presto.spi.predicate.NullableValue)2 TupleDomain (com.facebook.presto.spi.predicate.TupleDomain)2 ImmutableMap (com.google.common.collect.ImmutableMap)2 List (java.util.List)2 Objects.requireNonNull (java.util.Objects.requireNonNull)2 AccumuloColumnConstraint (com.facebook.presto.accumulo.model.AccumuloColumnConstraint)1 AccumuloSplit (com.facebook.presto.accumulo.model.AccumuloSplit)1