Search in sources :

Example 31 with ConnectorSession

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

the class MetadataManager method commitPageSinkAsync.

@Override
public ListenableFuture<Void> commitPageSinkAsync(Session session, OutputTableHandle tableHandle, Collection<Slice> fragments) {
    ConnectorId connectorId = tableHandle.getConnectorId();
    CatalogMetadata catalogMetadata = getCatalogMetadata(session, connectorId);
    ConnectorMetadata metadata = catalogMetadata.getMetadata();
    ConnectorSession connectorSession = session.toConnectorSession(connectorId);
    return toListenableFuture(metadata.commitPageSinkAsync(connectorSession, tableHandle.getConnectorHandle(), fragments));
}
Also used : ConnectorSession(com.facebook.presto.spi.ConnectorSession) ConnectorMetadata(com.facebook.presto.spi.connector.ConnectorMetadata) ConnectorId(com.facebook.presto.spi.ConnectorId)

Example 32 with ConnectorSession

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

the class TestPinotSegmentPageSource method testMultivaluedType.

@Test
public void testMultivaluedType() throws IOException {
    String[] columnNames = { "col1", "col2" };
    DataSchema.ColumnDataType[] columnDataTypes = { DataSchema.ColumnDataType.INT_ARRAY, DataSchema.ColumnDataType.STRING_ARRAY };
    DataSchema dataSchema = new DataSchema(columnNames, columnDataTypes);
    String[] stringArray = { "stringVal1", "stringVal2" };
    int[] intArray = { 10, 34, 67 };
    DataTableBuilder dataTableBuilder = new DataTableBuilder(dataSchema);
    dataTableBuilder.startRow();
    dataTableBuilder.setColumn(0, intArray);
    dataTableBuilder.setColumn(1, stringArray);
    dataTableBuilder.finishRow();
    DataTable dataTable = dataTableBuilder.build();
    PinotSessionProperties pinotSessionProperties = new PinotSessionProperties(pinotConfig);
    ConnectorSession session = new TestingConnectorSession(pinotSessionProperties.getSessionProperties());
    List<PinotColumnHandle> pinotColumnHandles = ImmutableList.of(new PinotColumnHandle(columnNames[0], PinotColumnUtils.getPrestoTypeFromPinotType(getFieldSpec(columnNames[0], columnDataTypes[0]), false, false), PinotColumnHandle.PinotColumnType.REGULAR), new PinotColumnHandle(columnNames[1], PinotColumnUtils.getPrestoTypeFromPinotType(getFieldSpec(columnNames[1], columnDataTypes[1]), false, false), PinotColumnHandle.PinotColumnType.REGULAR));
    PinotSplit mockPinotSplit = new PinotSplit(pinotConnectorId.toString(), PinotSplit.SplitType.SEGMENT, pinotColumnHandles, Optional.empty(), Optional.of("blah"), ImmutableList.of("seg"), Optional.of("host"), getGrpcPort());
    PinotSegmentPageSource pinotSegmentPageSource = getPinotSegmentPageSource(session, ImmutableList.of(dataTable), mockPinotSplit, pinotColumnHandles);
    Page page = requireNonNull(pinotSegmentPageSource.getNextPage(), "Expected a valid page");
    for (int i = 0; i < columnDataTypes.length; i++) {
        Block block = page.getBlock(i);
        Type type = PinotColumnUtils.getPrestoTypeFromPinotType(getFieldSpec(columnNames[i], columnDataTypes[i]), false, false);
        Assert.assertTrue(type instanceof ArrayType, "presto type should be array");
        if (((ArrayType) type).getElementType() instanceof IntegerType) {
            Assert.assertTrue(block.getBlock(0).getInt(0) == 10, "Array element not matching");
            Assert.assertTrue(block.getBlock(0).getInt(1) == 34, "Array element not matching");
            Assert.assertTrue(block.getBlock(0).getInt(2) == 67, "Array element not matching");
        } else if (((ArrayType) type).getElementType() instanceof VariableWidthType) {
            Type type1 = ((ArrayType) type).getElementType();
            Assert.assertTrue(block.getBlock(0) instanceof VariableWidthBlock);
            VariableWidthBlock variableWidthBlock = (VariableWidthBlock) block.getBlock(0);
            Assert.assertTrue("stringVal1".equals(new String(variableWidthBlock.getSlice(0, 0, variableWidthBlock.getSliceLength(0)).getBytes())), "Array element not matching");
            Assert.assertTrue("stringVal2".equals(new String(variableWidthBlock.getSlice(1, 0, variableWidthBlock.getSliceLength(1)).getBytes())), "Array element not matching");
        }
    }
}
Also used : DataTable(org.apache.pinot.common.utils.DataTable) TestingConnectorSession(com.facebook.presto.testing.TestingConnectorSession) Page(com.facebook.presto.common.Page) VariableWidthBlock(com.facebook.presto.common.block.VariableWidthBlock) DataSchema(org.apache.pinot.common.utils.DataSchema) ArrayType(com.facebook.presto.common.type.ArrayType) IntegerType(com.facebook.presto.common.type.IntegerType) VariableWidthType(com.facebook.presto.common.type.VariableWidthType) IntegerType(com.facebook.presto.common.type.IntegerType) ArrayType(com.facebook.presto.common.type.ArrayType) Type(com.facebook.presto.common.type.Type) VariableWidthBlock(com.facebook.presto.common.block.VariableWidthBlock) Block(com.facebook.presto.common.block.Block) TestingConnectorSession(com.facebook.presto.testing.TestingConnectorSession) ConnectorSession(com.facebook.presto.spi.ConnectorSession) VariableWidthType(com.facebook.presto.common.type.VariableWidthType) DataTableBuilder(org.apache.pinot.core.common.datatable.DataTableBuilder) Test(org.testng.annotations.Test)

