首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在带有蜂巢的特定单词之前提取文本

在带有蜂巢的特定单词之前提取文本
EN

Stack Overflow用户
提问于 2017-09-08 06:41:34
回答 2查看 4.5K关注 0票数 0

我在列中有如下所示的数据:

  • 第一大道HE1 345号大厦123号。
  • HRE2 D34楼345号202号。
  • HA1 345号房门324 67

5.

我需要提取邮政编码,它总是出现在房子之前,在所有情况下都有6-7个字符变化。房子前和邮政编码之间总是有一个空格,邮编之前有一个空格。

期望产出:

  • HE1 345
  • HRE2 D34
  • HA1 345

我试过两次使用substring_index,但只知道hive不支持这个函数。我是蜂巢的新手。帮助和任何参考材料也将是一个伟大的姿态。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-08 08:56:06

您可以使用这个正则表达式模式' (\\w+ \\w+) HOUSE'。这意味着一个空格,一个或多个单词字符,一个空格,一个或多个字符,一个空格,一个豪斯。括号中是要提取的组。组指数为1。

演示:

代码语言:javascript
运行
复制
 select regexp_extract(s,' (\\w+ \\w+) HOUSE',1) 
from
(select 'Avenue 1 HE1 345 HOUSE 123.'  s union all
select 'FLAT 202 HRE2 D34 HOUSE 345.' s union all
select 'DOOR 324 HA1 345 HOUSE 67'    s) s;
OK
HE1 345
HRE2 D34
HA1 345
Time taken: 26.472 seconds, Fetched: 3 row(s)

不区分大小写的使用修饰符:

代码语言:javascript
运行
复制
hive>
    >
    > select regexp_extract(s,' (\\w+ \\w+) (?i)HOUSE',1)
    > from
    > (select 'Avenue 1 HE1 345 HOUSe 123.'  s union all
    > select 'FLAT 202 HRE2 D34 HOUsE 345.' s union all
    > select 'DOOR 324 HA1 345 HOuSE 67'    s) s;
OK
HE1 345
HRE2 D34
HA1 345

参见regex此处:https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

关于不区分大小写:http://www.regular-expressions.info/modifiers.html

票数 3
EN

Stack Overflow用户

发布于 2017-09-08 09:35:53

您可以将该文件保存为csv文件(复制记事本中的内容并以.csv扩展名保存)。

现在,您可以在单元中创建表,并从表中的csv文件中加载数据。

hive>创建表文本(column1字符串、column2字符串、column3字符串、column4字符串、column5字符串、column6字符串)行格式分隔字段,以‘’结束;确定时间: 0.137秒

要将数据加载到表中:使用hive>加载数据本地路径‘您文件的位置’覆盖到表文本中;

hive>加载数据本地inpath '/home/cloudera/FinalProjects/text.csv‘覆盖表文本;将数据加载到表default.text表default.text统计数据: numFiles=1、numRows=0、totalSize=84、rawDataSize=0 OK时间: 0.59秒

hive>从文本中选择column3,column4; OK HE1 345 HRE2 D34 HA1 345占用时间: 0.145秒,获取:3行(S)

票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46110153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档