2017-05-11 3 views
0

에서 대소 문자를 구분하지 array_contains 절을 수행하는 방법에 내가 이렇게 보이는 하이브 쿼리가 있습니다하이브

select * from table_name where array_contains(field_name, '${some_variable}'); 

이 문제없이 작동하지만, 대소 문자를 구분합니다. 나는 그것이 대소 문자를 구분해야하지만, 모두

select * from table_name where array_contains(lower(field_name), '${some_variable}'); 

select * from table_name where array_contains(lcase(field_name), '${some_variable}'); 

는 널 포인터 예외와 함께 실패합니다. 이 쿼리는 대소 문자를 구분하지 않는 방법이 있습니까?

답변

0
with t as (select array('X','y','Z') as field_name, 'Y' as var) 
select array_contains(split(lower(concat_ws('\u0001',field_name)),'\u0001'),lower(var)) 
from t 

또는

with t as (select array('X','y','Z') as field_name, 'Y' as var) 
select concat_ws('\u0001',field_name) rlike concat('(?i)(^|\\x01)',var,'(\\x01|$)') 
from t