2013-02-15 42 views
6

Bất cứ ai có thể cho tôi biết lý do tại sao tôi không được tính cho mỗi nhóm, MONTH, DAY, HOUR, MINUTE trong tập kết quả của tôi không?HIVE - nhóm theo chức năng ngày

Kết quả thiết lập:

result set

Query:

SELECT t.f0, MONTH(TO_DATE(Hex2Dec(t.f2))), DAY(TO_DATE(Hex2Dec(t.f2))), HOUR(TO_DATE(Hex2Dec(t.f2))), MINUTE(TO_DATE(Hex2Dec(t.f2))), COUNT(DISTINCT t.f1) 
FROM table t 
WHERE (t.f0 = 1 OR t.f0 = 2) 
AND (t.f3 >= '2013-02-06' AND t.f3 < '2013-02-15') 
AND (Hex2Dec(t.f2) >= 1360195200 AND Hex2Dec(t.f2) < 1360800000) 
AND *EXTRA CONDITIONS* 
GROUP BY t.f0, MONTH(TO_DATE(Hex2Dec(t.f2))), DAY(TO_DATE(Hex2Dec(t.f2))), HOUR(TO_DATE(Hex2Dec(t.f2))), MINUTE(TO_DATE(Hex2Dec(t.f2))) 

Schema:

f0 INT (phân vùng Column)
f1 INT
STRING f2
STRING f3 (P artition Cột)
STRING f4
STRING f5
STRING f6
f7 MAP <STRING,STRING>

* f2 là một dấu thời gian unix ở định dạng Hexadecimal

+0

Bạn có thể chia sẻ một số thông tin chi tiết về dữ liệu đầu vào của bạn? Ngay bây giờ tôi chỉ thấy truy vấn và đầu ra, thật khó để tìm ra những gì sai trong truy vấn của bạn mà không biết bạn đang áp dụng nó vào cái gì. –

+0

@Charles: Thông thường, tôi đồng ý với bạn về việc thiếu chi tiết. Tuy nhiên, nguồn dữ liệu mà tôi đang xử lý là độc quyền và tôi muốn được ở bên "an toàn" ngay cả khi tôi có nguy cơ mơ hồ và/hoặc mơ hồ trong câu hỏi của tôi. – Jubbles

+0

bạn có nhận được bất kỳ dữ liệu nào với nhóm không? –

Trả lời

9

này có thể là do to_date trả về NULL khi nó được áp dụng trên một thời gian unix.
Theo Hive manual:

to_date (string timestamp):
Trả về phần ngày của một timestamp chuỗi: to_date ("1970/01/01 00:00:00") = "1970-1901 -01"

Sử dụng from_unixtime thay vì để lấy lại những phần đúng ngày.

Lưu ý:
tôi giả HEX2DEC UDF được lấy từ các thư viện lõi của HIVE-1545