/google/gmail/inbox
/google/drive/map
/google/apps
/yahoo/news/cricket
/yahoo/mail/
/yahoo/sports
/wiki/ind/jack
/wiki/us/jil
我需要获取所需的页面组。如果我搜索以' google'开头的网页论坛使用配置单元查询,我需要获取前3行的数据。
/google/gmail/inbox
/google/drive/map
/google/apps
通过这种方式,我需要根据页面组获取数据。
我使用like函数搜索字符串。
select * from table where field like '%/google/%';
答案 0 :(得分:8)
听起来你想要页面组。这可能是谷歌,但它似乎也可能是雅虎。如果要通过搜索引擎提取页面组,可以使用正则表达式。您可以在(page1 | page2 | ... | pageN)中放置多个网站。
Select column from table
where column rlike '.*(google|yahoo).*'
输出:
/google/gmail/inbox
/google/drive/map
/google/apps
您可能想要创建一个新列,其中包含搜索引擎名称或目标网页。似乎路径中的第一个位置是着陆页。您可以这种方式访问目标网页:
select * from
(Select column
, regexp_extract('^(\\/[a-zA-Z]*\\/)',1) as landing_page
from table) a
where landing page in ('google','yahoo',...,'bing')
;
输出:
column new column
/google/gmail/inbox /google/
/google/drive/map /google/
/google/apps /google/
/yahoo/news/cricket /yahoo/
/yahoo/mail/ /yahoo/
/yahoo/sports /yahoo/
/bing/meats/delisandwich /bing/
/bing/maps/delis /bing/
如果您不想/谷歌/而只是谷歌,那么请执行:
regexp_extract('^\\/([a-zA-Z]*)\\/',1) as landing_page
现在我假设着陆页首先出现在您描述的路径中。
答案 1 :(得分:1)
问题有点模棱两可,但我相信您正在尝试在字符串中搜索单词google
并返回字符串中包含单词google
的行。
假设您有下表:
create table test (val string);
它包含以下记录:
hive> select * from test;
/google/gmail/inbox
/google/drive/map
/yahoo/mail/
您可以使用以下查询选择包含字符串google
的行:
select val from test
where instr(val, 'google') = 2;
这给出了结果:
/google/gmail/inbox
/google/drive/map
instr
给出您搜索的字符串的位置。在这种情况下,google
的位置为2.如果您尝试获取包含google
的所有行,则可以使用:
select val from test
where instr(val, 'google') != 0;
您可以从documentation了解各种Hive字符串函数。