2015-05-26 26 views
0

我的问题是如何通过字符串中的指示获取Hive中的子字符串。我的列值格式是这样的:如何在Hadoop Hive中获取子串?

/Country/State/City/Suburb/Street 

这里我只需要得到国家。

我非常喜欢SPLIT,它返回由'/'分隔的字符串数组。 还有SUBSTR(string a,int begin),它从指定的begin开始返回一个子串。

在拆分我需要再次访问一个数组,其中第一个元素是所需的数组,但只是想知道是否有任何其他更简单的方法来获得国家。

感谢

+1

'split()'就像它变得简单一样。 – gobrewers14

回答

2

我用正则表达式试图提取Country。使用正则表达式蜂巢查询:

select regexp_extract(column,'\/(.*)/.*/.*/.*/',1) from substring_tbl; 

我创建表的语句:

create external table substring_tbl(
column string) 
LOCATION '/user/root/hive_substring/'; 

输入数据:

/Country/State/City/Suburb/Street 

查询和正则表达式来提取所需要的数据:

select regexp_extract(column,'\/(.*)/.*/.*/.*/',1) from substring_tbl; 

输出:

Country 

信息:regexp_extract()返回使用图案中提取的字符串。有关regexp_extract()的更多详细信息,请访问hive LanguageManual+UDF

但是,如果您将输入数据更改为其他形式,则还必须更改正则表达式。

使用split()函数来提取所需的数据UPDATE1

查询。

select split(column, '\\/')[1] from substring_tbl; 
+2

完整矫枉过正。所有你需要的是'split(column,'\\ /')[1]' – gobrewers14

+0

是的,这是一个很好的方法。非常感谢答案。我已经更新了答案。 –