我正在处理蜂巢表,我必须根据地理位置提取数据。我只需要过滤AMER区域的数据,我的意思是列contrycode仅包含此列表'ARG','BHS','BRA','CAN','CUB'中的一个或任何组合,“ MEX”,“ USA”,“ VEN”。是否有任何配置单元运算符可以根据此规范过滤数据:contrycode包含给定列表中的一个或组合?
提前感谢
您似乎正在寻找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)'
您好,创建一个表,可以在其中绘制大洲和国家/地区映射。进行内部联接并获取数据。
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'
我添加了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地区的输入列表