如何在Hive中将一列拆分为两列

时间:2018-02-14 20:39:04

标签: python hadoop split hive user-defined-functions

在我的Hive表中,我有一个名为YearMonth的列,其值为' Jul1998'。我需要将每行中的字符串拆分为Month(' Jul')和Year(' 1998),并将它们分别添加到Hive中的新列中。不幸的是,我的代码没有正确执行,并在每个其他行中添加一个NULL实例,如下所示:

enter image description here

我采取了以下步骤来获得上述输出:

创建了一个split.py文件来拆分字符串' Jul1998'进入' Jul'和' 1998

#!/usr/bin/python
import sys

for line in sys.stdin:
    Month= line[:3]
    Year = line[3:]
    print '\t'.join([Month, Year])

然后我进入Hive并将python文件添加到hive目录中 最后,我使用transform函数拆分列并创建了两个新列。

ADD FILE /home/ec2-user/split.py;
INSERT OVERWRITE TABLE data
SELECT TRANSFORM (yearmonth) USING 'split.py' AS (month,year) FROM data;

1 个答案:

答案 0 :(得分:4)

假设您的数据格式一致,您只需在Hive中使用regexp_extract,而无需使用UDF。

SELECT regexp_extract(yearmonth,([^0-9]+)) as mth,regexp_extract(yearmonth,([0-9]+)) as yr
FROM data;

或简单的SUBSTRING

select substring(yearmonth,1,3) as mth,substring(yearmonth,4) as yr
from data