tencent cloud

Data Lake Compute

ウィンドウ関数

PDF
フォーカスモード
フォントサイズ
最終更新日: 2025-12-25 12:00:07

row_number

関数構文:
row_number()
サポートエンジン:SparkSQL、Presto
使用説明:各行に一意の連続番号を割り当てます
戻り値の型:int
例:

SELECT a, b, row_number() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
A1 1 1
A1 1 2
A1 2 3
A2 3 1

rank

関数構文:
rank()
サポートエンジン:SparkSQL、Presto
使用説明:ある値が一連の値の中で占める順位を計算します。同順位がある場合、順位シーケンスに空位が生じます。
戻り値の型:int
例:
SELECT a, b, rank() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b)
A1 1 1
A1 1 1
A1 2 3
A2 3 1

dense_rank

関数構文:
dense_rank()
サポートエンジン:SparkSQL、Presto
使用説明:ある値が一連の値の中で占める順位を計算します。同順位がある場合、関数rankとは異なり、dense_rankは順位シーケンスに空位を生じさせません。
戻り値の型:int
例:
SELECT a, b, dense_rank() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b)
A1 1 1
A1 1 1
A1 2 2
A2 3 1

percent_rank()

関数構文:
percent_rank()

サポートエンジン:SparkSQL、Presto
使用説明:ある値が一連の値の中で占めるパーセントランクを計算します。戻り値は0から1の間の小数で表されます。
戻り値の型:double
例:
SELECT a, b, percent_rank() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b)
A1 1 0.0
A1 1 0.0
A1 2 1.0
A2 3 0.0

cume_dist

関数構文:
cume_dist()
サポートエンジン:SparkSQL、Presto
使用説明:特定の値がパーティション内のすべての値に対して相対的に占める位置を計算します。
戻り値の型:double
例:
SELECT a, b, cume_dist() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b)
A1 1 0.6666666666666666
A1 1 0.6666666666666666
A1 2 1.0
A2 3 1.0

first_value

関数構文:
first_value(col)
サポートエンジン:SparkSQL、Presto
使用説明:パーティション内の列の最初のデータの値を返します
戻り値の型:col列のデータ型
例:
SELECT a, b, first_value(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b)
A1 1 1
A1 1 1
A1 2 1
A2 3 3

last_value

関数構文:
last_value(col)
サポートエンジン:SparkSQL、Presto
使用説明:パーティション内の列の最後のデータの値を返します
戻り値の型:int
例:
SELECT a, b, last_value(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b)
A1 1 1
A1 1 1
A1 2 2
A2 3 3

lag

関数構文:
lag(col[, n [, default]])
サポートエンジン:SparkSQL、Presto
使用説明:ウィンドウ内の現在の行から上にn行目の値を返します。nのデフォルト値は1、defaultのデフォルト値はnullです。n行目の値がnullの場合、nullを返します。そのようなオフセット行が存在しない場合(例えば、オフセットが1でウィンドウの最初の行に上に行がない場合)、defaultを返します。最初の引数は列名、2番目の引数は前のn行、3番目の引数はデフォルト値です。
戻り値の型:col列のデータ型
例:
SELECT a, b, lag(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b)
A1 1 NULL
A1 1 1
A1 2 1
A2 3 NULL

lead

関数構文:
lead(col[, n[, default]])
サポートエンジン:SparkSQL、Presto
使用方法:ウィンドウ内の現在の行から下にn行目の値を返します。nのデフォルト値は1、defaultのデフォルト値はnullです。n行目の値がnullの場合、nullを返します。そのようなオフセット行が存在しない場合(例えば、オフセットが1でウィンドウの最後の行に下の行がない場合)、defaultを返します。最初の引数は列名、2番目の引数は前のn行、3番目の引数はデフォルト値です。
戻り値の型:col列のデータ型
例:
SELECT a, b, lead(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b)
A1 1 1
A1 1 2
A1 2 NULL
A2 3 NULL

nth_value

関数構文:
nth_value(col[, n])
サポートエンジン:SparkSQL、Presto
使用方法:ウィンドウの先頭からn行目の値を返します。nは1から始まります。ignoreNulls=trueの場合、n行目を検索する際にnullをスキップします。それ以外の場合、各行がnとしてカウントされます。そのようなn行目が存在しない場合(例えば、nが10でウィンドウサイズが10未満の場合)、nullを返します。最初の引数は列名、2番目の引数は前のn行目です。
戻り値の型:col列のデータ型
例:
SELECT a, b, nth_value(b, 2) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b)
A1 1 1
A1 1 1
A1 2 1
A2 3 NULL

ntile

関数構文:
ntile(n)
サポートエンジン:SparkSQL、Presto
使用説明:ウィンドウパーティションの行をn個のバケットに分割し、行が属するバケット番号を1からnの範囲で返します
戻り値の型:int
例:
SELECT a, b, ntile(2) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b)
A1 1 1
A1 1 1
A1 2 2
A2 3 1

CLUSTER_SAMPLE

関数構文:
CLUSTER_SAMPLE(<int> N[, <int> M]) over (PARTITION BY col1 ORDER by col2)
サポートエンジン:SparkSQL
使用説明:ウィンドウ内で指定された比率または数量でサンプリングします。
N:必須、int 型、N のみ指定の場合、N 件のデータをサンプリングすることを示します。サンプリング結果は N 件に近くなりますが、必ずしも N 件になるとは限りません。
M:任意、int 型、M が指定されている場合、M/N * ウィンドウ内の総データ数のデータをサンプリングすることを示します。サンプリング結果は M/N * 総データ数に近くなります。
戻り値の型:boolean 型、true はサンプリングされたことを示し、false はサンプリングされなかったことを示します。
例:
> SELECT a, b, cluster_sample(2) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
A1 2 true
A1 1 true
A2 3 true
A1 1 false
> SELECT a, b from (select a, b, cluster_sample(2) OVER (PARTITION BY a ORDER BY b) as c FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b)) where c;
A1 2
A1 1
A2 3


ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック