hive进阶 技巧

1.日期格式转换(将yyyymmdd转换为yyyy-mm-dd)

select from_unixtime(unix_timestamp(‘20180905‘,‘yyyymmdd‘),‘yyyy-mm-dd‘)

2..hive去掉字段中除字母和数字外的其它字符

select regexp_replace(a, ‘[^0-9a-zA-Z]‘, ‘‘) from tbl_name

3.hive解析json字段
content字段存储json {"score":"100","name":"zhou","class":‘‘math"},若要对json进行解析,则可用以下方式

---解析单个字段
select get_json_object(content,‘$.score‘) ,
           get_json_object(content,‘$.name),
           get_json_object(content,‘$.class‘)
 from tbl_name
---解析多个字段可以用json_tuple
select a.*
      ,b.score
      ,b.name
      ,b.class
 from tbl a
lateral view outer json_tuple(a.content,‘score‘, ‘name‘, ‘class‘) b as score,name,class

4.hive 导入数据
若从本地文件系统上传,需要加上local关键字;如果直接从hdfs路径上传,则不加local

load data [local] inpath ‘/data/monthcard.csv‘ overwrite into table tbl_name;

5.hive 避免科学计数法

select printf("%.2f",3.428777027500007E7)

6.hive collect_set和lateral view explode用法
原始数据

id1    id2    name
1       1       A
1       1       B
1       1       C
1       2       X
1       2       Y

(1)collect_set

select id1,id2,
collect_set(name) as new_name1,
collect_set(case when id2>1 then name end) as new_name2,
count(name) as cnt
from default.zql_test
group by id1,id2;
---输出结果
OK
id1     id2     new_name1       new_name2       cnt
1       1       ["C","A","B"]   []      3
1       2       ["X","Y"]       ["X","Y"]       2

(2)lateral view explode

select *
from
(
select id1,id2,
collect_set(name) as new_name1,
collect_set(case when id2>1 then name end) as new_name2,
count(name) as cnt
from default. zql_test
group by id1,id2
)t
lateral view explode(new_name1) t as new_type1
lateral view explode(new_name2) t as new_type2
----输出结果
OK
t.id1   t.id2   t.new_name1     t.new_name2     t.cnt   t.new_type1     t.new_type2
1       2       ["Y","X"]       ["Y","X"]       2       Y       Y
1       2       ["Y","X"]       ["Y","X"]       2       Y       X
1       2       ["Y","X"]       ["Y","X"]       2       X       Y
1       2       ["Y","X"]       ["Y","X"]       2       X       X

(3)lateral view explode outer ,加上outer会保留所有记录,两者差异可以参考之前的专题

select *
from
(
select id1,id2,
collect_set(name) as new_name1,
collect_set(case when id2>1 then name end) as new_name2,
count(name) as cnt
from default. zql_test
group by id1,id2
)t
lateral view outer explode(new_name1) t as new_type1
lateral view outer explode(new_name2) t as new_type2
;

----输出结果
OK
t.id1   t.id2   t.new_name1     t.new_name2     t.cnt   t.new_type1     t.new_type2
1       1       ["B","A","C"]   []      3       B       NULL
1       1       ["B","A","C"]   []      3       A       NULL
1       1       ["B","A","C"]   []      3       C       NULL
1       2       ["X","Y"]       ["X","Y"]       2       X       X
1       2       ["X","Y"]       ["X","Y"]       2       X       Y
1       2       ["X","Y"]       ["X","Y"]       2       Y       X
1       2       ["X","Y"]       ["X","Y"]       2       Y       Y

7.hive取前百分之几

---分组内将数据分成两片
ntile(2)over(partition by id order by create_tm)

8.hive返回星期几的方法

---2012-01-01刚好星期日
select pmod(datediff(from_unixtime(unix_timestamp()),‘2012-01-01‘),7) from default.dual;

--返回值0-6
--其中0代表星期日

9.hive产生uuid

select regexp_replace(reflect("java.util.UUID", "randomUUID"), "-", "");

10.hive中匹配中文

select  regexp ‘[\\u4e00-\\u9fa5]‘;

11.hive中regexp_extract的用法
regexp_extract(string subject, string regex_pattern, string index)
说明:抽取字符串subject中符合正则表达式regex_pattern的第index个部分的字符串

第一参数: 要处理的字段
第二参数: 需要匹配的正则表达式
第三个参数:
0是显示与之匹配的整个字符串
1 是显示第一个括号里面的
2 是显示第二个括号里面的字段...

举例:
--取一个连续17位为数字的字符串,且两端为非数字

select regexp_extract(‘1、非订单号(20位):00123456789876543210;
                      2、订单号(17位):12345678987654321;
                      3、其它文字‘,‘[^\\d](\\d{17})[^\\d]‘,0) as s1
, substr(regexp_extract(‘1、非订单号(20位):01234567898765432100;
                      2、订单号(17位):12345678987654321;
                      3、其它文字‘,‘[^\\d](\\d{17})[^\\d]‘,0),2,17) as s2
,regexp_extract(‘1、非订单号(20位):00123456789876543210;
                      2、订单号(17位):12345678987654321;
                      3、其它文字‘,‘[^\\d](\\d{17})[^\\d]‘,1) as s3;

链接:https://www.jianshu.com/p/fe1cdd06f5f8

 

原文地址:https://www.cnblogs.com/Allen-rg/p/10986311.html

时间: 2024-07-30 12:01:50

hive进阶 技巧的相关文章

Hive进阶(下)

Hive进阶(下) Hive的表连接 等值连接 查询员工信息:员工号.姓名.月薪.部门名称 1.select e.empno,e.ename,e.sal,d.dname2.from emp e,dept d3.where e.deptno=d.deptno; 不等值连接 查询员工信息:员工号.姓名.月薪.工资级别 1.select e.empno,e.ename,e.sal,s.grade2.from emp e,salgrade s3.where e.sal between s.losal a

[精通Objective-C]进阶技巧:使用运行时系统API

[精通Objective-C]进阶技巧:使用运行时系统API 参考书籍:<精通Objective-C>[美] Keith Lee 什么是运行时系统? 目录 精通Objective-C进阶技巧使用运行时系统API 目录 动态加载可选包 创建命令行程序 创建可选包 传入包路径 使用可选包 运行时系统API 动态代理 创建实现横切功能的协议和类 编写代理类 添加代理的目标类 测试动态代理程序 动态加载可选包 下面是使用NSbundle API动态加载自己编写的框架包的示例,共需要创建两个工程,一个命

Hive进阶(上)

Hive进阶(上) 执行数据导入 使用Load语句 语法: 1.LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1,partcol2=val2 ...)] 说明: [LOCAL]:从操作系统中的一个目录中进行导入,如果不写LOCAL则为hdfs的数据导入 INPATH:为导入的路径,后面指明文件目录路径,如不指明文件名,则将目录下的所有文件进行导入 [OVER

数据仓库----Hive进阶篇 一

数据仓库--hive进阶篇二 一.数据的导入 1.使用Load语句执行数据的导入 1.语法: 其中(中括号中表示可加指令): LOCAL:表示指定的文件路径是否是本地的,没有则说明是HDFS上的文件路径. OVERWRITE:表示覆盖表中的已有数据. PARTITION ():如果是向分区表中导入数据的话需要指定分区. 2.实例: (1).无分区情况: 其中的'/root/data'可以是路径也可以是文件: 路径表示把该路径下的所有文件都导入到表中: 文件表示只把当前文件导入到表中. (2).有

Hive 进阶

两种情况下不走map-reduce: 1. where ds >' ' //ds 是partition 2. select * from table //后面没有查询条件,什么都没有 1.建表 CREATE TABLE sal( id INT, name STRING, salary INT ) partitioned by (city string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE; 1.1 修

关于视图和路由的进阶技巧

关于视图和路由的进阶技巧 视图装饰器 Python装饰器让我们可以用其他函数包装特定函数. 当一个函数被一个装饰器"装饰"时,那个装饰器会被调用,接着会做额外的工作,修改变量,调用原来的那个函数.我们可以把我们想要重用的代码作为装饰器来包装一系列视图. 装饰器的语法看上去像这样: @decorator_function def decorated(): pass 如果你看过Flask入门指南,那么对这个语法应该不敢到陌生.@app.route正是用于在Flask应用中给视图函数设定路由

hive使用技巧(四)——巧用MapJoin解决数据倾斜问题

相关文章推荐: hive使用技巧(一)自动化动态分配表分区及修改hive表字段名称 hive使用技巧(二)--共享中间结果集 hive使用技巧(三)--巧用group by实现去重统计 hive使用技巧(四)--巧用MapJoin解决数据倾斜问题 Hive的MapJoin,在Join 操作在 Map 阶段完成,如果需要的数据在 Map 的过程中可以访问到则不再需要Reduce. 小表关联一个超大表时,容易发生数据倾斜,可以用MapJoin把小表全部加载到内存在map端进行join,避免reduc

设计进阶技巧–刻意收集

一个好的方法可以让设计效率事半功倍! 曾经我也有过付出很多努力,但效果却差强人意的时候,后来听了前辈的一些建议和方法,成长了很多.今天菜心又带来一个小技巧,希望能够帮助正在进阶路上的你. 这个小技巧叫做“刻意收集”. 图片是设计师离不开的重要元素之一,它可以帮助我们在执行中高效快速的提供灵感支持,如果你还没有属于自己的图片素材库,那是时候反思一下了. 收集也是讲究方法的,不经思考的盲目收集只是浪费时间,下面说几个自己在收集过程中的思考总结,大纲如下: 1.收集细节 2.学会应用 3.收集途径 1

25个 Git 进阶技巧

我已经使用git差不多18个月了,觉得自己对它应该已经非常了解.然后来自GitHub的Scott Chacon过来给LVS做培训,而我在第一天里就学到了很多. 作为一个对git感觉良好的人,我觉得分享从社区里掌握的一些有价值的信息,也许能帮某人解决问题而不用做太深入研究. 基本技巧 1. 安装后的第一步 在安装好git后,你第一件该做的事是设置你的名字和电子邮箱,因为每次提交都要用到这些信息: $ git config --global user.name "Some One" $ g