我的问题是如何通过字符串中的指示在 Hive 中获取子字符串。我的列值格式是这样的:
/Country/State/City/Suburb/Street
这里我只需要得到Country。
我喜欢 SPLIT,它返回由“/”分隔的字符串数组。 还有 SUBSTR(string a, int begin),它从指定的开始返回一个子字符串。
在 split 中,我需要再次访问一个数组,其中第一个元素是所需的元素,但只想知道是否有任何其他更简单的方法来获取国家/地区。
谢谢
最佳答案
我尝试使用正则表达式来提取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
但以防万一,如果您将输入数据更改为不同的形式,那么您也必须更改正则表达式。
更新1
使用 split()
函数进行查询以提取所需数据。
select split(column, '\\/')[1] from substring_tbl;
关于mysql - 如何在 Hadoop Hive 中获取子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30470273/