web-dev-qa-db-ja.com

文字列内の特定のテキストを検索する-Hive

/google/gmail/inbox
 /google/drive/map
 /google/apps
 /yahoo/news/cricket
 /yahoo/mail/
 /yahoo/sports
 /wiki/ind/jack
 /wiki/us/jil

必要なページグループを取得する必要があります。 Hiveクエリを使用して「google」で始まるページグループを検索する場合、最初の3行のデータを取得する必要があります。

/google/gmail/inbox
 /google/drive/map
 /google/apps

このように、ページグループに基づいてデータを取得する必要があります。


Like関数を使用して文字列を検索しました。

select * from table where field like '%/google/%';
5
Krishna

ページグループが必要なようです。これはグーグルかもしれませんが、おそらくヤフーかもしれないようです。検索エンジンでページグループを抽出する場合は、正規表現を使用できます。 (page1 | page2 | ... | pageN)に複数のWebサイトを配置できます。

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/

/ google /が不要で、Googleだけを使用する場合は、次のようにします。

regexp_extract('^\\/([a-zA-Z]*)\\/',1) as landing_page

今、私はランディングページがあなたが説明するパスの最初に来ると仮定しています。

8
invoketheshell

質問は少しあいまいですが、文字列内の単語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文字列関数について読むことができます。

2
visakh