package com.facebook.hive.udf; import org.apache.hadoop.hive.ql.exec.Description; import org.apache.hadoop.hive.ql.exec.UDF; import java.util.ArrayList; /** * ArrayJoin: Join an array using a separator. Just like "join" in every language ever. * This is very similar to CONCAT_WS, but operates on an array rather than a set of strings. * */ @Description(name = "udfarrayjoin", value = "_FUNC_(sep, arr) - Take every item in arr and concatenate it, putting the separator in between. Returns null if sep or arr is null; nulls in the array are ignored.", extended = "Example:\n" + " > SELECT FB_ARRAY_JOIN(',', ARRAY(1, 2, 3)) FROM tmp_asmith_one_row;\n" + "Returns \"1,2,3\"\n") public class UDFArrayJoin extends UDF { public String evaluate(String sep, ArrayList<String> arr) { if (sep == null || arr == null) { return null; } else if (arr.size() == 0) { return ""; } else { String str = null; for (String item : arr) { if (item != null) { if (str != null) { str += sep; } else { str = ""; } str += item; } } return str; } } }