Hive SQL学习整理_2

=Start=

缘由:

继续整理一下常见Hive SQL的用法,方便要用的时候参考。

正文:

参考解答:
1、explode函数的简单使用

总结起来一句话:explode就是将Hive一行中复杂的array或者map结构拆分成多行。

2、lateral view使用时的一些注意事项

3、字符串截取

4、json字符串解析、提取

参见之前记录的「Hive中如何加载和解析(嵌套)json数据」。

5、内置的聚合函数
返回类型 聚合函数名称 描述说明
DOUBLE sum(col), sum(DISTINCT col) 求列的和 (returns the sum of the elements in the group or the sum of the distinct values of the column in the group)
DOUBLE avg(col), avg(DISTINCT col) 求列的平均数(returns the average of the elements in the group or the average of the distinct values of the column in the group)
DOUBLE min(col) 求列的最小值(returns the minimum value of the column in the group)
DOUBLE max(col) 求列的最大值(returns the maximum value of the column in the group)

 

参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/4243.html

《Hive SQL学习整理_2》上有7条评论

  1. 多个Lateral View
    https://stackoverflow.com/questions/20667473/hive-explode-lateral-view-multiple-arrays
    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+LateralView
    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-posexplode
    https://blog.csdn.net/oopsoom/article/details/26001307

    2.2 多个Lateral View
    From语句后可以跟多个Lateral View。
    A FROM clause can have multiple LATERAL VIEW clauses. Subsequent LATERAL VIEWS can reference columns from any of the tables appearing to the left of the LATERAL VIEW.

  2. hive sql 调优相关总结
    https://zhuanlan.zhihu.com/p/23174042

    代码规范调优

    1、在代码中经常使用到一些跑出来的中间表,又不想手动创建,使用with xxxtable as ()创建临时中间表。复杂的逻辑也可以尝试建中间表。

    2、少用select * 没有必要的数据列不要查询出来,消耗资源,增加io压力。尽量尽早地过滤数据,减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段

    3、做一些分组统计时,经常要用到不同维度下面的汇总,可以用group by with cube,效率比union all 汇总快2 3倍。

    4、Order by(全局排序,一个reducer) 效率比Sort by(不是全局排序,其在数据进入reducer前完成排序)低,窗口函数使用:row_number()over(distribute BY uid sort by dt desc)row_number()over(distribute BY uid sort by dt desc)

    5、尽可能减少数据集,做关联时避免出现过多的笛卡尔数据集。

    6、经常反复使用的表可以考虑建中间表。

    7、避免使用count(distinct)操作, 解决方法:先使用group by去重,再count计算。尽可能用group by 代替distinct

    8、join时小表放在左边,大表放在右边?两张数据量相差特别大的表进行join操作时,如果小表特别小(比如几百几千条记录),使用mapjoin。

    9、如果union all的部分个数大于2,或者每个union部分数据量大,应该拆成多个insert into 语句,实际测试过程中,执行时间能提升50%。

  3. Lateral View用法 与 Hive UDTF explode
    https://blog.csdn.net/oopsoom/article/details/26001307

    Lateral view is used in conjunction with user-defined table generatingfunctions such as explode(). As mentioned in Built-in Table-Generating Functions, a UDTF generates zero or more output rows foreach input row. A lateral view first applies the UDTF to each row of base tableand then joins resulting output rows to the input rows to form a virtual tablehaving the supplied table alias.

    Lateral view 其实就是用来和像类似explode这种UDTF函数联用的。lateral view 会将UDTF生成的结果放到一个虚拟表中,然后这个虚拟表会和输入行即每个game_id进行join 来达到连接UDTF外的select字段的目的。

    在要使用 LATERAL VIEW explode 功能的SQL中,如果SQL语句中包含where条件的限制,需要将 LATERAL VIEW explode 放在 from 之后,where 之前,否则会报错!

    可以在2个地方用Lateral view:
    1. 在 UDTF 前面用
    2. 在 from tbl_name 后面用

    UDTF有两种使用方法,一种直接放到select后面,一种和lateral view一起使用。

    Hive 中的复合数据结构简介以及一些函数的用法说明
    https://my.oschina.net/leejun2005/blog/120463

    hive中UDF、UDAF和UDTF详解
    https://blog.csdn.net/zhaoli081223/article/details/46637517

hi进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注