我在列中有如下所示的数据:
5.
我需要提取邮政编码,它总是出现在房子之前,在所有情况下都有6-7个字符变化。房子前和邮政编码之间总是有一个空格,邮编之前有一个空格。
期望产出:
我试过两次使用substring_index,但只知道hive不支持这个函数。我是蜂巢的新手。帮助和任何参考材料也将是一个伟大的姿态。
提前谢谢。
发布于 2017-09-08 08:56:06
您可以使用这个正则表达式模式' (\\w+ \\w+) HOUSE'
。这意味着一个空格,一个或多个单词字符,一个空格,一个或多个字符,一个空格,一个豪斯。括号中是要提取的组。组指数为1。
演示:
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)
不区分大小写的使用修饰符:
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
发布于 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)
https://stackoverflow.com/questions/46110153
复制相似问题