我有一个日期列。日期格式为M/d/yyyy hh:mm:ss
或MM/d/yyyy hh:mm:ss
或M/dd/yyyy hh:mm:ss
或MM/dd/yyyy hh:mm:ss
我想以yyyy-MM-dd
格式转换这些日期。我怎样才能在Hive中实现它?
答案 0 :(得分:0)
您需要为此编写自定义UDF,以读取该列,查找数据中存在的日期格式,然后将其转换为所需格式。 您可以使用SimpleDateFormat来解析和转换日期列。您可以参考此链接来编写自定义UDF:link
答案 1 :(得分:0)
在eclipse中创建一个项目并编写如下所示的类:
package com.custom.udf;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class CustomDateValidator extends UDF{
public static void main(String[] args) {
System.out.println("This is a Custom Date Validator class");
}
public String evaluate(String dateText) {
if (null == dateText) {
return null;
} else {
return toDate(dateText);
}
}
public String toDate(String d) {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss");
Date dt = new Date(d);
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sf.format(new Date(sdf.format(dt)));
}
}
需要将 evaluate
方法添加到udf工作中。
在构建路径中添加`hive-exec-0.12.0.jar``。
使用eclipse创建DateConvertor.jar。
在hive add jar <location/DateConvertor.jar>
中添加此jar。
在hive提示符下使用以下命令创建函数:
create temporary function customdate as 'com.custom.udf.CustomDateValidator';
现在假设您要将此函数用于sql命令,然后在hive提示符下使用以下查询:
select customdate(time) from employee;
就是这样,这对你有帮助。