Search in sources :

Example 16 with Row

use of com.datastax.driver.core.Row in project presto by prestodb.

the class NativeCassandraSession method getPartitions.

@Override
public List<CassandraPartition> getPartitions(CassandraTable table, List<Object> filterPrefix) {
    Iterable<Row> rows = queryPartitionKeys(table, filterPrefix);
    if (rows == null) {
        // just split the whole partition range
        return ImmutableList.of(CassandraPartition.UNPARTITIONED);
    }
    List<CassandraColumnHandle> partitionKeyColumns = table.getPartitionKeyColumns();
    ByteBuffer buffer = ByteBuffer.allocate(1000);
    HashMap<ColumnHandle, NullableValue> map = new HashMap<>();
    Set<String> uniquePartitionIds = new HashSet<>();
    StringBuilder stringBuilder = new StringBuilder();
    boolean isComposite = partitionKeyColumns.size() > 1;
    ImmutableList.Builder<CassandraPartition> partitions = ImmutableList.builder();
    for (Row row : rows) {
        buffer.clear();
        map.clear();
        stringBuilder.setLength(0);
        for (int i = 0; i < partitionKeyColumns.size(); i++) {
            ByteBuffer component = row.getBytesUnsafe(i);
            if (isComposite) {
                // build composite key
                short len = (short) component.limit();
                buffer.putShort(len);
                buffer.put(component);
                buffer.put((byte) 0);
            } else {
                buffer.put(component);
            }
            CassandraColumnHandle columnHandle = partitionKeyColumns.get(i);
            NullableValue keyPart = CassandraType.getColumnValueForPartitionKey(row, i, columnHandle.getCassandraType(), columnHandle.getTypeArguments());
            map.put(columnHandle, keyPart);
            if (i > 0) {
                stringBuilder.append(" AND ");
            }
            stringBuilder.append(CassandraCqlUtils.validColumnName(columnHandle.getName()));
            stringBuilder.append(" = ");
            stringBuilder.append(CassandraType.getColumnValueForCql(row, i, columnHandle.getCassandraType()));
        }
        buffer.flip();
        byte[] key = new byte[buffer.limit()];
        buffer.get(key);
        TupleDomain<ColumnHandle> tupleDomain = TupleDomain.fromFixedValues(map);
        String partitionId = stringBuilder.toString();
        if (uniquePartitionIds.add(partitionId)) {
            partitions.add(new CassandraPartition(key, partitionId, tupleDomain, false));
        }
    }
    return partitions.build();
}
Also used : ColumnHandle(com.facebook.presto.spi.ColumnHandle) HashMap(java.util.HashMap) ImmutableList(com.google.common.collect.ImmutableList) NullableValue(com.facebook.presto.spi.predicate.NullableValue) ByteBuffer(java.nio.ByteBuffer) Row(com.datastax.driver.core.Row) HashSet(java.util.HashSet)

Example 17 with Row

use of com.datastax.driver.core.Row in project presto by prestodb.

the class NativeCassandraSession method queryPartitionKeys.

