Search in sources :

Example 1 with HeapTimestampVector

use of org.apache.flink.table.data.columnar.vector.heap.HeapTimestampVector in project flink by apache.

the class ParquetSplitReaderUtil method createVectorFromConstant.

public static ColumnVector createVectorFromConstant(LogicalType type, Object value, int batchSize) {
    switch(type.getTypeRoot()) {
        case CHAR:
        case VARCHAR:
        case BINARY:
        case VARBINARY:
            HeapBytesVector bsv = new HeapBytesVector(batchSize);
            if (value == null) {
                bsv.fillWithNulls();
            } else {
                bsv.fill(value instanceof byte[] ? (byte[]) value : value.toString().getBytes(StandardCharsets.UTF_8));
            }
            return bsv;
        case BOOLEAN:
            HeapBooleanVector bv = new HeapBooleanVector(batchSize);
            if (value == null) {
                bv.fillWithNulls();
            } else {
                bv.fill((boolean) value);
            }
            return bv;
        case TINYINT:
            HeapByteVector byteVector = new HeapByteVector(batchSize);
            if (value == null) {
                byteVector.fillWithNulls();
            } else {
                byteVector.fill(((Number) value).byteValue());
            }
            return byteVector;
        case SMALLINT:
            HeapShortVector sv = new HeapShortVector(batchSize);
            if (value == null) {
                sv.fillWithNulls();
            } else {
                sv.fill(((Number) value).shortValue());
            }
            return sv;
        case INTEGER:
            HeapIntVector iv = new HeapIntVector(batchSize);
            if (value == null) {
                iv.fillWithNulls();
            } else {
                iv.fill(((Number) value).intValue());
            }
            return iv;
        case BIGINT:
            HeapLongVector lv = new HeapLongVector(batchSize);
            if (value == null) {
                lv.fillWithNulls();
            } else {
                lv.fill(((Number) value).longValue());
            }
            return lv;
        case DECIMAL:
            DecimalType decimalType = (DecimalType) type;
            int precision = decimalType.getPrecision();
            int scale = decimalType.getScale();
            DecimalData decimal = value == null ? null : Preconditions.checkNotNull(DecimalData.fromBigDecimal((BigDecimal) value, precision, scale));
            ColumnVector internalVector;
            if (ParquetSchemaConverter.is32BitDecimal(precision)) {
                internalVector = createVectorFromConstant(new IntType(), decimal == null ? null : (int) decimal.toUnscaledLong(), batchSize);
            } else if (ParquetSchemaConverter.is64BitDecimal(precision)) {
                internalVector = createVectorFromConstant(new BigIntType(), decimal == null ? null : decimal.toUnscaledLong(), batchSize);
            } else {
                internalVector = createVectorFromConstant(new VarBinaryType(), decimal == null ? null : decimal.toUnscaledBytes(), batchSize);
            }
            return new ParquetDecimalVector(internalVector);
        case FLOAT:
            HeapFloatVector fv = new HeapFloatVector(batchSize);
            if (value == null) {
                fv.fillWithNulls();
            } else {
                fv.fill(((Number) value).floatValue());
            }
            return fv;
        case DOUBLE:
            HeapDoubleVector dv = new HeapDoubleVector(batchSize);
            if (value == null) {
                dv.fillWithNulls();
            } else {
                dv.fill(((Number) value).doubleValue());
            }
            return dv;
        case DATE:
            if (value instanceof LocalDate) {
                value = Date.valueOf((LocalDate) value);
            }
            return createVectorFromConstant(new IntType(), value == null ? null : toInternal((Date) value), batchSize);
        case TIMESTAMP_WITHOUT_TIME_ZONE:
            HeapTimestampVector tv = new HeapTimestampVector(batchSize);
            if (value == null) {
                tv.fillWithNulls();
            } else {
                tv.fill(TimestampData.fromLocalDateTime((LocalDateTime) value));
            }
            return tv;
        default:
            throw new UnsupportedOperationException("Unsupported type: " + type);
    }
}
Also used : HeapShortVector(org.apache.flink.table.data.columnar.vector.heap.HeapShortVector) HeapLongVector(org.apache.flink.table.data.columnar.vector.heap.HeapLongVector) LocalDateTime(java.time.LocalDateTime) VarBinaryType(org.apache.flink.table.types.logical.VarBinaryType) HeapByteVector(org.apache.flink.table.data.columnar.vector.heap.HeapByteVector) HeapDoubleVector(org.apache.flink.table.data.columnar.vector.heap.HeapDoubleVector) HeapTimestampVector(org.apache.flink.table.data.columnar.vector.heap.HeapTimestampVector) HeapBytesVector(org.apache.flink.table.data.columnar.vector.heap.HeapBytesVector) HeapIntVector(org.apache.flink.table.data.columnar.vector.heap.HeapIntVector) BigIntType(org.apache.flink.table.types.logical.BigIntType) LocalDate(java.time.LocalDate) HeapBooleanVector(org.apache.flink.table.data.columnar.vector.heap.HeapBooleanVector) ColumnVector(org.apache.flink.table.data.columnar.vector.ColumnVector) WritableColumnVector(org.apache.flink.table.data.columnar.vector.writable.WritableColumnVector) IntType(org.apache.flink.table.types.logical.IntType) BigIntType(org.apache.flink.table.types.logical.BigIntType) DecimalData(org.apache.flink.table.data.DecimalData) DecimalType(org.apache.flink.table.types.logical.DecimalType) HeapFloatVector(org.apache.flink.table.data.columnar.vector.heap.HeapFloatVector)

Example 2 with HeapTimestampVector

