Функция Groovy для использования условного оператора и синтаксического анализа даты и времени
Я хочу написать отличную функцию в «transformConfigs» конфигурации таблицы в Apache Pinot. Я хочу присвоить значение «A», если моя метка времени больше 7:00:00, но в противном случае присвоить значение «B» в столбце.
Это то, что я пробовал, но ни один из них не работает:
Groovy({LocalDateTime.parse(t, \"yyyy-MM-dd hh:mm:ss.SSS\").toDate().format('HH:mm:ss') > LocalTime.of(7, 0, 0) ? 'A' : 'B'}, t)
Groovy({java.time.format.DateTimeFormatter.LocalDateTime.parse(t, "yyyy-MM-dd hh:mm:ss.SSS").toDate().format('HH:mm:ss') > java.time.format.DateTimeFormatter.LocalTime.of(7, 0, 0) ? 'A' : 'B'}, t)
Groovy({SimpleDateFormat time_now = new SimpleDateFormat(\"yyyy-MM-dd hh:mm:ss.SSS\"); SimpleDateFormat output = new SimpleDateFormat(\"hh:mm:ss.SSS\"); Date d = time_now.parse(t); String f_time_now = output.format(d); String f_shift_time = output.format(\"07:00:00.000\"); def result = formattedTime > f_shift_time ? 'A' : 'B'; return result}, t)
Конфигурация стола:
{
"REALTIME": {
"tableName": "test_REALTIME",
"tableType": "REALTIME",
"segmentsConfig": {
"schemaName": "test",
"replication": "1",
"timeColumnName": "t",
"allowNullTimeValue": false,
"replicasPerPartition": "1"
},
"tenants": {
"broker": "DefaultTenant",
"server": "DefaultTenant",
"tagOverrideConfig": {}
},
"tableIndexConfig": {
"invertedIndexColumns": [],
"noDictionaryColumns": [],
"streamConfigs": {
"streamType": "kafka",
"stream.kafka.topic.name": "test_topic",
"stream.kafka.broker.list": "localhost:9092",
"stream.kafka.consumer.type": "lowlevel",
"stream.kafka.consumer.prop.auto.offset.reset": "smallest",
"stream.kafka.consumer.factory.class.name": "org.apache.pinot.plugin.stream.kafka20.KafkaConsumerFactory",
"stream.kafka.decoder.class.name": "org.apache.pinot.plugin.stream.kafka.KafkaJSONMessageDecoder",
...
},
"rangeIndexColumns": [],
"rangeIndexVersion": 2,
"autoGeneratedInvertedIndex": false,
"createInvertedIndexDuringSegmentGeneration": false,
"sortedColumn": [],
"bloomFilterColumns": [],
"loadMode": "MMAP",
"onHeapDictionaryColumns": [],
"varLengthDictionaryColumns": [],
"enableDefaultStarTree": false,
"enableDynamicStarTreeCreation": false,
"aggregateMetrics": false,
"nullHandlingEnabled": false
},
"metadata": {},
"quota": {},
"routing": {},
"query": {},
"ingestionConfig": {
"transformConfigs": [
{
"columnName": "shift",
"transformFunction": "Groovy({LocalDateTime.parse(t, \"yyyy-MM-dd hh:mm:ss.SSS\").toDate().format('HH:mm:ss') > LocalTime.of(7, 0, 0) ? 'A' : 'B'}, t)"
}
]
},
"isDimTable": false
}
}
Схема:
{
"schemaName": "test",
"dimensionFieldSpecs": [
{
"name": "shift",
"dataType": "STRING"
}
],
"dateTimeFieldSpecs": [
{
"name": "t",
"dataType": "TIMESTAMP",
"format": "1:MILLISECONDS:EPOCH",
"granularity": "1:MILLISECONDS"
}
]
}
Вывод: проглатывания не происходит.
Заранее спасибо. Дайте мне знать, если я могу предоставить более подробную информацию.