use of io.trino.spi.connector.ConnectorSplit in project trino by trinodb.
the class RedisSplitManager method getSplits.
@Override
public ConnectorSplitSource getSplits(ConnectorTransactionHandle transaction, ConnectorSession session, ConnectorTableHandle table, SplitSchedulingStrategy splitSchedulingStrategy, DynamicFilter dynamicFilter) {
RedisTableHandle redisTableHandle = (RedisTableHandle) table;
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");
}
}
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(redisTableHandle.getSchemaName(), redisTableHandle.getTableName(), redisTableHandle.getKeyDataFormat(), redisTableHandle.getValueDataFormat(), redisTableHandle.getKeyName(), startIndex, endIndex, nodes);
builder.add(split);
}
return new FixedSplitSource(builder.build());
}
use of io.trino.spi.connector.ConnectorSplit in project trino by trinodb.
the class AbstractTestHive method testPartitionSchemaNonCanonical.
// TODO coercion of non-canonical values should be supported
@Test(enabled = false)
public void testPartitionSchemaNonCanonical() throws Exception {
try (Transaction transaction = newTransaction()) {
ConnectorSession session = newSession();
ConnectorMetadata metadata = transaction.getMetadata();
ConnectorTableHandle table = getTableHandle(metadata, tablePartitionSchemaChangeNonCanonical);
ColumnHandle column = metadata.getColumnHandles(session, table).get("t_boolean");
Constraint constraint = new Constraint(TupleDomain.fromFixedValues(ImmutableMap.of(column, NullableValue.of(BOOLEAN, false))));
table = applyFilter(metadata, table, constraint);
HivePartition partition = getOnlyElement(((HiveTableHandle) table).getPartitions().orElseThrow(AssertionError::new));
assertEquals(getPartitionId(partition), "t_boolean=0");
ConnectorSplitSource splitSource = getSplits(splitManager, transaction, session, table);
ConnectorSplit split = getOnlyElement(getAllSplits(splitSource));
ImmutableList<ColumnHandle> columnHandles = ImmutableList.of(column);
try (ConnectorPageSource ignored = pageSourceProvider.createPageSource(transaction.getTransactionHandle(), session, split, table, columnHandles, DynamicFilter.EMPTY)) {
fail("expected exception");
} catch (TrinoException e) {
assertEquals(e.getErrorCode(), HIVE_INVALID_PARTITION_VALUE.toErrorCode());
}
}
}
use of io.trino.spi.connector.ConnectorSplit in project trino by trinodb.
the class InformationSchemaSplitManager method getSplits.
@Override
public ConnectorSplitSource getSplits(ConnectorTransactionHandle transaction, ConnectorSession session, ConnectorTableHandle table, SplitSchedulingStrategy splitSchedulingStrategy, DynamicFilter dynamicFilter) {
List<HostAddress> localAddress = ImmutableList.of(nodeManager.getCurrentNode().getHostAndPort());
ConnectorSplit split = new InformationSchemaSplit(localAddress);
return new FixedSplitSource(ImmutableList.of(split));
}
use of io.trino.spi.connector.ConnectorSplit in project trino by trinodb.
the class TestCassandraConnector method testGetTupleType.
@Test
public void testGetTupleType() {
// TODO add test with nested tuple types
ConnectorTableHandle tableHandle = getTableHandle(tableTuple);
ConnectorTableMetadata tableMetadata = metadata.getTableMetadata(SESSION, tableHandle);
List<ColumnHandle> columnHandles = ImmutableList.copyOf(metadata.getColumnHandles(SESSION, tableHandle).values());
Map<String, Integer> columnIndex = indexColumns(columnHandles);
ConnectorTransactionHandle transaction = CassandraTransactionHandle.INSTANCE;
List<ConnectorSplit> splits = getAllSplits(splitManager.getSplits(transaction, SESSION, tableHandle, UNGROUPED_SCHEDULING, DynamicFilter.EMPTY));
long rowNumber = 0;
for (ConnectorSplit split : splits) {
CassandraSplit cassandraSplit = (CassandraSplit) split;
long completedBytes = 0;
try (RecordCursor cursor = recordSetProvider.getRecordSet(transaction, SESSION, cassandraSplit, tableHandle, columnHandles).cursor()) {
while (cursor.advanceNextPosition()) {
try {
assertReadFields(cursor, tableMetadata.getColumns());
} catch (RuntimeException e) {
throw new RuntimeException("row " + rowNumber, e);
}
rowNumber++;
String keyValue = cursor.getSlice(columnIndex.get("key")).toStringUtf8();
assertEquals(keyValue, Long.toString(rowNumber));
SingleRowBlock tupleValueBlock = (SingleRowBlock) cursor.getObject(columnIndex.get("typetuple"));
assertThat(tupleValueBlock.getPositionCount()).isEqualTo(3);
CassandraColumnHandle tupleColumnHandle = (CassandraColumnHandle) columnHandles.get(columnIndex.get("typetuple"));
List<CassandraType> tupleArgumentTypes = tupleColumnHandle.getCassandraType().getArgumentTypes();
assertThat(tupleArgumentTypes.get(0).getTrinoType().getLong(tupleValueBlock, 0)).isEqualTo(rowNumber);
assertThat(tupleArgumentTypes.get(1).getTrinoType().getSlice(tupleValueBlock, 1).toStringUtf8()).isEqualTo("text-" + rowNumber);
assertThat(tupleArgumentTypes.get(2).getTrinoType().getLong(tupleValueBlock, 2)).isEqualTo(Float.floatToRawIntBits(1.11f * rowNumber));
long newCompletedBytes = cursor.getCompletedBytes();
assertTrue(newCompletedBytes >= completedBytes);
completedBytes = newCompletedBytes;
}
}
}
assertEquals(rowNumber, 2);
}
use of io.trino.spi.connector.ConnectorSplit in project trino by trinodb.
the class TestCassandraConnector method testGetUserDefinedType.
@Test
public void testGetUserDefinedType() {
ConnectorTableHandle tableHandle = getTableHandle(tableUdt);
ConnectorTableMetadata tableMetadata = metadata.getTableMetadata(SESSION, tableHandle);
List<ColumnHandle> columnHandles = ImmutableList.copyOf(metadata.getColumnHandles(SESSION, tableHandle).values());
Map<String, Integer> columnIndex = indexColumns(columnHandles);
ConnectorTransactionHandle transaction = CassandraTransactionHandle.INSTANCE;
tableHandle = metadata.applyFilter(SESSION, tableHandle, Constraint.alwaysTrue()).get().getHandle();
List<ConnectorSplit> splits = getAllSplits(splitManager.getSplits(transaction, SESSION, tableHandle, UNGROUPED_SCHEDULING, DynamicFilter.EMPTY));
long rowNumber = 0;
for (ConnectorSplit split : splits) {
CassandraSplit cassandraSplit = (CassandraSplit) split;
long completedBytes = 0;
try (RecordCursor cursor = recordSetProvider.getRecordSet(transaction, SESSION, cassandraSplit, tableHandle, columnHandles).cursor()) {
while (cursor.advanceNextPosition()) {
try {
assertReadFields(cursor, tableMetadata.getColumns());
} catch (RuntimeException e) {
throw new RuntimeException("row " + rowNumber, e);
}
rowNumber++;
String keyValue = cursor.getSlice(columnIndex.get("key")).toStringUtf8();
SingleRowBlock udtValue = (SingleRowBlock) cursor.getObject(columnIndex.get("typeudt"));
assertEquals(keyValue, "key");
assertEquals(VARCHAR.getSlice(udtValue, 0).toStringUtf8(), "text");
assertEquals(trinoUuidToJavaUuid(UUID.getSlice(udtValue, 1)).toString(), "01234567-0123-0123-0123-0123456789ab");
assertEquals(INTEGER.getLong(udtValue, 2), -2147483648);
assertEquals(BIGINT.getLong(udtValue, 3), -9223372036854775808L);
assertEquals(VARBINARY.getSlice(udtValue, 4).toStringUtf8(), "01234");
assertEquals(TIMESTAMP.getLong(udtValue, 5), 117964800000L);
assertEquals(VARCHAR.getSlice(udtValue, 6).toStringUtf8(), "ansi");
assertTrue(BOOLEAN.getBoolean(udtValue, 7));
assertEquals(DOUBLE.getDouble(udtValue, 8), 99999999999999997748809823456034029568D);
assertEquals(DOUBLE.getDouble(udtValue, 9), 4.9407e-324);
assertEquals(REAL.getObjectValue(SESSION, udtValue, 10), 1.4E-45f);
assertEquals(VARCHAR.getSlice(udtValue, 11).toStringUtf8(), "0.0.0.0");
assertEquals(VARCHAR.getSlice(udtValue, 12).toStringUtf8(), "varchar");
assertEquals(VARCHAR.getSlice(udtValue, 13).toStringUtf8(), "-9223372036854775808");
assertEquals(trinoUuidToJavaUuid(UUID.getSlice(udtValue, 14)).toString(), "d2177dd0-eaa2-11de-a572-001b779c76e3");
assertEquals(VARCHAR.getSlice(udtValue, 15).toStringUtf8(), "[\"list\"]");
assertEquals(VARCHAR.getSlice(udtValue, 16).toStringUtf8(), "{\"map\":1}");
assertEquals(VARCHAR.getSlice(udtValue, 17).toStringUtf8(), "[true]");
SingleRowBlock tupleValueBlock = (SingleRowBlock) udtValue.getObject(18, Block.class);
assertThat(tupleValueBlock.getPositionCount()).isEqualTo(1);
assertThat(INTEGER.getLong(tupleValueBlock, 0)).isEqualTo(123);
SingleRowBlock udtValueBlock = (SingleRowBlock) udtValue.getObject(19, Block.class);
assertThat(udtValueBlock.getPositionCount()).isEqualTo(1);
assertThat(INTEGER.getLong(udtValueBlock, 0)).isEqualTo(999);
long newCompletedBytes = cursor.getCompletedBytes();
assertTrue(newCompletedBytes >= completedBytes);
completedBytes = newCompletedBytes;
}
}
}
assertEquals(rowNumber, 1);
}
Aggregations