我的问题是如何通过字符串中的指示在Hive中获取子字符串。我的列值格式如下:
/Country/State/City/Suburb/Street
这里我只需要获得国家。
我喜欢SPLIT,它返回由'/'分隔的字符串数组。 还有SUBSTR(字符串a,int begin),它返回指示begin的子字符串。
在分裂中我需要再次访问一个数组,其中第一个元素是所需的元素,但只是想知道是否还有其他更简单的方法来获取国家。
感谢
答案 0 :(得分: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()
的更多详细信息,请参阅配置单LanguageManual+UDF
但是,如果您将输入数据更改为其他形式,则必须更改正则表达式。
<强> UPDATE1 强>
使用split()
函数查询以提取所需数据。
select split(column, '\\/')[1] from substring_tbl;