Oracle/Hive/Impala SQL比較

5 Function前端

     指數據庫內置的function,不討論UDF。另外,操做符都不比較了,區別不大。正則表達式

 

5.1 數學函數sql

功能數據庫

Oracleexpress

Hive後端

Impala數組

ABSsession

絕對值,有oracle

函數

SIN/SINH/ASIN/COS/COSH/ACOS/TAN/TANH/ATAN/ATAN2

三角函數

其中ATAN2接受兩個參數(二維平面中的座標)

沒有SINH/COSH/TANH/ATAN2

同hive

BITAND

按位與,有

 

 

CEIL

天花板值,有

有,還有個別名CEILING

有,同hive

EXP

e的多少次,有

有,還有個函數E()返回e

有,同hive

FLOOR

地板值,有

LN

以e爲底的log,有

LOG

以某個double爲底的log,有

有,還有兩個特殊底的log:LOG2和LOG10

有,同hive

MOD

Oracle的MOD的計算方式爲MOD(n2,n1)=n2 - n1 * FLOOR(n2/n1),這與經典取模還不一樣,好比Oracle的MOD(-11,4)=-3,但經典取模等於1

在hive裏取模用PMOD,返回值必定是個正數,好比PMOD(-11,4)=1。但這與經典取模仍是不一樣,好比PMOD(-11,-4)=1,但經典取模等於-3

Impala的PMOD和hive的PMOD相同,另外Impala還有個FMOD和Oracle的MOD相同

POWER

求冪,有

有,還有個別名POW

有,同hive

REMAINDER

取餘,REMAINDER(n2,n1)=n2 - n1 * FLOOR(n2/n1)

 

 

ROUND

舍入,支持1個參數和2個參數兩種版本

另外還有一個BROUND,使用HALF_EVEN舍入模式,見官方手冊

有,同Oracle

SIGN

符號函數,有

SQRT

開方,有

TRUNC

截取數值的小數點後多少位(若是是負值則往前推)

 

 

DEGREES/RADIANS

 

角度/弧度互轉

同hive

POSITIVE/NEGATIVE

 

至關於在數值前加+/-號(所以沒什麼卵用)

同hive

PI

 

返回pi值

同hive

FACTORIAL

 

階乘,1.2.0之後纔有

 

CBRT

 

求立方根,1.2.0之後纔有

 

SHIFTLEFT/SHIFTRIGHT/SHIFTRIGHTUNSIGNED

 

按位左移/右移/無符號右移

 

GREATEST/LEAST

返回一串值中的最大/最小值,這串值的類型能夠是任意,只要可比較大小(因此其實不是數學函數而是通用比較)

有,1.1.0之後

 

5.2 字符(串)函數

功能

Oracle

Hive

Impala

ASCII

輸入必須char,返回該字符的ascii數值

輸入String,返回該String第一個字符的ascii數值

同hive

BASE64 / UNBASE64

 

將二進制值轉爲base64的String(UN則是反向)

 

CONCAT

CONCAT(char1, char2)

char或char2都可爲CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB, or NCLOB之一

concat(string|binary A, string|binary B...)

能夠有多個參數

另外提供CONCAT_WS用於指定特殊分隔符的鏈接

同hive(除了不支持binary類型),且也有CONCAT_WS

DECODE/ENCODE

 

string decode(binary bin, string charset) 

binary encode(string src, string charset)

編碼和解碼用的,用於支持hive特有的binary類型

(其實oracle和impala也有DECODE,但做用徹底不一樣,見條件函數中的DECODE)

FIND_IN_SET

 

find_in_set(string str, string strList)

strList是用’,’分割的一組string,該函數將尋找strList中第一個精確匹配的str

同hive

FORMAT_NUMBER

 

將數字格式化爲string

 

GET_JSON_OBJECT

 

抽取JSON對象,不經常使用

 

IN_FILE

 

in_file(string str, string filename)

檢測str是否爲filename對應文件中的某行,不經常使用

 

INITCAP

將每一個單詞(以空白分隔)轉換爲首字母大寫其他小寫的形式

同oracle,1.1.0開始有

同oracle

INSTR

{ INSTR

| INSTRB

| INSTRC

| INSTR2

| INSTR4

}

(string , substring [, position [, occurrence ] ])

搜索子串,不一樣數據類型調用名不一樣,最多可帶四個參數,其中第三個是開始位置,第四個是出現的第幾回

instr(string str, string substr)

只接受兩個參數

同hive

LENGTH

