こんにちは、私は、TRUNCとTO_DATEの使用の違いがHiveにあるかどうかを調べることを試みています。HiveのTRUNCとTO_DATEの違い
は、現在Oracleの中、私は、以下に示すデータに対して、次のcase文を書いた:
ORDER_NO | NAME | DATE_ | TASK_NO
ABC123 | Humpty | 07-OCT-16 12:30:54 | 1
ABC123 | Humpty | 07-OCT-16 12:30:54 | 2
ABC123 | Humpty | 07-OCT-16 12:32:20 | 6
SELECT ORDER_NO, NAME, DATE_, TASK_NO
(CASE WHEN DATE_ - LAG(DATE_) OVER (PARTITION BY ORDER_NO, NAME, TRUNC(DATE_) ORDER BY DATE_) <= 1/48
THEN 0 ELSE 1 END) AS COUNT1
を、これは私の結果与える:
ORDER_NO | NAME | DATE_ | TASK_NO | COUNT1
ABC123 | Humpty | 07-OCT-16 12:30:54 | 1 | 1
ABC123 | Humpty | 07-OCT-16 12:30:54 | 2 | 0
ABC123 | Humpty | 07-OCT-16 12:32:20 | 6 | 1
正しいです。私は私の完全なデータセットに対するハイブで同じクエリを使用している場合今私は、エラーメッセージが表示されます。
Error while compiling statement: FAILED: SemanticException Failed to breakup Windowing invocations into Groups. At least 1 group must only depend on input columns.
だから私はTO_DATEするTRUNCを変更し、この作品、私に次のような結果得られます。
SELECT ORDER_NO, NAME, DATE_, TASK_NO
(CASE WHEN DATE_ - LAG(DATE_) OVER (PARTITION BY ORDER_NO, NAME, TO_DATE(DATE_) ORDER BY DATE_) <= 1/48
THEN 0 ELSE 1 END) AS COUNT1
を
これは私に結果を与える:
ORDER_NO | NAME | DATE_ | TASK_NO | COUNT1
ABC123 | Humpty | 07-OCT-16 12:30:54 | 1 | 1
ABC123 | Humpty | 07-OCT-16 12:32:20 | 6 | 1
ABC123 | Humpty | 07-OCT-16 12:30:54 | 2 | 1
これは私がOracleで得るものとは異なります。私が集めることができるものから、日付の値は日付/時間で並べ替えられないので、日付の値は文字列として格納されます。これは問題があると思うところですが、修正するために何を変更する必要があるかはわかりません。
本当にいくつかのアドバイスをいただきありがとうございます。
更新されたコード:
SELECT
ORDER_NO
,NAME
,DATE_FIXED
,TASK_NO
,CASE WHEN DATE_UTS - LAG(DATE_UTS) OVER (PARTITION BY ORDER_NO, NAME, TO_DATE(DATE_FIXED) ORDER BY DATE_FIXED) <= 60*30
THEN 0
ELSE 1
END AS COUNT1
FROM
(
SELECT
ORDER_NO
,NAME
,TASK_NO
,FROM_UNIXTIME(UNIX_TIMESTAMP(DATE_, 'DD-MMM-YY HH:MM:SS')) AS DATE_FIXED
,UNIX_TIMESTAMP(DATE_, 'DD-MMM-YY HH:MM:SS') AS DATE_UTS
FROM TABLE1
) T
「DATE_」列のタイプは何ですか? – Kacper
Thanks Kacper、OracleのDATE_は日付データ型としてダウンしています。 – user3191160
DATE_タイプはHiveですか? –