protected Iterable<Row> queryPartitionKeys(CassandraTable table, List<Object> filterPrefix) {
    CassandraTableHandle tableHandle = table.getTableHandle();
    List<CassandraColumnHandle> partitionKeyColumns = table.getPartitionKeyColumns();
    if (filterPrefix.size() != partitionKeyColumns.size()) {
        return null;
    }
    Select partitionKeys = CassandraCqlUtils.selectDistinctFrom(tableHandle, partitionKeyColumns);
    addWhereClause(partitionKeys.where(), partitionKeyColumns, filterPrefix);
    return executeWithSession(session -> session.execute(partitionKeys)).all();
}
Also used : QueryBuilder(com.datastax.driver.core.querybuilder.QueryBuilder) Iterables(com.google.common.collect.Iterables) Iterables.transform(com.google.common.collect.Iterables.transform) Logger(io.airlift.log.Logger) Row(com.datastax.driver.core.Row) Clause(com.datastax.driver.core.querybuilder.Clause) Supplier(com.google.common.base.Supplier) HashMap(java.util.HashMap) ByteBuffer(java.nio.ByteBuffer) Duration(io.airlift.units.Duration) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) ReconnectionPolicy(com.datastax.driver.core.policies.ReconnectionPolicy) Predicates.in(com.google.common.base.Predicates.in) SchemaTableName(com.facebook.presto.spi.SchemaTableName) ImmutableList(com.google.common.collect.ImmutableList) Predicates.not(com.google.common.base.Predicates.not) SchemaNotFoundException(com.facebook.presto.spi.SchemaNotFoundException) Session(com.datastax.driver.core.Session) Objects.requireNonNull(java.util.Objects.requireNonNull) Comparator.comparing(java.util.Comparator.comparing) NullableValue(com.facebook.presto.spi.predicate.NullableValue) Suppliers.memoize(com.google.common.base.Suppliers.memoize) TableMetadata(com.datastax.driver.core.TableMetadata) ImmutableSet(com.google.common.collect.ImmutableSet) ColumnMetadata(com.datastax.driver.core.ColumnMetadata) Set(java.util.Set) NoHostAvailableException(com.datastax.driver.core.exceptions.NoHostAvailableException) IndexMetadata(com.datastax.driver.core.IndexMetadata) TupleDomain(com.facebook.presto.spi.predicate.TupleDomain) List(java.util.List) Collectors.toList(java.util.stream.Collectors.toList) TableNotFoundException(com.facebook.presto.spi.TableNotFoundException) Where(com.datastax.driver.core.querybuilder.Select.Where) KeyspaceMetadata(com.datastax.driver.core.KeyspaceMetadata) Ordering(com.google.common.collect.Ordering) ColumnHandle(com.facebook.presto.spi.ColumnHandle) Cluster(com.datastax.driver.core.Cluster) DataType(com.datastax.driver.core.DataType) Host(com.datastax.driver.core.Host) Select(com.datastax.driver.core.querybuilder.Select) CassandraCqlUtils(com.facebook.presto.cassandra.util.CassandraCqlUtils) Iterables.filter(com.google.common.collect.Iterables.filter) ReconnectionSchedule(com.datastax.driver.core.policies.ReconnectionPolicy.ReconnectionSchedule) JsonCodec(io.airlift.json.JsonCodec) Select(com.datastax.driver.core.querybuilder.Select)

Example 18 with Row

use of com.datastax.driver.core.Row in project cassandra by apache.

the class CqlInputFormat method describeSplits.

private Map<TokenRange, Long> describeSplits(String keyspace, String table, TokenRange tokenRange, int splitSize, int splitSizeMb, Session session) {
    String query = String.format("SELECT mean_partition_size, partitions_count " + "FROM %s.%s " + "WHERE keyspace_name = ? AND table_name = ? AND range_start = ? AND range_end = ?", SchemaConstants.SYSTEM_KEYSPACE_NAME, SystemKeyspace.SIZE_ESTIMATES);
    ResultSet resultSet = session.execute(query, keyspace, table, tokenRange.getStart().toString(), tokenRange.getEnd().toString());
    Row row = resultSet.one();
    long meanPartitionSize = 0;
    long partitionCount = 0;
    int splitCount = 0;
    if (row != null) {
        meanPartitionSize = row.getLong("mean_partition_size");
        partitionCount = row.getLong("partitions_count");
        splitCount = splitSizeMb > 0 ? (int) (meanPartitionSize * partitionCount / splitSizeMb / 1024 / 1024) : (int) (partitionCount / splitSize);
    }
    // Assume smallest granularity of partition count available from CASSANDRA-7688
    if (splitCount == 0) {
        Map<TokenRange, Long> wrappedTokenRange = new HashMap<>();
        wrappedTokenRange.put(tokenRange, (long) 128);
        return wrappedTokenRange;
    }
    List<TokenRange> splitRanges = tokenRange.splitEvenly(splitCount);
    Map<TokenRange, Long> rangesWithLength = new HashMap<>();
    for (TokenRange range : splitRanges) rangesWithLength.put(range, partitionCount / splitCount);
    return rangesWithLength;
}
Also used : ResultSet(com.datastax.driver.core.ResultSet) TokenRange(com.datastax.driver.core.TokenRange) Row(com.datastax.driver.core.Row)

Example 19 with Row

use of com.datastax.driver.core.Row in project cassandra by apache.

the class UFJavaTest method testJavaUserTypeWithUse.

@Test
public void testJavaUserTypeWithUse() throws Throwable {
    String type = createType("CREATE TYPE %s (txt text, i int)");
    createTable("CREATE TABLE %s (key int primary key, udt frozen<" + KEYSPACE + '.' + type + ">)");
    execute("INSERT INTO %s (key, udt) VALUES (1, {txt: 'one', i:1})");
    for (ProtocolVersion version : PROTOCOL_VERSIONS) {
        executeNet(version, "USE " + KEYSPACE);
        executeNet(version, "CREATE FUNCTION f_use1( udt " + type + " ) " + "RETURNS NULL ON NULL INPUT " + "RETURNS " + type + " " + "LANGUAGE java " + "AS $$return " + "     udt;$$;");
        try {
            List<Row> rowsNet = executeNet(version, "SELECT f_use1(udt) FROM %s WHERE key = 1").all();
            Assert.assertEquals(1, rowsNet.size());
            UDTValue udtVal = rowsNet.get(0).getUDTValue(0);
            Assert.assertEquals("one", udtVal.getString("txt"));
            Assert.assertEquals(1, udtVal.getInt("i"));
        } finally {
            executeNet(version, "DROP FUNCTION f_use1");
        }
    }
}
Also used : UDTValue(com.datastax.driver.core.UDTValue) Row(com.datastax.driver.core.Row) ProtocolVersion(org.apache.cassandra.transport.ProtocolVersion) Test(org.junit.Test)

