Лучший способ управлять и манипулировать большими sql запросами в Mule - PullRequest
0 голосов
/ 05 мая 2020

У меня есть требование запустить большой запрос sql в mule, но запрос меняется в зависимости от полезной нагрузки. Мне нужно изменить имена столбцов, где и сгруппировать по условиям et c в зависимости от полезной нагрузки.

В настоящее время я помещаю шаблон запроса в папку ресурсов, скажем, test. sql. И в запросе я помещаю какое-нибудь ключевое слово, которое нужно заменить, например, replaceColumn. И я использую компонент набора переменных, чтобы заменить это ключевое слово требуемым ключевым словом, например "Field1Column"

переменная: formQuery

%dw 2.0
output application/java
var query = readUrl('classpath://test.sql','text/plain')
---
query replace "replaceColumn" with payload.Field1Column

В компоненте выбора БД я просто помещаю # [vars.formQuery]

Это решение работает для меня, но трудно заменить многие части запроса, вложив оператор replace.

Как это лучше сделать?

1 Ответ

3 голосов
/ 05 мая 2020

Вы можете выполнить эту рекурсивную замену на основе карты с ключами / значениями, как описано здесь https://simpleflatservice.com/mule4/RecursiveReplaceByMap.html

%dw 2.0
var x="The quick brown fox jumps over the lazy dog"
var myMap={fox:'chicken', dog:"me"}
var keys=myMap pluck ($$)
fun changeMe ( value, index ) = 
  if ( index < sizeOf(keys)  ) 
  changeMe( (value replace ( keys[index] ) with ( myMap[keys[index]] ) ) , index+1 ) 
  else value
output application/json
---
changeMe(x,0)

вывод

"The quick brown chicken jumps over the lazy me"

enter image description here

...