BigQueryでクエリパラメータをデコードする

BigQueryでクエリパラメータをデコードする

BigQueryでアクセスログなどのURLを分析する際、URLに含まれるクエリパラメータがエンコードされていて読みづらいことがある。
BigQueryにはデコードする標準関数は用意されていないが、JavaScriptを使ったユーザー定義関数(UDF)を使うことで、URLエンコードされた文字列を簡単にデコードできる。

-- URLエンコードされた文字列をデコードする関数
-- NULLやデコードできない文字列の場合はそのまま返す
CREATE TEMP FUNCTION DECODE_URI(query_string STRING)
RETURNS STRING
LANGUAGE js AS """
  try {
    return decodeURIComponent(query_string);
  } catch {
    return query_string;
  }
""";

使う場合は、次のように定義した関数を呼び出すだけで良い。

-- サンプルデータ
WITH
  sample_data AS (
    SELECT '%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89' AS query
  )

SELECT
  url,
  DECODE_URI(query) AS decoded_query
FROM
  sample_data;