Kafka Connect Flatten (Confluent) SMT Usage Reference for Confluent Cloud¶
The following provides usage information for the Confluent Single Message Transforms (SMT) io.confluent.connect.transforms.Flatten.
Description¶
The Confluent Flatten SMT transforms a record’s key or value by converting
complex nested structures (such as structs) into flat, top-level fields using a
delimiter. This SMT also handles nested maps encountered within struct schemas.
You can configure the behavior.on.nested.map configuration to either stop processing
records (fail) if such nested maps are found, or to include them as is
(include) without flattening their contents. The JSON SMT
delimiter is the period . character, which is also the default.
You can use the concrete transformation type designed for the record key (io.confluent.connect.transforms.Flatten$Key)
or value (io.confluent.connect.transforms.Flatten$Value).
When using an Avro schema, the default SMT delimiter period . cannot be
used. Use an underscore _ for the delimiter. Use the following properties to
change the delimiter:
"transforms": "flatten",
"transforms.flatten.type": "io.confluent.connect.transforms.Flatten$Value",
"transforms.flatten.delimiter": "_"
JSON example¶
This configuration snippet shows how to use Flatten to flatten a record’s
value while including a nested map without flattening its
internal structure. The default delimiter (.) is used.
"transforms": "flatten",
"transforms.flatten.type": "io.confluent.connect.transforms.Flatten$Value",
"transforms.flattenValue.behavior.on.nested.map": "INCLUDE",
"transforms.flatten.delimiter": "."
Before:
{
"user": {
"id": "1234",
"attributes": { "role": "admin", "dept": "engineering" },
"profile": {
"address": {
"city": "Bangalore",
"metadata": { "zone": "east", "block": "A" }
},
"age": 30
}
}
}
After:
{
"user.id": "1234",
"user.attributes": { "role": "admin", "dept": "engineering" },
"user.profile.address.city": "Bangalore",
"user.profile.address.metadata": { "zone": "east", "block": "A" },
"user.profile.age": 30
}
If transforms.flattenValue.behavior.on.nested.maps is set to fail, records with nested maps are not processed, and the connector will fail to launch.
AVRO example¶
The Avro schema specification only allows alphanumeric characters and the
underscore _ character in field names. The configuration snippet below shows
how to use Flatten to concatenate field names with the underscore _
delimiter character.
"transforms": "flatten",
"transforms.flatten.type": "org.apache.kafka.connect.transforms.Flatten$Value",
"transforms.flattenValue.behavior.on.nested.map": "INCLUDE",
"transforms.flatten.delimiter": "_"
Before:
{
"user": {
"id": "1234",
"attributes": { "role": "admin", "dept": "engineering" },
"profile": {
"address": {
"city": "Bangalore",
"metadata": { "zone": "east", "block": "A" }
},
"age": 30
}
}
}
After:
{
"user_id": "1234",
"user_attributes": { "role": "admin", "dept": "engineering" },
"user_profile_address_city": "Bangalore",
"user_profile_address_metadata": { "zone": "east", "block": "A" },
"user_profile_age": 30
}
If transforms.flattenValue.behavior.on.nested.maps is set to fail, records with nested maps are not processed, and the connector will fail to launch.
Tip
For additional examples, see Flatten for managed connectors.
Properties¶
| Name | Description | Type | Default | Valid Values | Importance |
|---|---|---|---|---|---|
delimiter |
Delimiter to insert between field names from the input record when generating field names for the output record. | string | . | _ | medium |
Predicates¶
Transformations can be configured with predicates so that the transformation is applied only to records which satisfy a condition. You can use predicates in a transformation chain and, when combined with the Kafka Connect Filter (Kafka) SMT Usage Reference for Confluent Cloud, predicates can conditionally filter out specific records. For details and examples, see Predicates.