Example 20 with Row

use of com.datastax.driver.core.Row in project cassandra by apache.

the class UFJavaTest method testJavaUserType.

@Test
public void testJavaUserType() throws Throwable {
    String type = KEYSPACE + '.' + createType("CREATE TYPE %s (txt text, i int)");
    createTable("CREATE TABLE %s (key int primary key, udt frozen<" + type + ">)");
    String fUdt0 = createFunction(KEYSPACE, type, "CREATE FUNCTION %s( udt " + type + " ) " + "RETURNS NULL ON NULL INPUT " + "RETURNS " + type + " " + "LANGUAGE java " + "AS $$return " + "     udt;$$;");
    String fUdt1 = createFunction(KEYSPACE, type, "CREATE FUNCTION %s( udt " + type + ") " + "RETURNS NULL ON NULL INPUT " + "RETURNS text " + "LANGUAGE java " + "AS $$return " + "     udt.getString(\"txt\");$$;");
    String fUdt2 = createFunction(KEYSPACE, type, "CREATE FUNCTION %s( udt " + type + ") " + "CALLED ON NULL INPUT " + "RETURNS int " + "LANGUAGE java " + "AS $$return " + "     Integer.valueOf(udt.getInt(\"i\"));$$;");
    execute("INSERT INTO %s (key, udt) VALUES (1, {txt: 'one', i:1})");
    UntypedResultSet rows = execute("SELECT " + fUdt0 + "(udt) FROM %s WHERE key = 1");
    Assert.assertEquals(1, rows.size());
    assertRows(execute("SELECT " + fUdt1 + "(udt) FROM %s WHERE key = 1"), row("one"));
    assertRows(execute("SELECT " + fUdt2 + "(udt) FROM %s WHERE key = 1"), row(1));
    for (ProtocolVersion version : PROTOCOL_VERSIONS) {
        List<Row> rowsNet = executeNet(version, "SELECT " + fUdt0 + "(udt) FROM %s WHERE key = 1").all();
        Assert.assertEquals(1, rowsNet.size());
        UDTValue udtVal = rowsNet.get(0).getUDTValue(0);
        Assert.assertEquals("one", udtVal.getString("txt"));
        Assert.assertEquals(1, udtVal.getInt("i"));
        assertRowsNet(version, executeNet(version, "SELECT " + fUdt1 + "(udt) FROM %s WHERE key = 1"), row("one"));
        assertRowsNet(version, executeNet(version, "SELECT " + fUdt2 + "(udt) FROM %s WHERE key = 1"), row(1));
    }
}
Also used : UntypedResultSet(org.apache.cassandra.cql3.UntypedResultSet) UDTValue(com.datastax.driver.core.UDTValue) Row(com.datastax.driver.core.Row) ProtocolVersion(org.apache.cassandra.transport.ProtocolVersion) Test(org.junit.Test)

Aggregations

Row (com.datastax.driver.core.Row)59 ResultSet (com.datastax.driver.core.ResultSet)35 Test (org.junit.Test)23 Session (com.datastax.driver.core.Session)10 ArrayList (java.util.ArrayList)10 BoundStatement (com.datastax.driver.core.BoundStatement)9 Cluster (com.datastax.driver.core.Cluster)9 Statement (com.datastax.driver.core.Statement)7 List (java.util.List)6 ImmutableList (com.google.common.collect.ImmutableList)5 HashSet (java.util.HashSet)5 PreparedStatement (com.datastax.driver.core.PreparedStatement)4 Select (com.datastax.driver.core.querybuilder.Select)4 ByteBuffer (java.nio.ByteBuffer)4 BatchStatement (com.datastax.driver.core.BatchStatement)3 Update (com.datastax.driver.core.querybuilder.Update)3 HashMap (java.util.HashMap)3 ProtocolVersion (org.apache.cassandra.transport.ProtocolVersion)3 TypeHint (org.apache.flink.api.common.typeinfo.TypeHint)3 ColumnDefinitions (com.datastax.driver.core.ColumnDefinitions)2