Search in sources :

Example 1 with ColumnMappers

use of io.debezium.relational.mapping.ColumnMappers in project debezium by debezium.

the class TableSchemaBuilder method createValueGenerator.

/**
 * Creates the function that produces a Kafka Connect value object for a row of data.
 *
 * @param schema the Kafka Connect schema for the value; may be null if there is no known schema, in which case the generator
 *            will be null
 * @param tableId the table identifier; may not be null
 * @param columns the column definitions for the table that defines the row; may not be null
 * @param filter the filter that specifies whether columns in the table should be included; may be null if all columns
 *            are to be included
 * @param mappers the mapping functions for columns; may be null if none of the columns are to be mapped to different values
 * @return the value-generating function, or null if there is no value schema
 */
protected Function<Object[], Struct> createValueGenerator(Schema schema, TableId tableId, List<Column> columns, Predicate<ColumnId> filter, ColumnMappers mappers) {
    if (schema != null) {
        int[] recordIndexes = indexesForColumns(columns);
        Field[] fields = fieldsForColumns(schema, columns);
        int numFields = recordIndexes.length;
        ValueConverter[] converters = convertersForColumns(schema, tableId, columns, filter, mappers);
        return (row) -> {
            Struct result = new Struct(schema);
            for (int i = 0; i != numFields; ++i) {
                Object value = row[recordIndexes[i]];
                ValueConverter converter = converters[i];
                if (converter != null) {
                    try {
                        value = converter.convert(value);
                        result.put(fields[i], value);
                    } catch (DataException | IllegalArgumentException e) {
                        Column col = columns.get(i);
                        LOGGER.error("Failed to properly convert data value for '{}.{}' of type {} for row {}:", tableId, col.name(), col.typeName(), row, e);
                    } catch (final Exception e) {
                        Column col = columns.get(i);
                        LOGGER.error("Failed to properly convert data value for '{}.{}' of type {} for row {}:", tableId, col.name(), col.typeName(), row, e);
                    }
                }
            }
            return result;
        };
    }
    return null;
}
Also used : ColumnMapper(io.debezium.relational.mapping.ColumnMapper) DataException(org.apache.kafka.connect.errors.DataException) Logger(org.slf4j.Logger) Field(org.apache.kafka.connect.data.Field) Predicate(java.util.function.Predicate) LoggerFactory(org.slf4j.LoggerFactory) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Function(java.util.function.Function) ThreadSafe(io.debezium.annotation.ThreadSafe) Schema(org.apache.kafka.connect.data.Schema) List(java.util.List) ColumnMappers(io.debezium.relational.mapping.ColumnMappers) Immutable(io.debezium.annotation.Immutable) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Struct(org.apache.kafka.connect.data.Struct) SchemaBuilder(org.apache.kafka.connect.data.SchemaBuilder) SchemaNameAdjuster(io.debezium.util.SchemaNameAdjuster) Types(java.sql.Types) Envelope(io.debezium.data.Envelope) SchemaUtil(io.debezium.data.SchemaUtil) Field(org.apache.kafka.connect.data.Field) DataException(org.apache.kafka.connect.errors.DataException) Struct(org.apache.kafka.connect.data.Struct)

Aggregations

Immutable (io.debezium.annotation.Immutable)1 ThreadSafe (io.debezium.annotation.ThreadSafe)1 Envelope (io.debezium.data.Envelope)1 SchemaUtil (io.debezium.data.SchemaUtil)1 ColumnMapper (io.debezium.relational.mapping.ColumnMapper)1 ColumnMappers (io.debezium.relational.mapping.ColumnMappers)1 SchemaNameAdjuster (io.debezium.util.SchemaNameAdjuster)1 Types (java.sql.Types)1 List (java.util.List)1 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 Function (java.util.function.Function)1 Predicate (java.util.function.Predicate)1 Field (org.apache.kafka.connect.data.Field)1 Schema (org.apache.kafka.connect.data.Schema)1 SchemaBuilder (org.apache.kafka.connect.data.SchemaBuilder)1 Struct (org.apache.kafka.connect.data.Struct)1 DataException (org.apache.kafka.connect.errors.DataException)1 Logger (org.slf4j.Logger)1 LoggerFactory (org.slf4j.LoggerFactory)1