Example 33 with ConnectorSession

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

the class TestPinotSegmentPageSource method testAllDataTypes.

@Test
public void testAllDataTypes() {
    PinotSessionProperties pinotSessionProperties = new PinotSessionProperties(pinotConfig);
    ConnectorSession session = new TestingConnectorSession(pinotSessionProperties.getSessionProperties());
    List<DataTable> dataTables = IntStream.range(0, 3).mapToObj(i -> createDataTableWithAllTypes()).collect(toImmutableList());
    List<PinotColumnHandle> pinotColumnHandles = createPinotColumnHandlesWithAllTypes();
    PinotSplit mockPinotSplit = new PinotSplit(pinotConnectorId.toString(), PinotSplit.SplitType.SEGMENT, pinotColumnHandles, Optional.empty(), Optional.of("blah"), ImmutableList.of("seg"), Optional.of("host"), getGrpcPort());
    PinotSegmentPageSource pinotSegmentPageSource = getPinotSegmentPageSource(session, dataTables, mockPinotSplit, pinotColumnHandles);
    for (int i = 0; i < dataTables.size(); ++i) {
        Page page = requireNonNull(pinotSegmentPageSource.getNextPage(), "Expected a valid page");
        for (int j = 0; j < ALL_TYPES.size(); ++j) {
            Block block = page.getBlock(j);
            Type type = PinotColumnUtils.getPrestoTypeFromPinotType(getFieldSpec("dontcare", ALL_TYPES.get(j)), false, false);
            long maxHashCode = Long.MIN_VALUE;
            for (int k = 0; k < NUM_ROWS; ++k) {
                maxHashCode = Math.max(type.hash(block, k), maxHashCode);
            }
            Assert.assertTrue(maxHashCode != 0, "Not all column values can have hash code 0");
        }
    }
}
Also used : IntStream(java.util.stream.IntStream) Page(com.facebook.presto.common.Page) Arrays(java.util.Arrays) VariableWidthBlock(com.facebook.presto.common.block.VariableWidthBlock) VariableWidthType(com.facebook.presto.common.type.VariableWidthType) Test(org.testng.annotations.Test) Random(java.util.Random) DimensionFieldSpec(org.apache.pinot.spi.data.DimensionFieldSpec) DataTableBuilder(org.apache.pinot.core.common.datatable.DataTableBuilder) IntegerType(com.facebook.presto.common.type.IntegerType) ImmutableList(com.google.common.collect.ImmutableList) Map(java.util.Map) Objects.requireNonNull(java.util.Objects.requireNonNull) ArrayType(com.facebook.presto.common.type.ArrayType) ServerInstance(org.apache.pinot.core.transport.ServerInstance) FieldSpec(org.apache.pinot.spi.data.FieldSpec) Type(com.facebook.presto.common.type.Type) DataTable(org.apache.pinot.common.utils.DataTable) ImmutableSet(com.google.common.collect.ImmutableSet) ImmutableMap(com.google.common.collect.ImmutableMap) Assert(com.facebook.presto.testing.assertions.Assert) Utils(org.apache.pinot.connector.presto.grpc.Utils) UTF_8(java.nio.charset.StandardCharsets.UTF_8) ImmutableList.toImmutableList(com.google.common.collect.ImmutableList.toImmutableList) Set(java.util.Set) IOException(java.io.IOException) PinotScatterGatherQueryClient(org.apache.pinot.connector.presto.PinotScatterGatherQueryClient) TestingConnectorSession(com.facebook.presto.testing.TestingConnectorSession) DataSchema(org.apache.pinot.common.utils.DataSchema) ConnectorSession(com.facebook.presto.spi.ConnectorSession) List(java.util.List) Optional(java.util.Optional) Block(com.facebook.presto.common.block.Block) DataTable(org.apache.pinot.common.utils.DataTable) TestingConnectorSession(com.facebook.presto.testing.TestingConnectorSession) Page(com.facebook.presto.common.Page) VariableWidthType(com.facebook.presto.common.type.VariableWidthType) IntegerType(com.facebook.presto.common.type.IntegerType) ArrayType(com.facebook.presto.common.type.ArrayType) Type(com.facebook.presto.common.type.Type) VariableWidthBlock(com.facebook.presto.common.block.VariableWidthBlock) Block(com.facebook.presto.common.block.Block) TestingConnectorSession(com.facebook.presto.testing.TestingConnectorSession) ConnectorSession(com.facebook.presto.spi.ConnectorSession) Test(org.testng.annotations.Test)

