Welcome 微信登录

首页 / 数据库 / MySQL / [Hive]编写non-deterministic的UDF时遇到的谓词下推(Predicate pushdown)错误分析

遇到这样一个问题:hive> desc ljn001;OKname    stringvalue  inthive> select * from ljn001;OKwang5  92zhang3  87li4    73然后我想使用UDF实现的分析函数row_number去查询value最小的name。如果不清楚UDF实现row_number的原来或者不知道如何使用row_number,请参考:http://www.linuxidc.com/Linux/2013-11/92554.htm查询SQL如下:select name        from        (select name,row_number(1) as rn                  from                  (select *                            from ljn001 order by value                  ) a          ) a where rn = 1;但是结果却意想不到:OKwang5竟然把value最大的给取出来了!不筛选rn再看一下:select name,rn        from        (select name,row_number(1) as rn                  from                  (select *                            from ljn001 order by value                  ) a          ) a;OKli4    1zhang3  2wang5  3明明是li4对应的1,为什么筛选rn = 1却得到的是wang5 ?看一下执行计划,豁然开朗了:explain select name        from        (select name,row_number(1) as rn                  from                  (select *                            from ljn001 order by value                  ) a          ) a where rn = 1;OKSTAGE DEPENDENCIES:  Stage-1 is a root stage  Stage-0 is a root stageSTAGE PLANS:  Stage: Stage-1    Map Reduce    Alias -> Map Operator Tree:        a:a:ljn001          TableScan            alias: ljn001            Filter Operator              predicate:                  expr: (row_number(1) = 1)                  type: boolean              Select Operator                expressions:                      expr: name                      type: string                      expr: value                      type: int                outputColumnNames: _col0, _col1                Reduce Output Operator                  key expressions:                        expr: _col1                        type: int                  sort order: +                  tag: -1                  value expressions:                        expr: _col0                        type: string                        expr: _col1                        type: int      Reduce Operator Tree:        Extract          Select Operator            expressions:                  expr: _col0                  type: string                  expr: row_number(1)                  type: bigint            outputColumnNames: _col0, _col1            Filter Operator              predicate:                  expr: (_col1 = 1)                  type: boolean              Select Operator                expressions:                      expr: _col0                      type: string                outputColumnNames: _col0                File Output Operator                  compressed: true                  GlobalTableId: 0                  table:                      input format: org.apache.Hadoop.mapred.TextInputFormat                      output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat  Stage: Stage-0    Fetch Operator      limit: -1更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2013-11/92553p2.htmHive 的详细介绍:请点这里
Hive 的下载地址:请点这里相关阅读:基于Hadoop集群的Hive安装 http://www.linuxidc.com/Linux/2013-07/87952.htmHive内表和外表的区别 http://www.linuxidc.com/Linux/2013-07/87313.htmHadoop + Hive + Map +reduce 集群安装部署 http://www.linuxidc.com/Linux/2013-07/86959.htmHive本地独立模式安装 http://www.linuxidc.com/Linux/2013-06/86104.htmHive学习之WordCount单词统计 http://www.linuxidc.com/Linux/2013-04/82874.htm
  • 1
  • 2
  • 下一页
Hive 实现 udf row_number 以及遇到的问题Hive中使用自定义函数(UDF)实现分析函数row_number的功能相关资讯      Hive  Hive udf 
版权所有©石家庄振强科技有限公司2024 冀ICP备08103738号-5 网站地图