仅属于给定的String列表或其元素组合的Hive过滤器值

问题描述 投票:0回答:3

我正在处理蜂巢表,我必须根据地理位置提取数据。我只需要过滤AMER区域的数据,我的意思是列contrycode仅包含此列表'ARG','BHS','BRA','CAN','CUB'中的一个或任何组合,“ MEX”,“ USA”,“ VEN”。是否有任何配置单元运算符可以根据此规范过滤数据:contrycode包含给定列表中的一个或组合

提前感谢

sql select hive hiveql where-clause
3个回答
0
投票

您似乎正在寻找IN

select * 
from mytablbe  
where country_code in ('ARG', 'BHS', 'BRA', 'CAN', 'CUB', 'MEX', 'USA', 'VEN')

这将为您提供country_code等于列表中的代码之一的所有行。

或者,您可以使用rlike对正则表达式进行模式匹配:

select * 
from mytablbe  
where country_code rlike '(ARG)|(BHS)|(BRA)|(CAN)|(CUB)|(MEX)|(USA)|(VEN)'

0
投票

您好,创建一个表,可以在其中绘制大洲和国家/地区映射。进行内部联接并获取数据。

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'

0
投票

我添加了UDF函数:

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地区的输入列表

© www.soinside.com 2019 - 2024. All rights reserved.