use of org.apache.flink.table.data.columnar.vector.heap.HeapTimestampVector in project flink by apache.

the class ColumnVectorTest method testTimestamp.

@Test
public void testTimestamp() {
    HeapTimestampVector vector = new HeapTimestampVector(SIZE);
    for (int i = 0; i < SIZE; i++) {
        vector.setTimestamp(i, TimestampData.fromEpochMillis(i, i));
    }
    for (int i = 0; i < SIZE; i++) {
        assertEquals(TimestampData.fromEpochMillis(i, i), vector.getTimestamp(i, 9));
    }
    vector.fill(TimestampData.fromEpochMillis(22, 22));
    for (int i = 0; i < SIZE; i++) {
        assertEquals(TimestampData.fromEpochMillis(22, 22), vector.getTimestamp(i, 9));
    }
    vector.setDictionary(new TestDictionary(IntStream.range(0, SIZE).mapToObj(i -> TimestampData.fromEpochMillis(i, i)).toArray()));
    setRangeDictIds(vector);
    for (int i = 0; i < SIZE; i++) {
        assertEquals(TimestampData.fromEpochMillis(i, i), vector.getTimestamp(i, 9));
    }
}
Also used : IntStream(java.util.stream.IntStream) UNSAFE(org.apache.flink.table.data.columnar.vector.heap.AbstractHeapVector.UNSAFE) HeapTimestampVector(org.apache.flink.table.data.columnar.vector.heap.HeapTimestampVector) INT_ARRAY_OFFSET(org.apache.flink.table.data.columnar.vector.heap.AbstractHeapVector.INT_ARRAY_OFFSET) HeapLongVector(org.apache.flink.table.data.columnar.vector.heap.HeapLongVector) HeapFloatVector(org.apache.flink.table.data.columnar.vector.heap.HeapFloatVector) HeapBytesVector(org.apache.flink.table.data.columnar.vector.heap.HeapBytesVector) LONG_ARRAY_OFFSET(org.apache.flink.table.data.columnar.vector.heap.AbstractHeapVector.LONG_ARRAY_OFFSET) BYTE_ARRAY_OFFSET(org.apache.flink.table.data.columnar.vector.heap.AbstractHeapVector.BYTE_ARRAY_OFFSET) Assert.assertArrayEquals(org.junit.Assert.assertArrayEquals) HeapByteVector(org.apache.flink.table.data.columnar.vector.heap.HeapByteVector) DOUBLE_ARRAY_OFFSET(org.apache.flink.table.data.columnar.vector.heap.AbstractHeapVector.DOUBLE_ARRAY_OFFSET) FLOAT_ARRAY_OFFSET(org.apache.flink.table.data.columnar.vector.heap.AbstractHeapVector.FLOAT_ARRAY_OFFSET) LongStream(java.util.stream.LongStream) TimestampData(org.apache.flink.table.data.TimestampData) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) StandardCharsets(java.nio.charset.StandardCharsets) WritableColumnVector(org.apache.flink.table.data.columnar.vector.writable.WritableColumnVector) HeapDoubleVector(org.apache.flink.table.data.columnar.vector.heap.HeapDoubleVector) HeapIntVector(org.apache.flink.table.data.columnar.vector.heap.HeapIntVector) HeapShortVector(org.apache.flink.table.data.columnar.vector.heap.HeapShortVector) Assert.assertFalse(org.junit.Assert.assertFalse) HeapBooleanVector(org.apache.flink.table.data.columnar.vector.heap.HeapBooleanVector) Assert.assertEquals(org.junit.Assert.assertEquals) HeapTimestampVector(org.apache.flink.table.data.columnar.vector.heap.HeapTimestampVector) Test(org.junit.Test)

Aggregations

HeapBooleanVector (org.apache.flink.table.data.columnar.vector.heap.HeapBooleanVector)2 HeapByteVector (org.apache.flink.table.data.columnar.vector.heap.HeapByteVector)2 HeapBytesVector (org.apache.flink.table.data.columnar.vector.heap.HeapBytesVector)2 HeapDoubleVector (org.apache.flink.table.data.columnar.vector.heap.HeapDoubleVector)2 HeapFloatVector (org.apache.flink.table.data.columnar.vector.heap.HeapFloatVector)2 HeapIntVector (org.apache.flink.table.data.columnar.vector.heap.HeapIntVector)2 HeapLongVector (org.apache.flink.table.data.columnar.vector.heap.HeapLongVector)2 HeapShortVector (org.apache.flink.table.data.columnar.vector.heap.HeapShortVector)2 HeapTimestampVector (org.apache.flink.table.data.columnar.vector.heap.HeapTimestampVector)2 WritableColumnVector (org.apache.flink.table.data.columnar.vector.writable.WritableColumnVector)2 StandardCharsets (java.nio.charset.StandardCharsets)1 LocalDate (java.time.LocalDate)1 LocalDateTime (java.time.LocalDateTime)1 IntStream (java.util.stream.IntStream)1 LongStream (java.util.stream.LongStream)1 DecimalData (org.apache.flink.table.data.DecimalData)1 TimestampData (org.apache.flink.table.data.TimestampData)1 ColumnVector (org.apache.flink.table.data.columnar.vector.ColumnVector)1 BYTE_ARRAY_OFFSET (org.apache.flink.table.data.columnar.vector.heap.AbstractHeapVector.BYTE_ARRAY_OFFSET)1 DOUBLE_ARRAY_OFFSET (org.apache.flink.table.data.columnar.vector.heap.AbstractHeapVector.DOUBLE_ARRAY_OFFSET)1