hene

hene.dev

BigQuery で、URL parameters の key と value の組み合わせの数を算出

BigQuery で、URL parameters の key と value の組み合わせの数を算出

BigQuery で、URL のパラメータを分析する機会があった。

やりたいこと

下記を算出したい。

  • URL parameterskey がどれくらいあるか
  • URL parameterskeyvalue の組み合わせがどれくらいあるか

実行環境

  • BigQuery

算出

URL parameters の key がどれくらいあるか

算出したいカラム

  • param_key: URL parameterskey
  • record_count: key の数

算出の流れ

  1. regexp_extract_allURL を渡して、URL parameterskey を取得
  2. 1 を unnest で 1 行ずつ展開
  3. 2 を group by して key の数を算出

クエリ

-- 仮のデータ
with hoge_referers as (
  select
    'https://hene.dev/about?utm_source=x&utm_medium=y&utm_campaign=z' as referer
  union all
  select
    'https://hene.dev/about?utm_source=xx&utm_medium=yy' as referer
  union all
  select
    'https://hene.dev/about?utm_source=x' as referer
)

-- URL parameters を展開
-- * 1 つの referer に 複数の URL parameters が含まれていた場合は、全て展開される
-- * regexp_extract_all は、ARRAY データ型(配列) を返す
, hoge_params as (
  select
    -- URL parameters の key を取得
    regexp_extract_all(referer, r'(?:\?|&)(?:([^=]+)=(?:[^&]*))') as param_keys
  from hoge_referers
)

-- unnest で、ARRAY データ型(配列) の各要素を 1 行ずつ展開
select
  param_key
  , count(*) as record_count
from hoge_params
, unnest(param_keys) as param_key
group by
  param_key
order by
  record_count desc

算出結果

クエリの算出結果

URL parameters の key と value の組み合わせがどれくらいあるか

算出したいカラム

  • param_key: URL parameterskey
  • param_value: URL parametersvalue
  • record_count: keyvalue の組み合わせの数

算出の流れ

  1. regexp_extract_allURL を渡して、URL parametersARRAY データ型(配列) で取得
  2. 1 を unnest で 1 行ずつ展開
  3. 2 から URL parameterskeyvalue を取得
  4. 3 を group by して keyvalue の組み合わせの数を算出

クエリ

-- 仮のデータ
with hoge_referers as (
  select
    'https://hene.dev/about?utm_source=x&utm_medium=y&utm_campaign=z' as referer
  union all
  select
    'https://hene.dev/about?utm_source=xx&utm_medium=yy' as referer
  union all
  select
    'https://hene.dev/about?utm_source=x' as referer
)

-- URL parameters を展開
-- * 1 つの referer に 複数の URL parameters が含まれていた場合は、全て展開される
-- * regexp_extract_all は、ARRAY データ型(配列) を返す
, hoge_params as (
  select
    -- URL parameters の params を取得
    regexp_extract_all(referer, r'(?:\?|&)((?:[^=]+)=(?:[^&]*))') as params
  from hoge_referers
)

-- unnest で、ARRAY データ型(配列) の各要素を 1 行ずつ展開
, unnested as (
  select
    -- URL parameters の key を取得
    regexp_extract(param, r'(^.*)=.*$') as param_key
    -- URL parameters の value を取得
    , regexp_extract(param, r'^.*=(.*$)') as param_value
  from hoge_params
  , unnest(params) as param
)

select
  param_key
  , param_value
  , count(*) as record_count
from unnested
group by
  param_key
  , param_value
order by
  param_key desc
  , record_count desc

算出結果

クエリの算出結果

まとめ

URL parameterskeyvalue の組み合わせがどれくらいあるのかを確認することができた。

参考

関連記事