{ LENGTH

| LENGTHB

| LENGTHC

| LENGTH2

| LENGTH4

}

(char)

串長,不一樣數據類型調用名不一樣

有(僅LENGTH)

同hive

LEVENSHTEIN

 

返回兩個串的Levenshtein距離(編輯距離)1.2.0後纔有

 

LOCATE

 

特殊狀況的INSTR,能夠指定匹配的開始位置。Oracle由於原本INSTR就支持因此並不須要該函數

同hive

LOWER

轉小寫

有,且有一個別名叫LCASE

同hive

LPAD / RPAD

LPAD(expr1, n [, expr2 ])

在expr1以前用expr2填充n個字符,如expr2省略默認用n個單空格填充。RPAD相似只是在右邊

有,但expr2不能省略

同hive

LTRIM / RTRIM

LTRIM(char [, set ])

去掉char左側包含在set中的字符,如省略set,則只去除空格符。RTRIM相似只是在右邊

有,但沒有set參數,即只能去除空格符

同hive

PARSE_URL

 

抽取URL,能夠指定抽取URL的類型和建名

同hive

PRINTF

 

按格式打印對象數組

 

REGEXP_EXTRACT / REGEXP_SUBSTR

REGEXP_SUBSTR(source_char, pattern

 [, position

  [, occurrence

   [, match_param

    [, subexpr

]  ]  ]  ]  )

按正則表達式抽取字符串,並返回其中一部分。注意Oracle和hive/impala中函數名不一樣

regexp_extract(string subject, string pattern, int index)

相似Oracle,但不能指定起始位置,替換序號和匹配參數

同hive

REGEXP_REPLACE

REGEXP_REPLACE(source_char, pattern

 [, replace_string

   [, position

    [, occurrence

     [, match_param ]  ] ] ] )

按正則表達式替換字符串中的一部分

regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)

相似Oracle,但不能指定起始位置,替換序號和匹配參數

同hive

REGEXP_COUNT

REGEXP_COUNT (source_char, pattern [, position [, match_param]])

按正則表達式對字符串中子串的出現次數計數

 

 

REGEXP_INSTR

REGEXP_INSTR (source_char, pattern

 [, position

  [, occurrence

   [, return_opt

    [, match_param

     [, subexpr]

  ] ] ] ] )

在字符串中查找知足正則表達式的子串第一次出現的位置

 

 

REPEAT

 

重複n次

同hive

REPLACE

簡單替換文本

 

 

REVERSE

 

返回逆串

同hive

SENTENCES

 

簡單的分詞功能,很奇怪hive爲什麼提供這樣的功能

 

SOUNDEX

取英文中的「諧音」,多是用於存在髒數據時的匹配吧,詭異的功能

有,1.2.0之後

 

SPACE

 

返回n個空格

同hive

SPLIT

 

使用正則表達式分割字符串

 

STR_TO_MAP

 

將字符串轉爲鍵值對

 

STRLEFT / STRRIGHT

 

 

返回最左/最右的n個字符,是SUBSTR的簡化版

SUBSTR / SUBSTRING

{ SUBSTR

| SUBSTRB

| SUBSTRC

| SUBSTR2

| SUBSTR4

}

(char, position [, substring_length ])

不一樣數據類型調用名不一樣

相似Oracle,只有SUBSTR和其別名SUBSTRING

同hive

SUBSTRING_INDEX

 

substring_index(string A, string delim, int count)

返回A在delim出現第count次前的部分,1.3.0後纔有

 

TRANSLATE

TRANSLATE(expr, from_string, to_string)

將expr,按from_string中出現的每一個字符替換爲to_string中對應序號的字符

Oracle還有種TRANSLATE...USING語法是其餘兩個沒有的

同oracle

同oracle

TRIM

TRIM([ { { LEADING | TRAILING | BOTH }

 [ trim_character ]

       | trim_character}

 FROM 

 ]

trim_source)

比較靈活,可指定去除前端仍是後端,去除什麼字符。若是隻留trim_source一個參數則等同於後二者

trim(string A)

簡單去除A先後的空白

同hive

UPPER

轉大寫

有,且有一個別名LCASE

同hive

 

5.3 日期函數

功能

Oracle

Hive

Impala

ADD_MONTHS

在某日期上加上n個月

有,1.1.0之後

CURRENT_DATE

返回當前時間(和session的時區相關),精確到秒

返回當前時間(sql評估時的時間,同一個查詢中屢次調用該函數值相同),1.2.0之後

 

CURRENT_TIMESTAMP

