ハイブ窓関数、機能解析
1解析機能:レベル、点、及び他のN-断片化
NTILEハイブは、非常に強力な解析機能です。
それは見ることができます。これは、指定された(NUM)バケットの平均数、各列に割り当てられたバケット番号に割り当てられたデータの順序集合です。それは均一に分布されていない場合は、各バケット内の行の優先割り当てバレル少ない数、その数は1差まで置くことができます。
構文は次のとおりです。
NTILE(NUM)上([partition_clause] order_by_clauseに)AS your_bucket_num
バレルの数は、またはn個のデータの後ごとに部品を選択する前に、その後もよいです。
例:
各ユーザ及び消費者情報テーブルに対応するユーザに、ユーザの前に費やされたのは50%の平均消費量を算出します。
-ユーザテーブルと消費は、消費が平均することによって二つの部分に分かれて順次減少
表IFはtest_by_payment_ntile EXISTSドロップ;
AS test_by_payment_ntile表を作成
SELECT
ニック、
支払い、
NTILE(2)OVER(支払DESC BY ORDER)AS RN
test_nick_paymentから。
-すべてのそれぞれの平均値を算出し、50%及び50%のポストコンシューマーフォワード平均消費得ることができる
SELECT
'avg_payment' AS INF、
avg_payment_up_50 AS t1.avg_payment_up_50、
avg_payment_down_50 AS t2.avg_payment_down_50
から
(SELECT
AVG(支払いを)avg_payment_up_50 AS
test_by_payment_ntileから
。RN = 1
)T1が
参加
(SELECT
avg_payment_down_50 AS AVG(支払い)を
test_by_payment_ntileから
RN = 2
)T2
ON(= t1.dp_id t2.dp_id)。
ランク、DENSE_RANK、ROW_NUMBER
SQLは、ソート機能内の3つのグループに非常に精通しています。構文のように:
R()オーバー(COL1によってpartion ... COL2 ... DESC / ASC順)
選択
クラス1、
スコア
(スコアDESCによってClass1の順序によってパーティション)RK1、上ランク()
(スコアDESCによってClass1の順序によってパーティション)上DENSE_RANKを()RK2、
RK3(スコアDESCによってClass1の順序によってパーティション)ROW_NUMBER()の上
からzyy_test1;
差:
ランクは、同じ値を持つ同じ出力シーケンス番号、および次のシーケンス番号が中断。
DENSE_RANKは同じ値、同じ数の出力を有し、その数、断続的に
一意連続全出力ROW_NUMBER番号、シリアル番号に異なる値。
2.窓関数ラグ、リード、FIRST_VALUE、LAST_VALUE
ラグ、リード
n行目の統計ウィンドウの値までLAG(COL、N、DEFAULT)
LEAD(COL、N、DEFAULT)n行目の統計ウィンドウ値、及び反対側のLAGまで
-ソートされたグループの後、前方または後方にシフト
-第三パラメータが省略された場合、デフォルト値はNULLであり、そうでなければ埋めます。
選択
dp_id、
MT、
支払い、
mt_new LAG(MT、2)を超える(MTによってdp_id ORDER BYパーティション)
TEST2から。
-ソートされたグループの後、前方または後方にシフト
-第三パラメータが省略された場合、デフォルト値はNULLであり、そうでなければ埋めます。
選択
dp_id、
MT、
支払い、
(MTによってdp_id ORDER BYパーティション)を超えるLEAD(MT、2、 '1111から1111')mt_new
TEST2から。
FIRST_VALUE、LAST_VALUE
FIRST_VALUE:電流遮断線に振り分けたパケットを取った後、最初の値
LAST_VALUE:現在のカットラインにソートされたパケットを取った後、最後の値
- FIRST_VALUEは、先に第一の値のグループ内の現在の行を取得
- LAST_VALUEは先に現在の行のグループ内の最後の値を取得
FIRST_VALUE(DESC)はグローバルグループ内の最終値を得るために-
SELECT
DP_ID、
MT、
支払い、
FIRST_VALUE (支払い)を超える(MTによってDP_ID注文によってパーティション)payment_g_first、
LAST_VALUE(支払い)を超える(MTによってDP_ID注文によってパーティション)payment_g_last、
FIRST_VALUE(支払い)payment_g_last_global(MTのDESCによってDP_ID注文によってパーティション)を超える
TEST2から
ORDER BY DP_ID、 MT;