복붙노트

[HADOOP] 하이브 - LIKE 연산자

HADOOP

하이브 - LIKE 연산자

나는 그 문제를 어떻게 다루는 지 알 수 없다.

이것은 내 데이터입니다.

Table1:         Table2:
BRAND           PRODUCT           SOLD
Sony            Sony ABCD         1233
Apple           Sony adv          1233
Google          Sony aaaa         1233
IBM             Apple 123         1233
etc.            Apple 345         1233
                IBM 13123         1233

브랜드 및 총 판매량을 나타내는 표가있는 쿼리를 필터링 할 수 있습니까? 내 생각은 :

Select table1.brand, sum(table2.sold) from table1
join table2
on (table1.brand LIKE '%table2.product%')
group by table.1.brand

그건 내 생각 이었지만 항상 오류가 발생했습니다.

가장 큰 문제는 Like-Operator입니다. 아니면 다른 해결책이 있습니까?

해결법

  1. ==============================

    1.두 가지 문제가 있습니다. 우선, 하이브에있는 JOIN은 평등 조건에서만 작동합니다. 그런 식으로는 작동하지 않습니다.

    두 가지 문제가 있습니다. 우선, 하이브에있는 JOIN은 평등 조건에서만 작동합니다. 그런 식으로는 작동하지 않습니다.

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins

    대신 where 절로 이동하려고합니다.

    둘째, 같은 문장 자체에 문제가있는 것을 볼 수 있습니다. '% table2.product %'는 문자 그대로 '% table2.product %'문자열로 해석됩니다. 또한, 이것이 의도 된 것을 수행하고 있었다하더라도, 당신이 그것을 다른 방법으로 원할 때, 브랜드 안의 table2.product를 찾도록 노력할 것입니다. 의도 한 평가를 얻으려면 table1.brand의 내용에 와일드 카드를 추가해야합니다. 이를 위해 와일드 카드를 표현식에 연결해야합니다.

    table2.product LIKE concat('%',table1.brand,'%'))
    

    이렇게하면 '% table2.product %'대신 문자열 '% Sony %', '% Apple %'... 등을 평가하게됩니다.

    당신이 원하는 것은 브랜든 벨 (Brandon Bell)의 질문입니다. 나는이 대답에 합병했습니다 :

    SELECT table1.brand, SUM(table2.sold) 
    FROM table1, table2
    WHERE table2.product LIKE concat('%', table1.brand, '%') 
    GROUP BY table1.brand;
    
  2. ==============================

    2.JOIN없이이 작업을 수행 할 수 있어야합니다. 다음 쿼리를 참조하십시오.

    JOIN없이이 작업을 수행 할 수 있어야합니다. 다음 쿼리를 참조하십시오.

    SELECT table1.brand, sum(table2.sold) 
    FROM table1, table2 
    WHERE table2.product LIKE concat('%', table1.brand, '%') 
    GROUP BY table1.brand;
    

    이것은

    Apple   2466
    IBM     1233
    Sony    3699
    

    입력 파일의 위치는 다음과 같습니다.

    Sony
    Apple
    Google
    IBM    
    

    Sony ABCD       1233
    Sony adv        1233
    Sony aaaa       1233
    Apple 123       1233
    Apple 345       1233
    IBM 13123       1233
    
  3. from https://stackoverflow.com/questions/31340218/hive-like-operator by cc-by-sa and MIT license