Impala函数使用小记

Posted 长亭古道读人生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Impala函数使用小记相关的知识,希望对你有一定的参考价值。

公司接入神策系统,数据查询的速度是提升了N个档次了,但问题是有些模型不支持查询我想要的东西,这个时候呢,需要用到自定义查询了。其实数据库里面的好多函数,在这里都行不通了,我也是每次查询都整的头大。

先百度了一下Impala是个啥东东:

Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速。



其实今天要查询的一个东东,在数据库里面是很简单实现的,大致是,在A表但是不在B表的记录要查出来,原本以为这个数据库速度这么快,直接用not in 秒出结果的事情,结果,这里面是没有not in 这种用法的,后面查示例才知道要用A left join B再挑出B中间某个字段为空的记录。


我建了五个分群,历经无数次报错,终于可以执行出结果了:

select count(distinct a.merchant_no),count(*),sum(a.pay_enter_money) from events a,

 (select s.distinct_id  from segmenter_chaojishengPOS s left join

(select distinct_id from segmenter_getiyonghu

union select distinct_id from segmenter_geti_2

union select distinct_id from segmenter_qiyeyonghu 

union select distinct_id from segmenter_qiye_2) g on s.distinct_id=g.distinct_id 

where g.distinct_id is null) b,

users c

where b.distinct_id=c._user_id and a.merchant_no=c.merchant_no

and a.event='PayResult' and a.service_type='10011' and trans_status='SUCCESS'

and acq_name='ZG_ZQ';

This browser does not support music or audio playback. Please play it in WeChat or another browser.

在改的过程中,我经历过大致这几类错误:

duplicated inline view column alias: 'user_id' in inline view 'b'

:我创建的子查询,也叫做内嵌视图,用了无数次,今天才知道这个叫法,这个中间user_id这个字段是重复的。

AnalysisException: Column/field reference is ambiguous: 'distinct_id':查询的结果有多个distinct_id没有指定是哪一个distinct_id。我的解决办法是只取A表中的distinct_id出来。

AnalysisException: duplicated inline view column alias: 'distinct_id' in inline view 'b':报错和第一种类似,因为有多个distinct_id,所以不知道取哪一个。


其实,这个方法,肯定是有待优化的,但我暂且记录一下,在经历过数次百度后发现,其实问题的解决,还是靠不断的试错,不断定位问题,才最终解决问题。


现在比较一下impala和mysql中可以通用的:

  1. 可以将表别名;

  2. 聚合函数是可用的,例如,max,min,sum,count,count(distinct)这些;

  3. 可联表查询;

  4. group by 1,2,3是适用的;

  5. 正则表达式也是可以匹配的【但我用的比较少,这个是后期要继续研究的】。


Impala里面觉得特别好用的函数:


first_time_value,这个函数超厉害,可以查出首次行为对应的值,这个真的是超赞,如果用mysql的话,要经过太多道处理了;


extract(unit FROM timestamp)大概类似date_format吧,如果查年月日,不知道要怎么处理,这个还得继续研究。



感悟:

在想办法解决问题的途中,很少有一气呵成的时候,有时候你的一气呵成,是前期的很多坑都已经踩过填平了。升级打怪继续咯!


近期:

在看人类简史,之前上学的时候,觉得历史太无聊了,里面的故事一点都不好玩,现在回头看,人类短短6000年的文明史,已经有太多的聪明大脑解决了人类生活的问题,我们并没有觉得生活更美好,是因为解决一个问题之后,需求变了,生活也是如此。


前期在看的当我遇见一个人,蛮好看的,主要是因为图画精美,文字简短。而之前在看的理性乐观派,好像很久都没看到那本书了。


这几天又忍不住去把顾漫的你是我的荣耀看了一遍,觉得整本书很甜,故事情节也不老套。

顾漫的小说,微微一笑很倾城,我当时也是看了好多遍。这种网游类的小说,好像我还是挺喜欢看的,虽然我不玩游戏。

近期在追囧囧有妖的《余生有你,甜又暖》,只是更新太慢了。


刚在群里看到一句话:只要思想不滑坡  方法总比困难多啊!哈哈,共勉。




以上是关于Impala函数使用小记的主要内容,如果未能解决你的问题,请参考以下文章

Impala SQL开发小记

使用窗口函数在 Impala 中的总计列

Impala系列: Impala常用的功能函数

Impala的分析函数(基于impala2.12)

如何在Hive&Impala中使用UDF

0011-如何在Hive & Impala中使用UDF