7

結果セットのf0、MONTH、DAY、HOUR、MINUTEグループごとにカウントが得られない理由を誰かに教えてもらえますか?

結果セット:

結果セット

クエリ:

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)))  

スキーマ:

f0 INT(パーティション列)
f1 INT
f2 STRING
f3 STRING(パーティション列)
f4 STRING
f5 STRING
f6 STRING
f7 MAP<STRING,STRING>

* f2は、16進形式のUNIXタイムスタンプです。

4

1 に答える 1

11

これは、UNIX 時間に適用されたときにto_dateが null を返すことが原因である可能性があります。ハイブのマニュアル
によると:

to_date(string timestamp):
タイムスタンプ文字列の日付部分を返します: to_date("1970-01-01 00:00:00") = "1970-01-01"

代わりにfrom_unixtimeを使用して、正しい日付部分を取得してください。

注:
Hex2Dec UDF はHIVE-1545のコア ライブラリから取得されていると想定しています。

于 2013-02-20T11:29:47.220 に答える