2017-05-15 5 views
0

可能な限り明確に問題を説明しようとします。私はどのように日付列のHive SQLでBETWEEN演算子を実行する方法

select * from table t1 
where t1.DATE_COLUMN between TRUNC(SYSDATE, 'mm') and SYSDATE 

ことができます。私は、このような目標を達成するために、次のクエリを使用していますし、Oracle SQLで(日付が今月に含まれているレコードのみを選択する)日付別のテーブルをフィルタリングしたいと思いますHive SQLで同じフィルタを複製しますか?フィルタを適用するために使用する列は、TIMESTAMPタイプの列です(例:2017-05-15 00:00:00)。

私はCDH 5.7.6-1を使用しています。

アドバイスはありますか?

+0

'パーティション列をDATE_COLUMN'ですか? –

+0

@DuduMarkovitzいいえ、それはパーティションの列ではありません。 – MarioC

答えて

0

unix_timestampは固定されておらず、クエリ中に変更されることに注意してください。
このため、パーティションの削除には使用できません。
新しいHiveバージョンの場合は、代わりにcurrent_date/current_timestampを使用してください。

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

select * 
from table t1 
where t1.DATE_COLUMN 
      between cast(from_unixtime(unix_timestamp(),'yyyy-MM-01 00:00:00') as timestamp) 
      and  cast(from_unixtime(unix_timestamp()) as timestamp) 
; 

select cast (from_unixtime(unix_timestamp(),'yyyy-MM-01 00:00:00') as timestamp) 
     ,cast (from_unixtime(unix_timestamp()) as timestamp) 
; 

+---------------------+---------------------+ 
|   _c0   |   _c1   | 
+---------------------+---------------------+ 
| 2017-05-01 00:00:00 | 2017-05-16 01:04:55 | 
+---------------------+---------------------+ 
+0

更新された回答を表示 –

-1

あなたは文字列としてフォーマットすることができます。

where date_format(t1.DATE_COLUMN, 'y-m') = date_format(current_timestamp, 'y-m') 

私は今、ハイブのアクセス権を持っていないことを実現します。ドキュメントには'y-m'が表示されていますが、Javaドキュメントには'yyyy-mm'が含まれています。

+0

私はあなたが示唆したように試みましたが、セマンティック例外エラーが発生しました。 "無効な関数date_format。 – MarioC

関連する問題