从Hive中的字符串中提取子字符串

时间:2014-04-04 05:17:02

标签: string text substring hive extract

我有一个日期列。日期格式为M/d/yyyy hh:mm:ssMM/d/yyyy hh:mm:ssM/dd/yyyy hh:mm:ssMM/dd/yyyy hh:mm:ss 我想以yyyy-MM-dd格式转换这些日期。我怎样才能在Hive中实现它?

2 个答案:

答案 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;

就是这样,这对你有帮助。