sql配置单元筛选只属于给定字符串列表或其元素组合的值

8tntrjer  于 2021-06-25  发布在  Hive
关注(0)|答案(2)|浏览(600)

我正在处理配置单元表,必须根据地理位置提取数据。我只需要过滤amer区域的数据,我的意思是列contycode只包含列表'arg'、'bhs'、'bra'、'can'、'cub'、'mex'、'usa'、'ven'中的一个或任意组合。是否有任何配置单元操作符可以基于此规范过滤数据:contrycode包含给定列表中的一个或一个组合?
提前谢谢

uubf1zoe

uubf1zoe1#

嗨,创建一个表格,你可以有Map的大陆和国家的Map。进行内部连接并获取数据。

ie  Contmaptable

   country_code , continent

 query wiil look like 
     select * 
     from youtable  yt
     join  Contmaptable cm
     on yt.country_code =cm.country_code
     and continent = 'AMAR'
vxf3dgd4

vxf3dgd42#

我添加了一个自定义函数:

class FilterCodePaysAMER extends UDF {
  def evaluate(s1: String, a1: Array[String]): Boolean = {
    s1
      .replaceAll("\\[", "")
      .replaceAll("\\]", "")
      .split(",")
      .map(x => a1.contains(x))
      .reduce((b1, b2) => b1 && b2)

  }

所以当我调用函数时:

val a1 = Array("ARG", "BHS", "BRA", "CAN", "CUB", "MEX", "USA", "VEN")
filter.evaluate("[CAN,USA,ARG,USA,USA,BRA,CAN,BHS,USA,USA,VEN,CUB,MEX,USA,USA,USA,CAN,USA,TUN]", a1)

它返回false,因为tun不属于表示amer区域的输入列表

相关问题