Используя Apache Nifi, я пытаюсь выяснить, как найти записи, содержащие строку в массиве, начинающуюся со значения.
Учитывая приведенный ниже массив, мне нужна только запись, у которой есть тег, начинающийся с «/test2/».
[
{
"name":"bob",
"tags":[ "/test1/foo","/alpha"]
}
,
{
"name":"bill",
"tags":[ "/test2/blah","/beta"]
}
]
SELECT * FROM FLOWFILE WHERE RPATH_STRING(теги, '/') LIKE '/test2/%'
due to java.lang.String cannot be cast to org.apache.nifi.serialization.record.Record: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.nifi.serialization.record.Record
Я пробовал несколько других перестановок, но не повезло.
Возможное решение с 2 процессорами (ScriptedTransformProcessor
-> QueryRecord
):
ScriptedTransformProcessor (добавьте новое поле tags_str
, объединив все элементы в tags
с разделителем |
)
Script Language
: Groovy
Script Body
:record.setValue('tags_str', record.getValue('tags').join("|"))
record
Выход (JSON):
[ {
"name" : "bob",
"tags" : [ "/test1/foo", "/alpha" ],
"tags_str" : "/test1/foo|/alpha"
}, {
"name" : "bill",
"tags" : [ "/test2/blah", "/beta" ],
"tags_str" : "/test2/blah|/beta"
} ]
QueryRecord (фильтр)
SELECT name, tags
FROM FLOWFILE
WHERE tags_str LIKE '%/test2/%'
вывод (JSON):
[ {
"name" : "bill",
"tags" : [ "/test2/blah", "/beta" ]
} ]