Hive编程指南:HQL 数据查询

第六章 查询

1、map的数据类型存储,使用JSON格式来表达map,即使用一个被括在{..}内的以逗号分割的键

集合数据查询为 字段名[0] 字段名['xx'] 字段名.xx 等方式来引用

2、数学函数

floor(double d) 返回<=d的最大bigint型值 select floor(3.23) 返回 3
ceil(double d) 返回>=d 的最小bigint型值 select floor(3.23) 返回 4

3、集合函数

count():计算
avg():求列的平均值
sum():求列的和

variance():返回列的方差
stddev_pop(col):返回一组数值的标准偏差
covar_pop(col1,col2):返回一组数值的协方差
corr(col1,col2):返回两组数值的相关系数
percentile(bigint int_expr,p) :int_expr在p(范围是[0,1]处对应的百分比),其中p是一个double型数值
collecct_set(col):返回集合col元素排重后的数组

通常可以通过 set hive.map.aggr=true来提高聚合的性能
select count(*),avg(inv_amt) from dmt.user_inv_par_info_mon;

4、表生成函数

应用在array 或者map 型数值中

5、其他内置函数
cast(<expr> as <type>) # 将expr转换成type类型,如果转换失败,则返回Null
concat() #拼接字符串
concat_ws(string separator,str1,str2) # 指定分隔符,进行拼接
get_json_object(json_string,string_path) # 从给定路径上的JSON字符串中抽取出JSON对象
regexp_extract(subject,regex_pattern,index): # 抽取字符串subject中符合正则表达式regex_pattern的第index个部分的子字符串

regexp_replace():正则表达式进行替换

to_date(string timestamp) 返回时间字符串的日期部分

weekofyear(string date) 返回时间字符串位于一年中的第几个周内
datediff(string enddate,string startdate):时间相差的天数

6、通过设置set hive.exec.mode.local.auto=true 可以使用本地模式来进行查询,而不触发mapreduce任务

7、对浮点数进行比较时,需要保持极端谨慎的态度,要避免任何从窄类型隐式转换到更广泛类型的操作。和钱相关的都避免使用浮点数

8、rlike正则表达式匹配需要查找的条件表达式

9、having 语句允许用户通过一个简单的语法完成原本需要通过子查询才能对group by 语句产生的分组进行条件过滤的任务

10、join

大多数情况下,hive会对每个join对象启动一个mapreduce任务,当有三个表join时,先启动一个mapreduce任务进行连接操作,然后再启动一个mapreduce任务将第一个mapreduce的输出和表c进行连接操作

11、join优化

提示:当对3个或者更多个表进行join连接时,如果每个on字句都使用相同的连接键的话,那么只会产生一个mapreduce job。
Hive同时假定查询中最后一个表是最大的那个表。在对每行记录进行连接操作时,它会尝试将其他表缓存起来,然后扫描最后那个表进行计算。因此,用户需要保证连续查询中的表的大小从左到右是依次增加的。

用户可以显式指定哪张表是大表;
select /* +STREAMTABLE(S)/ S.
from stocks s
join dividends d
on s.id = d.id

对于外连接(outer join)会忽略掉分区过滤条件

left semi-join :左半开连接,会返回左边表的记录,前提是其记录对于右边表满足on语句中的判定条件,相当于其他sql语言中的 where字句中的 In 和 exists操作,是其更高效的一种表现。
原因如下:对于左边表中一条指定的记录,在右边表中一旦找到匹配的记录,hive就会停止扫描

select a.*
from dmt.user_inv_par_info_mon a
left semi join dmt.user_inv_info_mon b
on a.user_id = b.user_id
;

select a.*
from dmt.user_inv_par_info_mon a
where user_id in (select user_id from dmt.user_inv_info_mon )
;

12、order by 和 sort by

order by 是在reducer过程执行的全局排序
sort by 只会在每个reducer 中对数据进行排序,也就是执行一个局部排序过程,这样可以保证每个reducer的输出数据都是有序的,但并非全局有序,可以提高后面进行的全局排序的效率。

select *
from dmt.user_inv_par_info_mon
sort by inv_amt desc;

13、含有sort by 的 distribute by

distribute by 控制map的输出在reducer中是如何划分的。mapreduce job中传输的所有数据都是按照键-值对的方式进行组织的,因此hive在将用户的查询语句转换成mapreduce job时,其必须在内部使用这个功能
hive 要求distribute by语句要写在sort by 语句之前,可以实现输出的文件数据是全局排序的,

14、cluster by
可以代替 distribute by 和 sort by的组合写法

15、hive抽样查询

hive 可以通过对表进行分桶抽样来满足这个要求,可以使用rand()函数进行抽样

select * from dmt.user_inv_par_info_mon tablesample(bucket 3 out of 10 on rand()) ;

也可以指定列名
select * from dmt.user_inv_par_info_mon tablesample(bucket 1 out of 2 on user_id) ;

(2)数据块抽样
hive提供了一种按照抽样百分比进行抽样的方式,这种是基于行数的,按照输入路径下的数据块百分比进行的抽样;

select * from dmt.user_inv_info_mon tablesample(0.1 percent) ;

需要注意的是:这种抽样方式并不一定适用于所有的文件格式,另外,这种抽样的最小抽样单元是一个hdfs数据块。因此如果表的数据大小小于普通的块128mb的话,将会返回所有的行。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 1、9000步,食物多样性v 2、职业技能学习v 3、健康管理学习v 4、善待家人v 5、主动关心咳嗽v
    王江涛_6000阅读 33评论 0 0
  • 再见苏州 看朋友圈,知道苏州天平山的枫叶又红了,又到了赏枫的时节了。可是今年,我却没法去了,或许以后再去的机会也很...
    任她行阅读 383评论 0 0
  • 今天放学后,我看到妈妈在家包馄饨。先把雪白的皮儿放在手心里,再把不多不少的馅儿放在雪白的皮儿里,然后对折一...
    纵横围棋北环校区阅读 107评论 0 0
  • 【学员信息】阿何写作训练营6期3班2组-柳林风声-207号 【作业要求】长句拆解成短句 【作业如下】 改写前: 现...
    木之文阅读 174评论 0 0