【发布时间】:2014-04-04 05:17:01
【问题描述】:
我有一个日期列。日期格式为 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 中实现它?
【问题讨论】:
标签: string text substring hive extract
我有一个日期列。日期格式为 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 中实现它?
【问题讨论】:
标签: string text substring hive extract
您需要为此编写自定义 UDF,以读取该列,查找数据中存在的日期格式,然后将其转换为所需格式。 您可以使用SimpleDateFormat 来解析和转换日期列。您可以参考此链接编写自定义 UDF:link
【讨论】:
在 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;
就是这样,这对你有帮助。
【讨论】: