LoginSignup
1
0

More than 3 years have passed since last update.

[BQ] Bigqueryメモ

Last updated at Posted at 2019-06-07

自分用bigqueryメモ

小ネタから備忘録まで

ウィンドウ関数はWINDOWを使って定義しよう

以下のようなウィンドウ関数を使った処理を考える.

SELECT
  AVG(expr) OVER (PARTITION BY hoge) AS avg_expr,
  COUNT(expr) OVER (PARTITION BY hoge) AS cnt_expr,
  SUM(expr) OVER (PARTITION BY fuga) AS sum_expr
FROM
  tablename

同じサブクエリー内ではウィンドウ関数を別で定義できる.
こうすると一括で処理を書き換えられる.

SELECT
  AVG(expr) OVER (hoge_window) AS avg_expr,
  COUNT(expr) OVER (hoge_window) AS cnt_expr,
  SUM(expr) OVER (fuga_window) AS sum_expr
FROM
  tablename
WINDOW
  hoge_window AS (PARTITION BY hoge),
  fuga_window AS (PARTITION BY fuga)

パーセンタイル

$y$%誤差で$x$パーセンタイルを取る.
このとき,
$a = \frac{x}{y} + 1,\ b=\frac{100}{y} + 1$
が自然数であれば以下のやり方で指定できる.

SELECT
  APPROX_QUANTILES(expr, b)[SAFE_ORDINAL(a)] AS y_percentile
FROM
  tablename

厳密解を得たい時?は以下のようにする.(上に比べて遅いし冗長)

WITH
  middle AS (
    SELECT
      PERCENTILE_CONT(expr, y/100) OVER () AS y_percentile
    FROM
      tablename
  )
SELECT
  ANY_VALUE(y_percentile) AS y_percentile
FROM
  middle
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0