返回當前時間(和session的時區相關),精確到毫秒,返回類型爲TIMESTAMP WITH TIME ZONE

返回當前時間(sql評估時的時間,同一個查詢中屢次調用該函數值相同,精確到毫秒),1.2.0之後

有,另有一個別名NOW

DATE_ADD / DATE_SUB

 

在某日期上加/減n天

同hive,可接收timestamp或string類型。

只接收timestamp類型的該函數有兩套,稱爲DAYS_ADD/DAYS_SUB,ADDDATE/SUBDATE(真不懂impala搞這麼多名字雷同的東西幹啥)

DATE_FORMAT

 

用格式字符串格式化日期(可爲date/timestamp/string)

 

DATE_PART

 

 

省略order參數的EXTRACT

DATEDIFF

 

求兩個日期間差的天數

同hive

DAY / DAYOFMONTH

 

返回該日期在月內的日數,兩個函數同義

同hive

DAYNAME

 

 

返回周間的名字,即’Sunday’到’Saturday‘

DAYOFWEEK

 

 

返回周間的序號,1(Sunday)到7(Saturday)

DAYOFYEAR

 

 

返回是本年第幾天

DBTIMEZONE

數據庫當前時區

 

 

EXTRACT

EXTRACT( { YEAR

         | MONTH

         | DAY

         | HOUR

         | MINUTE

         | SECOND

         | TIMEZONE_HOUR

         | TIMEZONE_MINUTE

         | TIMEZONE_REGION

         | TIMEZONE_ABBR

         }

         FROM { expr } )

按參數提取日期中的某部分

 

extract(timestamp, string unit)

extract(unit FROM timestamp)

比Oracle多一種格式

FROM_TZ

將時間戳和時區合併爲帶時區的時間戳

 

 

FROM_UNIXTIME

 

將unix紀元以來的秒數轉化爲時間字符串

同hive

FROM_UTC_TIMESTAMP

 

將UTC的時間戳值轉化爲指定時區的時間戳值

同hive

HOUR

 

返回時間字符串的小時值

同hive

HOURS_ADD / HOURS_SUB

 

 

在某日期上加/減n個小時

LAST_DAY

返回該日期所在月份的最後一天

同Oracle,1.1.0之後

 

LOCALTIMESTAMP

返回當前時間(和session的時區相關),精確到毫秒,返回類型爲TIMESTAMP

 

 

MICROSECONDS_ADD / MICROSECONDS_SUB

 

 

在某日期上加/減n微秒

MILLISECONDS_ADD / MILLISECONDS_SUB

 

 

在某日期上加/減n毫秒

MINUTE

 

返回時間字符串的分鐘值

 

MINUTES_ADD / MINUTES_SUB

 

 

在某日期上加/減n分鐘

MONTH

 

返回時間字符串的月份

同hive

MONTHS_ADD / MONTHS_SUB

 

 

在某日期上加/減n個月(其實第一個和ADD_MONTHS重複)

MONTHS_BETWEEN

返回兩個日期間相差的月數,注意返回值是個浮點數

同Oracle,1.2.0後

 

NANOSECONDS_ADD / NANOSECONDS_SUB

 

 

在某日期上加/減n納秒(impala搞這麼多沒用的加減函數真不知道幹什麼)

NEW_TIME

將時區1的時間轉換爲時區2的時間

 

 

NEXT_DAY

返回指定日期後下一個星期幾的日期

同Oracle,1.2.0後

 

NUMTODSINTERVAL / 

NUMTOYMINTERVAL

生成n時間單位的一個日期間隔。前一函數的間隔可選DAY,HOUR,MINUTE,SECOND,後一個的間隔可選MONTH,YEAR

 

 

QUATER

 

返回日期的季度值(1-4),1.3.0後

 

ROUND

對日期作舍入

 

 

SECOND

 

返回時間字符串的秒值

同hive

SECOND_ADD / SECOND_SUB

 

 

在某日期上加/減n秒

SESSIONTIMEZONE

返回session的時區

 

 

SYS_EXTRACT_UTC

從日期字符串中抽取UTC日期

 

 

SYSDATE / SYSTIMESTAMP

返回操做系統日期,前者到秒,後者到微秒

 

 

TO_CHAR

將date或timestamp類型轉換爲varchar2,經常使用

 

 

TO_DATE

 

返回時間戳的日期部分

同hive

TO_DSINTERVAL / TO_YMINTERVAL

將一個字符串轉換爲INTERVAL DAY TO SECOND / INTERVAL YEAR TO MONTH類型的時間間隔

 

 

