一般的なウィンドウ機能と分析機能

ハイブ窓関数、機能解析
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;

公開された25元の記事 ウォンの賞賛1 ビュー10000 +

おすすめ

転載: blog.csdn.net/kimi_Christmas/article/details/89177190