基本和其他数据库一样..做个记录 方便查询.
分析函数:
Over Clause:
纯粹的(pure)分析函数(Analytic Function)需要一个Over子句,比如:lead() rank() first_value()等等,当然Max() count() sum() 这些聚合函数也可以和Over结合使用。
语法:
function(args) OVER([partition_by_clause] [order_by_clause [window_clause]])
1.partition by 用法和Oracle一样,比较像group by子句,会把列值相同的行划分为一组.这些逻辑分组称为partitions.
2.order by :这个就和order by的作用一样了 .只不过他的排序是建立在 partition by的分组内进行排序.
3.window: window子句是唯一被允许和order by子句结合使用的子句.如果指定了order by子句但是没有指定window子句,会有一个默认的window子句:RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.
Notice:
因为Hbase是对单行查询优化等,而非整表扫描。所以over在Hbase中的效率会非常低。
Parquet:中使用over语句的效率是非常不错的。
texttable:可以很方便的使用分析函数,但是如果数据量非常大的时候 还是推荐使用Parquet来优化查询速度。
Window Clause:
Over 子句中可以添加一个可选项window clause,加入这个子句时分析函数可以分析附近的几行数据而不说对partition中所有行进行分析。就是对partition又一次划分。但是话费的条件和partition by完全不同。比如 你可以使用数据所在的行的上下行来计算移动平均数(moving average)。
avg() count() first_value() last_value() sum() 都支持 window子句, 对于max() 和 min()函数 上边界只能指定为UNBOUNDED PRECEDING.
语法:
ROWS BETWEEN [ { m | UNBOUNDED } PRECEDING | CURRENT ROW] [ AND [CURRENT ROW | { UNBOUNDED | n } FOLLOWING] ]
RANGE BETWEEN [ {m | UNBOUNDED } PRECEDING | CURRENT ROW] [ AND [CURRENT ROW | { UNBOUNDED | n } FOLLOWING] ]
ROWS BETWEEN : 根据返回的整个结果集来划分行的范围
RANGE BETWEEN: 按照单元格的偏移量计算的.
Impala支持的RANGE子句:
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 当指定order by 而没有指定window子句的默认window样子
RANGE BETWEEN CURRENT ROW AND UNBOUNDED FLOOWING
RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FLOWING
当使用RANGE时,CURRENT ROW 不单单是当前行,而是order by中所有的行都是当前行.
AVG function
计算partition中的列的平均值.
COUNT function
计算partition中的行数量
CUME_DIS function: 返回(cumulative distribution of a value)
语法
CUME_DIST (expr) OVER ([partition_by_clause] order_by_clause)
Order by 必须存在 而partition by 是可选项
返回 小与或等于当前值/总行数
DENSE_RANK Function :
语法:
DENSE_RANK() OVER([partition_by_clause] order_by_clause)
Order by 必须存在 而partition by 是可选项
返回:类似rownow排序 但是相同的值的序列值是一样的.
FIRST_VALUE Function:
语法:
FIRST_VALUE(expr [IGNORE NULLS]) OVER([partition_by_clause] order_by_clause [window_clause])
返回排序后的第一个值在此列.
LAG Function:
语法:
LAG(expr[,offset][,default]) OVER ([partition_by_clause)
返回当前行的前一行数据,如果指定了 offset则返回当前行指定偏移量的行.
LAST_VALUE Function:
语法:
LAST_VALUE(expr [IGNORE NULLS]) OVER([partition_by_clause] order_by_clause [window_clause])
返回窗口中最后的值.如果你设置了 IGNORE NULLS 子句,会排出null值 这样会返回一个非空的值.
LEAD Function:
语法
LEAD(expr [,offset] [, default]) OVER ([partition_by_clause] order_by_clause)
返回当前数据行的下一行数据行的指定列值,如果指定了offset则会获取偏移量后的数据列值
NTILE Function:
语法
NTILE (expr[,offset ...] OVER ([partition_by_clause] order_by_clause)
根据每行的数据在窗中的比例,按照比例分为expr个区,然后按照排序的顺序放入expr个区中.