Table config is:
{
“tableName”: “performance_test”,
“tableType”: “REALTIME”,
“segmentsConfig”: {
“schemaName”: “performance_test”,
“timeColumnName”: “timestamp”,
“timeType”: “MILLISECONDS”,
“allowNullTimeValue”: true,
“replicasPerPartition”: “1",
“retentionTimeUnit”: “DAYS”,
“retentionTimeValue”: “90",
“segmentPushType”: “APPEND”,
“completionConfig”: {
“completionMode”: “DOWNLOAD”
}
},
“tenants”: {
“broker”: “RestApiTest”,
“server”: “RestApiTest”
},
“tableIndexConfig”: {
“optimizeDictionaryForMetrics”: true,
“noDictionaryColumns”: [
“id”, “request_id”, “timestamp”, “response_body”
],
“sortedColumn”: [
“entity_id”
],
“rangeIndexColumns”: [
“timestamp”
],
“invertedIndexColumns”: [
],
“loadMode”: “MMAP”,
“aggregateMetrics”: true,
“nullHandlingEnabled”: true,
“streamConfigs”: {
“streamType”: “kafka”,
“stream.kafka.consumer.type”: “lowlevel”,
“stream.kafka.topic.name”: “xxx”,
“stream.kafka.decoder.class.name”: “org.apache.pinot.plugin.stream.kafka.KafkaJSONMessageDecoder”,
“stream.kafka.consumer.factory.class.name”: “org.apache.pinot.plugin.stream.kafka20.KafkaConsumerFactory”,
“stream.kafka.broker.list”: “xxxx:9092”,
“stream.kafka.consumer.prop.auto.offset.reset”: “smallest”,
“realtime.segment.flush.threshold.time”: “15m”,
“realtime.segment.flush.threshold.rows”: “0”,
“realtime.segment.flush.threshold.segment.size”: “100M”,
“realtime.segment.flush.autotune.initialRows”: “1000000”
}
},
“ingestionConfig”: {
“filterConfig”: {
“filterFunction”: “Groovy({dbTable != \“xxxxxx\“}, dbTable)”
},
“transformConfigs”: [
{
“columnName”: “id”,
“transformFunction”: “jsonPathString(metrics, ‘$.id’)”
},
{
“columnName”: “entity_id”,
“transformFunction”: “jsonPathString(metrics, ‘$.entity_id’)”
},
{
“columnName”: “tenant_id”,
“transformFunction”: “jsonPathString(metrics, ‘$.tenant_id’)”
},
{
“columnName”: “sub_tenant_id”,
“transformFunction”: “jsonPathString(metrics, ‘$.sub_tenant_id’)”
},
{
“columnName”: “service_name”,
“transformFunction”: “jsonPathString(metrics, ‘$.service_name’)”
},
{
“columnName”: “type”,
“transformFunction”: “jsonPathString(metrics, ‘$.type’)”
},
{
“columnName”: “status”,
“transformFunction”: “jsonPathString(metrics, ‘$.status’)”
},
{
“columnName”: “request_id”,
“transformFunction”: “jsonPathString(metrics, ‘$.request_id’)”
},
{
“columnName”: “api”,
“transformFunction”: “jsonPathString(metrics, ‘$.api’)”
},
{
“columnName”: “http_method”,
“transformFunction”: “jsonPathString(metrics, ‘$.http_method’)”
},
{
“columnName”: “http_status”,
“transformFunction”: “jsonPathString(metrics, ‘$.http_status’)”
},
{
“columnName”: “request_body”,
“transformFunction”: “jsonPathString(metrics, ‘$.request_body’)”
},
{
“columnName”: “response_body”,
“transformFunction”: “jsonPathString(metrics, ‘$.response_body’)”
},
{
“columnName”: “request_path”,
“transformFunction”: “jsonPathString(metrics, ‘$.request_path’)”
},
{
“columnName”: “filebeat_timestamp”,
“transformFunction”: “jsonPathString(metrics, ‘$.filebeat_timestamp’)”
},
{
“columnName”: “response_code”,
“transformFunction”: “jsonPathString(metrics, ‘$.response_code’)”
},
{
“columnName”: “latency”,
“transformFunction”: “jsonPathString(metrics, ‘$.latency’)”
},
{
“columnName”: “timestamp”,
“transformFunction”: “jsonPathString(metrics, ‘$.timestamp’)”
},
{
“columnName”: “created_on”,
“transformFunction”: “jsonPathString(metrics, ‘$.created_on’)”
},
{
“columnName”: “updated_on”,
“transformFunction”: “jsonPathString(metrics, ‘$.updated_on’)”
}
]
},
“metadata”: {
“customConfigs”: {}
},
“routing”: {
“instanceSelectorType”: “strictReplicaGroup”
},
“upsertConfig”: {
“mode”: “PARTIAL”,
“defaultPartialUpsertStrategy”: “OVERWRITE”,
“partialUpsertStrategies”:{
“created_on”: “IGNORE”
}
}
}