mysql - 如何在 Hadoop Hive 中获取子字符串?

标签 mysql hadoop hive

我的问题是如何通过字符串中的指示在 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/

相关文章:

hadoop - Apache Hive 安装在伪分布式或多节点集群环境

c# - 如果数据库中的值发生变化,如何持续更新该值

php - MySQL。随机行。将行转换为 PHP 数组。

mysql - 如何将表情符号字符 Telegram 保存到 MySql 表?

hadoop - 如何从S3获取数据并将其用于Elastic map reduce/在哪里写代码?

java - 如何在 pig 文件中使用 .jar

sql - 在复杂列上创建 Hive 索引

php - 如何在 mysql 或数组中查找未知字符

import - 使用 sqoop 导入 Hive 时出现文件存在错误

sql - Hive:通过查找组中的最大值