我试图在2010年9月1日到2013年8月31日之间在Hive表中过滤数据.包含日期的列是字符串格式(yyyy-mm-dd).我可以在这个专栏上使用month()和year().但是如何使用它们在上述日期之间过滤数据呢?欢迎任何示例/示例代码!
关于伟大的事情yyyy-mm-dd
的日期格式是不存在需要提取month()
和year()
,可以直接对字符串做比较:
SELECT * FROM your_table WHERE your_date_column >= '2010-09-01' AND your_date_column <= '2013-08-31';
就像SQL一样,Hive支持BETWEEN运算符以获得更简洁的声明:
SELECT * FROM your_table WHERE your_date_column BETWEEN '2010-09-01' AND '2013-08-31';
Hive有很多很好的日期解析UDF:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions
正如Nigel Tufnel所暗示的那样进行字符串比较可能是最简单的解决方案,尽管技术上它不安全.但你可能不需要担心,除非你的表有关于中世纪年龄的历史数据(只有3年数字的日期)或科幻小说的日期(超过4年的数字日期).
无论如何,如果你发现自己想要进行更好的日期比较,或者你的日期格式不是"从大到小"的顺序,例如美国的"mm/dd/yyyy"惯例,那么你可以使用unix_timestamp
两个参数:
select * from your_table where unix_timestamp(your_date_column, 'yyyy-MM-dd') >= unix_timestamp('2010-09-01', 'yyyy-MM-dd') and unix_timestamp(your_date_column, 'yyyy-MM-dd') <= unix_timestamp('2013-08-31', 'yyyy-MM-dd')