2011-10-06 38 views
15

Làm cách nào để sử dụng mục In trong Hive Tôi muốn viết một cái gì đó như thế này trong Hive chọn x từ y trong đó yz (chọn riêng z từ y) x; Nhưng tôi không tìm được cách nào để thực hiện nó .. Tôi đã thử Trong mệnh đề trong Hive 0.7, nó đã ném lỗi, Ngoài ra tôi đã thử Find_in_Set .. bằng cách sử dụng find_in_set (y.z, subquery) .. nhưng công việc đang bị lỗi.cách viết truy vấn con và sử dụng mệnh đề "Trong" trong Hive

Tôi muốn thực hiện việc này trên Hive. Xin hãy giúp tôi nếu ai biết làm thế nào để làm điều này trong Hive ..

Cảm ơn & Kính trọng, Atul

Trả lời

32

Bạn có thể sử dụng bán tham gia (https://cwiki.apache.org/Hive/languagemanual-joins.html):

LEFT SEMI JOIN thực hiện các ngữ nghĩa truy vấn phụ IN/EXISTS tương ứng một cách hiệu quả. Vì Hive hiện không hỗ trợ truy vấn phụ IN/EXISTS, bạn có thể viết lại các truy vấn của mình bằng cách sử dụng LEFT SEMI JOIN. Những hạn chế của việc sử dụng BÁN LEFT JOIN là bảng bên phải phía chỉ nên được tham chiếu trong điều kiện join (ON-khoản), nhưng không phải trong WHERE- hoặc CHỌN-khoản, vv

SELECT a.key, a.value 
    FROM a 
    WHERE a.key in 
    (SELECT b.key 
    FROM B); 

có thể viết lại để:

SELECT a.key, a.val 
    FROM a LEFT SEMI JOIN b on (a.key = b.key) 
2

tôi đang sử dụng phiên bản hive 0.7.1SELECT * FROM MYTABLE WHERE MYCOLUMN IN ('thisThing','thatThing');

tôi đã thử nghiệm này trên một loại cột STRING vì vậy tôi không chắc chắn nếu điều này làm việc phổ biến trên tất cả các loại dữ liệu kể từ khi tôi nhận thấy như Wawrzyniec đề cập ở trên hướng dẫn sử dụng ngôn ngữ Hive nói rằng nó không được hỗ trợ và thay vào đó sử dụng LEFT SEMI JOIN nhưng nó hoạt động tốt trong thử nghiệm của tôi.

0

giả table t1(id,name)table t2(id,name)

niêm yết chỉ những id từ t1 tồn tại trong t2 (về cơ bản IN khoản)

hive>select a.id from t1 a left semi join t2 b on (a.id=b.id); 

niêm yết chỉ những id từ t1 chỉ tồn tại trong t1 nhưng không tồn tại ở t2 (về cơ bản là NOT IN khoản)

hive>select a.id from t1 a left outer join t2 b on(a.id=b.id) where b.id is null; 
Các vấn đề liên quan