hive函数总结

1.substr()函数

substr()是字符串截取函数,其语法为: substr(string A, int start, int len),返回值为 string类型。说明:返回字符串A从start位置开始,长度为len的字符串。这里需要注意的是初始位置是从1开始。
2.explode()函数–行转列

explode函数可以将一个array或者map展开,其中explode(array)使得结果中将array列表里的每个元素生成一行;explode(map)使得结果中将map里的每一对元素作为一行,key为一列,value为一列,一般情况下,直接使用即可。

  • table_name 表名
  • map_col 为map类型的字段
  • may_key_col, may_value_col 分别对应map_col被拆分之后的map映射里的key 和 value
    select explode(map_col) as (may_key_col,may_value_col) from table_name
    (2)explode()函数的局限性
    不能关联原始表中的其他字段;
    不能与group by、cluster by、distribute by 、sort by 联用;
    不能进行udtf嵌套;
    不允许选择其他表达式。
    (3)需要结合lateral view 使用的情况介绍
    lateral view和udtf结合使用,会将udtf生成的结果放在一张虚拟表中(即lateral view里)虚拟表相当于再和主表关联,从而达到添加udtf生成的字段以外的字段,即主表里的字段或者主表运算后的字段。
    lateral view(多)应用举例1:
    select o.*, table_view.new_col
    from table_origin o
    lateral view UDTF(expression) table_view as new_col_1, new_col_2
    注释:
  • lateral view 表示将UDTF分裂的字段放在虚拟表中, 然后和主表table_origin进行关联。
  • UDTF(expression):复合逻辑规则的UDTF函数,最常用的是explode
  • table_view : 对应的虚拟表的表名
  • new_col: 虚拟表里存放的有效字段
  • from子句后面也可以跟多个lateral view语句,使用空格间隔就可以了。
  • 以上代码取出的是切割后的第一个值没有全部保留。
    lateral view(多)应用举例2:
    SELECT myCol1, myCol2 FROM baseTable
    LATERAL VIEW explode(col1) myTable1 AS myCol1
    LATERAL VIEW explode(col2) myTable2 AS myCol2;
    多个lateral_view联用中间使用空格隔开就可以了。
    LATERAL VIEW应用举例1扩展:
    原始数据格式:game_id,user_id,其中user_id使用‘[[[’作为分隔

使用lateral view+explode后每一个id与炸裂出来的每一行进行笛卡尔积关联(即一列转多行).

还有一种情况,当UDTF所转化的array是空的时候如何处理呢?
在hive 0.12当中支持outer关键字,如果UDTF结果为空,默认会被忽略输出。如果加上outer关键字则会像left outer join一样,还是会输出select出的列,UDTF的输出结果是NULL

3.collect_set()函数–列转行 将一列中的多行去重后合并成一行
collect_set(col)函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。例如,要统计每种no下的score,直接对no分组后对score进行collect_set操作。

4.collect_list()函数–列转行 将一列中的多行合并成一行
5.concat_ws()函数–实现指定连接的作用
concat_ws(‘,’ , collect_set(infodisptype)),将聚合的数据之间使用,做分割形成array。S
特殊用法:用于判断聚合后的array中是否包含有期望的值
array_contains(split(concat_ws(‘,’ , collect_set(infodisptype)),‘,’),‘shuaxin’)

6.获取jsonarray中的value

例:select json_tuple(aa.col,‘website’) from (select (
split(
regexp_replace(
regexp_replace(‘[{“website”:“www.baidu.com”,“name”:“百度”},{“website”:“google.com”,“name”:“谷歌”}]’, ‘\[|\]’,‘’),
‘\}\,\{’,‘\}\|\{’)
,‘\|’)[0]
)as col )as aa

7.使用正则表达式截取特定范围字符串
select
regexp_extract(infojson,‘“w”:“([^”]+)"’,1)
from hdp_lbg_supin_zplisting.t_ods_zp_recsearch
where dt = ‘${dateSuffix}’ limit 1000
解析:参数1是传入的字段,参数二是正则‘()’内的才是真正要匹配出来的,参数3传入的数值是用于限定取得范围,
0是显示与之匹配的整个字符串
1 是显示第一个括号里面的
2 是显示第二个括号里面的字段…

8.一些hive相关的命令与参数
hadoop fs -du -s -h
hive外部表删除,数据还是存在hdfs上没有被删除的,只需要重建一下table,如果是分区表需要使用下面的命令修复就可以了
MSCK REPAIR TABLE table_name
hive 内部表被删除数据也一起被删除了。
所以只有自己用的临时表才可以创建为内部表,生产环境下的表都创建为 external table。
如果开启了回收站数据是可以找回的,需要在hdfs上的回收站里mv回到原路径然后重新创建表结构,如果是分区表需要加命令 MSCK REPAIR TABLE teat_table修复。

1.关于if条件判断里的null,如果第一个判断条件是null的长度,不论判断条件如何写最终结果都是要运行if的第三个参数。
SELECT if(length(null)>4,1,‘-’); – ‘-’
SELECT if(length(null)<4,1,‘-’)-- ‘-’
2.nvl(tjfrom,‘-’)函数作用是在参数1为null时替换成参数2;
3.null在正则表达式中的使用。select null rlike ‘^\d+$’;–结果永远为null;
4.关于日期格式你必须知道的坑( yyyy-MM-dd HH:mm:ss),码着提醒自己
yyyy-MM-dd HH:mm:ss:代表将时间转换为24小时制,例: 2018-06-27 15:24:21
yyyy-MM-dd hh:mm:ss:代表将时间转换为12小时制,例: 2018-06-27 03:24:21
将日期时间转化为时间戳(10位):unix_timestamp(substring(refresh_time,0,19), ‘yyyy-MM-dd HH:mm:ss’)
将时间戳转化为小时数(24小时):from_unixtime(cast(logtime/1000 as bigint),‘HH’) as `hours`
5.关于``
6.concat_ws和collect_set()函数联合使用–对某列的多行进行去重合并
select subtype
,concat_ws(‘&’,collect_set(cast(from as string))) from
,concat_ws(‘&’,collect_set(cast(id as string))) id
,concat_ws(‘&’,collect_set(cast(name as string)))name
,concat_ws(‘&’,collect_set(cast(type as string))) type
from aaaaaaa
group by subtype;
7.concat_ws和collect_list()函数联合使用–对某列不进行去重合并
select subtype
,concat_ws(‘&’,collect_list(cast(from as string))) from
,concat_ws(‘&’,collect_list(cast(id as string))) id
,concat_ws(‘&’,collect_list(cast(name as string)))name
,concat_ws(‘&’,collect_list(cast(type as string))) type
from aaaaaaa
group by subtype;
8.hive中使用正则匹配时候如需转义需要使用\双斜杠
如果要匹配的字符里有“;”那么需要使用“;”的ascii码对应的八进制数字代替。否则遇“;”就结束了。
9.hive中and和or连用时 and优先级高于or,需要在外层添加()来改变执行顺序。
10.分区表新增一个字段,再插入数据会显示该字段为null,其实数据已经插入但是hive无法显示,解决办法如下:
(1)cascade 关键字
alter table hdp_lbg_supin_zplisting.ods_zp_actual_infodetail partition(dt=20200728) add columns(source string) CASCADE;
(2)先drop掉表然后重新创建,再msck一下
msck repair table hdp_lbg_supin_zplisting.ods_zp_actual_infodetail;
(3)也可以这样做
alter table tablename add columns(source string)
然后正常写数据进去,然后执行如下操作,先删除分区再msck
alter table partition_test drop partition(dt=‘a’);
msck repair table partition_test
11.coalesce(a,b) 如果a为 null返回b,如果ab都为null返回null
12、打散操作

  1. 删除分区数据(数据本身未删除)
    alter table ods_z_n_a drop partition(dt=20200721);

Hive SQL 查询结果导出到本地:
第一步导出到文件夹
方式1:导出到本地,文件格式为lzo
首先在本地mkdir创建文件夹,然后执行以下操作,会在文件夹下生成.Lzo文件

insert overwrite local directory “/home/hdp_lbg_supin/wanglizhou/output/”
select * from hdp_lbg_supin_zplisting.dim_zp_bi_indicator;

方式2:导出到本地,指定分割符”\t”

insert overwrite local directory “/home/hdp_lbg_supin/wanglizhou/output”
row format delimited fields terminated by “\t”
select * from hdp_lbg_supin_zplisting.dim_zp_bi_indicator;
方式3:直接在系统目录执行
(1)sql语句放在一个叫做file.sql的文件中
hive -f file.sql > /home/hdp_lbg_supin/wanglizhou/output/test.txt

(2)sql语句放在字符串中 hive -e “sql ” > /home/hdp_lbg_supin/wanglizhou/output/test.txt

第二步:文件导出到本地 sz + 文件名 如”sz /000000_0_0.lzo”
如果是lzo需要先解压

Lzo解压命令:解压文件 lzop -dv + 文件全路径
lzop -dv /home/hdp_lbg_supin/wanglizhou/output/000000_0_0.lzo
hadoop文件系统复制到本地需要使用copyToLocal命令,
grep ‘xxx’ 目标文件名 -A 20 匹配查找到的及以后的20行内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值