Пино – преобразование строки в проходимый JSON
У меня есть строка, поступающая из потока Kafka, которая очень похожа на пример использования документации JSONFORMAT .
Сейчас я борюсь с тем, как преобразовать его в проходимый JSON, чтобы я мог, в примере из документации, поместить значение «возраста» в столбец моей таблицы.
Я пробовал следующее:
jsonPath(JSONFORMAT(meta), '$.age')"
jsonPath(TOJSONMAPSTR(meta), '$.age')"
которые представляют собой комбинации функций JSONFORMAT и jsonPath.
Я подтвердил, чтоjsonPath
функция работает так, как ожидалось, когда данные из моего потока Kafka фактически отформатированы как JSON, т.е."jsonPath(source, '$.init_sync_state')"
, поэтому я не подозреваю, что это основная причина моих проблем.
Я ожидаю, что эта комбинация функций сначала преобразует мою строку в JSON, а затем извлечет значение из определенного пути. Однако похоже, что JSONFORMAT на самом деле не преобразует данные в JSON. Я также попробовал TOJSONMAPSTR , но результат тот же.
Есть ли способ преобразовать строку в структуру JSON в Pinot? Я упускаю что-то очевидное?
Любая помощь очень ценится. Спасибо!
1 ответ
Решено:
Решением было использовать jsonIndex , который преобразует JSON вSTRING
столбец, а затем используйтеjsonPath
чтобы получить к нему доступ.
Т.е. в примере выше мы бы сделали:
"jsonIndexConfigs": {
"meta": {
"maxLevels": 1,
"excludeArray": false,
"disableCrossArrayUnnest": true,
"includePaths": null,
"excludePaths": null,
"excludeFields": null
}
}
а затем вставьте возраст в мой столбец, используя столбец преобразования, который выглядит следующим образом:
{
"columnName": "age",
"transformFunction": "jsonPath(document, '$.age')"
},