如何在Hadoop Hive中获取Substring?

问题描述 投票:0回答:2

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

/Country/State/City/Suburb/Street

在这里我只需要获取国家/地区。

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

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

谢谢

mysql hadoop hive
2个回答
3
投票

我尝试用正则表达式来提取

Country
。使用正则表达式hive查询是:

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

但是以防万一,如果您将输入数据更改为不同的形式,那么您也必须更改正则表达式。

更新1

使用

split()
函数查询以提取所需数据。

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

0
投票

Split 很容易使用,但是如果分隔符是 ; 该怎么办? 会像Hive这样的系统中那样对待吗

© www.soinside.com 2019 - 2024. All rights reserved.