Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
Jl-nrd
Contributor
Contributor

How to pass an array or list as a globalMap variable for a WHERE x IN clause of a DBinput

I'd like to generate a WHERE x IN (a,b,c,...) clause to use in a DBinput querying a very big table.
the "IN" list is coming from a previous Tmap in my job.

 

For now I use a TflowToIterate followed by a Tmap with a reload at each row lookup but it works with a where x=GlobalMap.get("myvar"), thus generating many iteration/ row flow.

 

Question is how can I generate an array/list from a tmap and use it latter on my job in the IN list of a where clause. i guess globalMap variable is the answer, but i'm struggling on the "how".

 

Thanks in advance 0683p000009MACn.png

Labels (1)
  • v7.x

3 Replies
Anonymous
Not applicable

I'm not sure whether you want an Array or whether you simply want to append to a String variable which can be used in your IN in your query. I suspect the String will work better for you given what you have described. Does this sound right? Also, I think it would be better to build the list in a tJavaFlex rather than a tMap. Then you can easily manipulate the list in Java without having to worry about doing it inline.

akumar2301
Specialist II
Specialist II

you could use tjavaflex 

 

suppose your input is 

1

2

3

 

tJavaFlex

 

Begin Code

final char COMMA = ',';
// String builders for Selection Number List .
StringBuilder selectionListBuilder = new StringBuilder();

 

Main Code

// Append comma to the number list.
if (selectionListBuilder length() != 0) {
selectionListBuilder.append(COMMA);
}
// Append number to selection list.
selectionListBuilder.append(row1.listelement);

 

End Code 

// Get the number list.
String selectionList = selectionListBuilder.toString();


// Set the global variables.
if (selectionList length() != 0) {
globalMap.put("NumberList", selectionList );
//context.NumberList=selectionList.substring(0,selectionList.length());
}

 

Note that Some database has limit on Number of element in IN clause e.g. Oracle has limit of 1000. So please build your Query expression accordingly.

Jl-nrd
Contributor
Contributor
Author

Thanks to you 2 you show me the way 0683p000009MACn.png !

 

I've used a tjavarow at the output of my first tMap

 

code :

if ((String)globalMap.get("inList") == "")
{
globalMap.put("inList", "'"+input_row.elem+"'");
}else{
globalMap.put("inList", (String)globalMap.get("inList")+",'"+ input_row.elem+"'");
}

After that in the next subjob, on my lookup DBinput of my second tMap i could use WHERE x IN (globalMap.get("inList"))