Example 34 with ConnectorSession

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

the class TestPinotSessionProperties method testConnectionTimeoutParsedProperly.

@Test
public void testConnectionTimeoutParsedProperly() {
    PinotConfig pinotConfig = new PinotConfig().setConnectionTimeout(new Duration(15, TimeUnit.SECONDS));
    PinotSessionProperties pinotSessionProperties = new PinotSessionProperties(pinotConfig);
    ConnectorSession session = new TestingConnectorSession(pinotSessionProperties.getSessionProperties());
    assertEquals(PinotSessionProperties.getConnectionTimeout(session), new Duration(0.25, TimeUnit.MINUTES));
}
Also used : TestingConnectorSession(com.facebook.presto.testing.TestingConnectorSession) Duration(io.airlift.units.Duration) ConnectorSession(com.facebook.presto.spi.ConnectorSession) TestingConnectorSession(com.facebook.presto.testing.TestingConnectorSession) Test(org.testng.annotations.Test)

Example 35 with ConnectorSession

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

the class RedisRecordSetProvider method getRecordSet.

@Override
public RecordSet getRecordSet(ConnectorTransactionHandle transaction, ConnectorSession session, ConnectorSplit split, List<? extends ColumnHandle> columns) {
    RedisSplit redisSplit = convertSplit(split);
    List<RedisColumnHandle> redisColumns = columns.stream().map(RedisHandleResolver::convertColumnHandle).collect(ImmutableList.toImmutableList());
    RowDecoder keyDecoder = decoderFactory.create(redisSplit.getKeyDataFormat(), emptyMap(), redisColumns.stream().filter(col -> !col.isInternal()).filter(RedisColumnHandle::isKeyDecoder).collect(toImmutableSet()));
    RowDecoder valueDecoder = decoderFactory.create(redisSplit.getValueDataFormat(), emptyMap(), redisColumns.stream().filter(col -> !col.isInternal()).filter(col -> !col.isKeyDecoder()).collect(toImmutableSet()));
    return new RedisRecordSet(redisSplit, jedisManager, redisColumns, keyDecoder, valueDecoder);
}
Also used : Collections.emptyMap(java.util.Collections.emptyMap) RowDecoder(com.facebook.presto.decoder.RowDecoder) ConnectorTransactionHandle(com.facebook.presto.spi.connector.ConnectorTransactionHandle) RecordSet(com.facebook.presto.spi.RecordSet) ConnectorSession(com.facebook.presto.spi.ConnectorSession) Inject(javax.inject.Inject) ConnectorSplit(com.facebook.presto.spi.ConnectorSplit) List(java.util.List) ConnectorRecordSetProvider(com.facebook.presto.spi.connector.ConnectorRecordSetProvider) ImmutableList(com.google.common.collect.ImmutableList) ColumnHandle(com.facebook.presto.spi.ColumnHandle) RedisHandleResolver.convertSplit(com.facebook.presto.redis.RedisHandleResolver.convertSplit) Objects.requireNonNull(java.util.Objects.requireNonNull) ImmutableSet.toImmutableSet(com.google.common.collect.ImmutableSet.toImmutableSet) DispatchingRowDecoderFactory(com.facebook.presto.decoder.DispatchingRowDecoderFactory) RowDecoder(com.facebook.presto.decoder.RowDecoder)

Aggregations

ConnectorSession (com.facebook.presto.spi.ConnectorSession)189 TestingConnectorSession (com.facebook.presto.testing.TestingConnectorSession)94 ColumnHandle (com.facebook.presto.spi.ColumnHandle)91 ConnectorMetadata (com.facebook.presto.spi.connector.ConnectorMetadata)80 List (java.util.List)79 ConnectorTableHandle (com.facebook.presto.spi.ConnectorTableHandle)78 SchemaTableName (com.facebook.presto.spi.SchemaTableName)74 Optional (java.util.Optional)73 ImmutableList (com.google.common.collect.ImmutableList)72 Objects.requireNonNull (java.util.Objects.requireNonNull)72 PrestoException (com.facebook.presto.spi.PrestoException)63 ImmutableMap (com.google.common.collect.ImmutableMap)63 Map (java.util.Map)63 Test (org.testng.annotations.Test)63 Path (org.apache.hadoop.fs.Path)61 ConnectorTableLayoutHandle (com.facebook.presto.spi.ConnectorTableLayoutHandle)53 ConnectorTableMetadata (com.facebook.presto.spi.ConnectorTableMetadata)53 Constraint (com.facebook.presto.spi.Constraint)51 Slice (io.airlift.slice.Slice)51 Type (com.facebook.presto.common.type.Type)50