我的列中的数据如下所示:
FLAT 202 HRE2 D34 HOUSE 345。
DOOR 324 HA1 345 HOUSE 67
5
在所有情况下,我需要提取始终在6-7个字符之间变化的邮政编码。在HOUSE之前和邮政编码之间以及邮政编码之前总是有一个空格。
期望的输出:
我尝试过两次使用substring_index才知道hive不支持该功能。我几乎是Hive的新手。帮助和任何材料参考也将是一个伟大的姿态。
提前致谢。
答案 0 :(得分:2)
您可以使用此正则表达式模式' (\\w+ \\w+) HOUSE'
。这意味着一个空格,一个或多个单词字符,一个空格,一个或多个字符,一个空格,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)
对于不区分大小写的使用(?i)
修饰符:
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
请参阅此处的正则表达式文档:https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
答案 1 :(得分:-4)
您可以将该文件另存为csv文件(将内容复制到记事本中并以.csv扩展名保存)。
现在,您可以在配置单元中创建表,并从表中的csv文件加载数据。
<强>蜂房&GT; create table text(column1 string,column2 string,column3 string,column4 string,column5 string,column6 string)以''; 结尾的行格式分隔字段 好 所用时间:0.137秒
将数据加载到表格中: 使用 的蜂房&GT;加载数据LOCAL inpath'你文件的位置'覆盖到表格文本;
蜂房&GT;在路径'/home/cloudera/FinalProjects/text.csv'中加载数据LOCAL覆盖到表格文本中; 将数据加载到表default.text 表default.text stats:[numFiles = 1,numRows = 0,totalSize = 84,rawDataSize = 0] 好 所用时间:0.59秒
<强>蜂房&GT;从文本中选择column3,column4; 好 HE1 345 HRE2 D34 HA1 345 所用时间:0.145秒,提取:3行