TO_TIMESTAMP / TO_TIMESTAMP_TZ

將一個字符串轉換爲時間戳,前一個不帶時區,後一個帶時區

 

 

TO_UTC_TIMESTAMP

 

將帶時區的時間戳轉換爲UTC的

同hive

TRUNC

對日期作舍,語法相似ROUND,支持舍入到年、季度、月、周、日、小時、分鐘等精度

1.2.0後有,只支持舍入到年、月

同oracle

TZ_OFFSET

返回某個時區和UTC間的誤差值

 

 

UNIX_TIMESTAMP

 

返回秒爲單位的時間戳數值,無參數時爲當前時間,一個參數時須要傳入yyyy-MM-dd HH:mm:ss格式的時間字符串,兩個參數時能夠自定義傳入時間格式

同hive

WEEKOFYEAR

 

返回該日期所在的周是年中第幾周

 

WEEKS_ADD / WEEKS_SUB

 

 

在某日期上加/減n周

YEAR

 

返回該日期的年份

同hive

YEARS_ADD / YEARS_SUB

 

 

在某日期上加/減n年

 

5.4 轉換函數

功能

Oracle

Hive

Impala

CAST

CAST({ expr | MULTISET (subquery) } AS type_name)

輸入能夠是表達式也能夠是集合

cast(expr as <type>)

將表達式轉換爲指定類型

同hive

BINARY

 

將參數轉換爲binary類型

 

其他各類*TO* / TO_*

都是Oracle特有的轉換函數,建議看官方手冊

 

 

 

5.5 條件函數

功能

Oracle

Hive

Impala

CASE … WHEN

 

1,CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END

When a = b, returns c; when a = d, returns e; else returns f.

 

2,CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END

When a = true, returns b; when c = true, returns d; else returns e.

同hive

(注:由於在Oracle中如case...when是表達式,而hive和impala中這些是用函數來處理的,雖然提供了與Oracle類似的語法,但語言層面實現機制不一樣)

COALESCE

接收多個值,返回這些值中第一個非NULL的,若是全是NULL則返回NULL

同oracle

同oracle

DECODE

DECODE(expr, search, result [, search, result ]...  [, default ])

對expr,若是知足第一個search則返回第一個result,若是知足第二個search則返回第二個result

 

同oracle

IF

 

if(boolean testCondition, T valueTrue, T valueFalseOrNull)

testCondition若是真則返回valueTrue,若是假或NULL則返回valueFalseOrNull

同hive

ISNULL

 

isnull(a)

若是a爲NULL返回true,不然返回false

isnull(type a, type ifNotNull)

若是a非NULL則返回a,不然返回ifNotNull。

注意和hive有重大區別,另該函數有別名IFNULL和NVL

ISNOTNULL

 

和ISNULL相反

 

LNNVL

LNNVL(condition)

若是condition爲false或unknown返回true,若是爲true返回false

 

 

NANVL

NANVL(n2, n1)

若是n2是NaN返回n1,不然返回n2

 

 

NULLIF

NULLIF(expr1, expr2)

等價與CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

 

同oracle

NULLIFZERO

 

 

nullifzero(numeric_expr)

若是numeric_expr爲0返回NULL,不然返回該表達式的值

NVL

NVL(expr1, expr2)

若是expr1爲NULL則返回expr2,不然返回expr1

同oracle

同oracle

NVL2

NVL2(expr1, expr2, expr3)

若是expr1非NULL則返回expr2,若是爲NULL則返回expr3

 

 

ZEROIFNULL

 

 

zeroifnull(numeric_expr)

若是numeric_expr爲NULL返回0,不然返回該表達式的值

 

5.6 聚合函數

     以上5類函數都是對單行操做的,接下去的兩類:聚合函數和分析函數,則是跨行操做的。

功能

Oracle

Hive

Impala

APPX_MEDIAN

 

 

APPX_MEDIAN([DISTINCT | ALL] expression)

以抽樣的方式,計算某列大體的中位數值

AVG

AVG([ DISTINCT | ALL ] expr) [ OVER(analytic_clause) ]

OVER後可帶分析函數子句

同oracle

同oracle

COLLECT

COLLECT( [ DISTINCT | UNIQUE ] column [ ORDER BY expr ] )

該語句匯聚某列的值構造一張內嵌表

 

 

COLLECT_SET / COLLECT_LIST

 

將一組對象組成一個array,其中帶SET的函數會去重,帶LIST的函數不去重

 

CORR

CORR(expr1, expr2) [ OVER (analytic_clause) ]

計算兩列的皮爾遜相關係數,OVER後可帶分析函數子句

還有兩個變種CORR_S和CORR_K

沒有OVER子句,也沒有變種

 

COUNT

COUNT({ * | [ DISTINCT | ALL ] expr }) [ OVER (analytic_clause) ]

OVER後可帶分析函數子句

同oracle

同oracle

COVAR_POP

COVAR_POP(expr1, expr2)

   [ OVER (analytic_clause) ]

計算整體協方差,OVER後可帶分析函數子句

沒有OVER子句

 

COVAR_SAMP

COVAR_SAMP(expr1, expr2) [ OVER (analytic_clause) ]

計算樣本協方差,OVER後可帶分析函數子句

沒有OVER子句

 

CUME_DIST

計算一組數據的累積分佈,有聚合和分析兩種用法,詳見官方手冊

 

 

DENSE_RANK

DENSE_RANK(expr [, expr ]...) WITHIN GROUP

  (ORDER BY expr [ DESC | ASC ]

                 [ NULLS { FIRST | LAST } ]

            [,expr [ DESC | ASC ]

                   [ NULLS { FIRST | LAST } ]

            ]...

  )

和RANK的區別是,有並列值時下一位會繼續編號,如兩個值並列第1,下一個值排第2

 

 

FIRST / LAST

某數據集進行排序後,可對第一條/最後一條記錄進行處理,詳見官方手冊

 

 

GROUP_ID

用於消除GROUP BY子句返回的重複記錄

 

 

GROUPING

用於區分是數據庫中原本的值仍是匯聚後的值

 

 

GROUPING_ID

輸入一列或多列,返回GROUPING位向量的十進制值

 

 

GROUP_CONCAT

 

 

將一列的值組合爲一個string

HISTOGRAM_NUMERIC

 

計算數值列的直方圖

 

LISTAGG

將一列的值組合爲一個string,可指定分組、排序等參數

 

 

MAX / MIN

MAX([ DISTINCT | ALL ] expr) [ OVER (analytic_clause) ]

OVER後可帶分析函數子句

同oracle

同oracle

MEDIAN

MEDIAN(expr) [ OVER (query_partition_clause) ]

中位數,OVER後可帶分析函數子句

 

 

NDV

 

 

相似count(distinct ),但給出的是估算值,計算速度快

NTILE

 

將分區分到x個組上,每一個給一個編號,配合PERCENTILE等使用

 

PERCENT_RANK

相似CUME_DIST,計算一組數的百分位分佈,有聚合和分析兩種用法,詳見官方手冊

 

 

PERCENTILE_COUNT / PERCENTILE_DIST

接受一個分位值,返回知足該分位值的插值後數值/集合中原始值,詳見官方手冊

 

 

PERCENTILE

 

只接受整型,計算p百分位數的值

 

PERCENTILE_APPROX

 

接受double型,計算p百分位數的值

 

RANK

RANK(expr [, expr ]...) WITHIN GROUP

   (ORDER BY

    expr [ DESC | ASC ]

         [ NULLS { FIRST | LAST } ]

    [, expr [ DESC | ASC ]

            [ NULLS { FIRST | LAST } ]

    ]...

   )

計算排位值,有聚合和分析兩種用法,這裏的語法是聚合,重要,詳見官方手冊

 

 

REGR_*

一堆線性迴歸函數,不重要

 

 

STAT_*

一堆統計函數,不重要

 

 

STDDEV / STDDEV_POP / STDDEV_SAMP

計算樣本標準差、整體標準差、累積樣本標準差,OVER後可帶分析函數子句

沒有STDEV函數,沒有OVER子句

沒有OVER子句

 

SUM

SUM([ DISTINCT | ALL ] expr)

   [ OVER (analytic_clause) ]

OVER後可帶分析函數子句

同oracle

同oracle

SYS_XMLAGG / XMLAGG

將一列的值組合爲一個xml,其中SYS_XMLAGG課指定xml格式,XMLAGG可指定值排序方式

 

 

VAR_POP / VAR_SAMP / VARIANCE

計算樣本方差、整體方差、累積樣本方差,OVER後可帶分析函數子句

沒有OVER子句,且VAR_POP和VARIANCE功能同樣

同oracle

其中VAR_POP / VAR_SAMP也可寫爲VARIANCE_POP / VARIANCE_SAMP

 

5.7 分析(開窗)函數

