使用配置单元提取特定单词之前的文本

x759pob2  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(443)

我在一列中有如下数据:
河东大街1号345号123室。
202号公寓,hre2 d34室,345室。
门324 ha1 345 house 67
5
我需要提取的邮政编码总是在房子之前,在所有情况下6-7个字符不等。在房子前面和邮政编码和邮政编码之前总是有一个空格。
期望输出:
赫12345
hre2 d34型
哈一345
我试过两次使用substring\u index,结果发现hive不支持这个函数。我对Hive几乎是个新手。帮助和任何参考资料也将是一个伟大的姿态。
提前谢谢。

0mkxixxg

0mkxixxg1#

您可以将该文件另存为csv文件(复制记事本中的内容并以.csv扩展名保存)。
现在您可以在配置单元中创建表,并从表中的csv文件加载数据。
配置单元>创建表格文本(column1字符串、column2字符串、column3字符串、column4字符串、column5字符串、column6字符串)以“”结尾的行格式分隔字段;正常时间:0.137秒
将数据加载到表中:使用hive>load data local inpath“location of you file”覆盖到表文本中;
hive>load data local inpath'/home/cloudera/finalprojects/text.csv'覆盖到表格文本中;正在将数据加载到表default.text table default.text stats:[numfiles=1,numrows=0,totalsize=84,rawdatasize=0]确定所用时间:0.59秒
配置单元>从文本中选择第3列、第4列;确定he1 345 hre2 d34 ha1 345所用时间:0.145秒,获取时间:3行

xxhby3vn

xxhby3vn2#

您可以使用这个正则表达式模式 ' (\\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)

不区分大小写使用 (?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

请参见此处的regex文档:https://docs.oracle.com/javase/7/docs/api/java/util/regex/pattern.html
关于不区分大小写:http://www.regular-expressions.info/modifiers.html

相关问题