搜索字符串中的特定文本 - Hive

Kri*_*hna 5 hadoop hive hiveql

/google/gmail/inbox
 /google/drive/map
 /google/apps
 /yahoo/news/cricket
 /yahoo/mail/
 /yahoo/sports
 /wiki/ind/jack
 /wiki/us/jil
Run Code Online (Sandbox Code Playgroud)

我需要获取所需的页面组.如果我使用hive查询搜索以'google'开头的页面组,我需要获取前3行的数据.

/google/gmail/inbox
 /google/drive/map
 /google/apps
Run Code Online (Sandbox Code Playgroud)

这样我就需要根据页面组获取数据.


我使用like函数搜索字符串.

select * from table where field like '%/google/%';
Run Code Online (Sandbox Code Playgroud)

inv*_*ell 8

听起来你想要页面组.这可能是谷歌,但它似乎也可能是雅虎.如果要通过搜索引擎提取页面组,可以使用正则表达式.您可以在(page1 | page2 | ... | pageN)中放置多个网站.

Select column from table
where column rlike '.*(google|yahoo).*'
Run Code Online (Sandbox Code Playgroud)

输出:

/google/gmail/inbox
/google/drive/map
/google/apps
Run Code Online (Sandbox Code Playgroud)

您可能需要创建一个新列,其中包含搜索引擎名称或目标网页.似乎路径中的第一个位置是着陆页.您可以这种方式访问​​目标网页:

select * from
    (Select column
    , regexp_extract('^(\\/[a-zA-Z]*\\/)',1) as landing_page
    from table) a
  where landing page in ('google','yahoo',...,'bing')
  ;
Run Code Online (Sandbox Code Playgroud)

输出:

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/
Run Code Online (Sandbox Code Playgroud)

如果你不想/谷歌/而只是谷歌,那么做:

regexp_extract('^\\/([a-zA-Z]*)\\/',1) as landing_page
Run Code Online (Sandbox Code Playgroud)

现在我假设着陆页首先出现在您描述的路径中.


vis*_*akh 5

这个问题有点含糊,但我相信您正在尝试搜索google字符串中的单词并返回包含字符串中的单词的行google

假设您有下表:

create table test (val string);
Run Code Online (Sandbox Code Playgroud)

它包含以下记录:

hive> select * from test;
/google/gmail/inbox
/google/drive/map
/yahoo/mail/
Run Code Online (Sandbox Code Playgroud)

google您可以使用以下查询选择包含字符串的行:

select val from test
where instr(val, 'google') = 2;
Run Code Online (Sandbox Code Playgroud)

这给出了结果:

/google/gmail/inbox
/google/drive/map
Run Code Online (Sandbox Code Playgroud)

instr给出您搜索的字符串的位置。在本例中, 的位置google是 2。如果您试图获取包含任意位置的所有行google,那么您可以使用:

select val from test
where instr(val, 'google') != 0;
Run Code Online (Sandbox Code Playgroud)

您可以从文档中了解各种 Hive 字符串函数。