分析(開窗)函數中,有一部分是和聚合函數同名的,只要能夠帶OVER子句的均可做爲分析(開窗)函數使用,這部分再也不重複列舉。

此外在列舉函數前,須要對比一下三者的OVER子句和window子句的不一樣寫法(主要差異就在於window子句):

OVER子句:

Oracle:[ query_partition_clause ] [order_by_clause [ windowing_clause ] ]

Hive:沒找到細節定義,目測和Oracle一致

Impala:和Oracle一致

 

query_partition_clause:

Oracle:PARTITION BY { expr[, expr ]...| (expr[, expr ]... ) }

Hive:沒找到細節定義,目測和Oracle一致

Impala:沒找到細節定義,目測和Oracle一致

 

order_by_clause:

Oracle:ORDER [ SIBLINGS ] BY { expr | position| c_alias } [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ]  [, { expr | position | c_alias } [ ASC | DESC] [ NULLS FIRST | NULLS LAST ] ]...

Hive:沒找到細節定義,目測和Oracle一致

Impala:沒找到細節定義,目測和Oracle一致

 

windowing_clause:

Oracle:{ ROWS | RANGE } { BETWEEN   { UNBOUNDED PRECEDING   | CURRENT ROW   | value_expr { PRECEDING | FOLLOWING }   }   AND   { UNBOUNDED FOLLOWING   | CURRENT ROW   | value_expr { PRECEDING | FOLLOWING }   } | { UNBOUNDED PRECEDING   | CURRENT ROW   | value_expr PRECEDING   } }

Hive:ROWS ((CURRENT ROW) | (UNBOUNDED |[num]) PRECEDING) AND (UNBOUNDED | [num]) FOLLOWING

Impala:{ ROWS | RANGE } BETWEEN [ { m |UNBOUNDED } PRECEDING | CURRENT ROW] [ AND [CURRENT ROW | { UNBOUNDED | n }FOLLOWING] ]

 

功能

Oracle

Hive

Impala

CUME_DIST

有聚合和分析兩種用法(上面已列)

有分析用法

 

DENSE_RANK

DENSE_RANK( ) OVER([ query_partition_clause ] order_by_clause)

這裏的用法是分析

同oracle

同oracle(hive和impala只有分析用法沒有聚合用法,故單列)

FIRST_VALUE / LAST_VALUE

FIRST_VALUE 

  { (expr) [ {RESPECT | IGNORE} NULLS ]

  | (expr [ {RESPECT | IGNORE} NULLS ])

  }

  OVER (analytic_clause)

返回某個排序集合的第一個/最後一個值

FIRST_VALUE(expr) OVER([partition_by_clause] order_by_clause [window_clause])

和oracle相比略簡化

同hive

LAG

LAG

  { ( value_expr [, offset [, default]]) [ { RESPECT | IGNORE } NULLS ] 

  | ( value_expr [ { RESPECT | IGNORE } NULLS ] [, offset [, default]] )

  }

  OVER ([ query_partition_clause ] order_by_clause)

提供了一種同時訪問表的多行的方式,即對訪問的某行往前推offset行,避免了自鏈接,參考官方手冊中取員工的本月和上月工資的例子

LAG (expr [, offset] [, default])

  OVER ([partition_by_clause] order_by_clause)

和oracle相比略簡化

同hive

LEAD

LEAD

  { ( value_expr [, offset [, default]] ) [ { RESPECT | IGNORE } NULLS ] 

  | ( value_expr [ { RESPECT | IGNORE } NULLS ] [, offset [, default]] )

  }

  OVER ([ query_partition_clause ] order_by_clause)

相似LAG,不一樣之處是日後推而不是往前推

LEAD (expr [, offset] [, default])

  OVER ([partition_by_clause] order_by_clause)

和oracle相比略簡化

同hive

PERCENT_RANK

有聚合和分析兩種用法(上面已列)

有分析用法

 

RANK

RANK( ) OVER ([ query_partition_clause ] order_by_clause)

計算排位值,這裏的用法是分析,有並列值時,下一位會跳開並列的個數再編號,如兩個值並列第1,下一個值排第3。重要且經常使用

同oracle

同oracle(hive和impala只有分析用法沒有聚合用法,故單列)

ROW_NUMBER

ROW_NUMBER( )

   OVER ([ query_partition_clause ] order_by_clause)

編行號,重要且經常使用

同oracle

同oracle

 

5.8 其餘

     剩下就是些各庫特有的東西了,不經常使用,看看官方手冊就好。

相關文章
相關標籤/搜索