1、pmod(int a, int b):返回a除以b的余数的绝对值;

cast(aaa as int):将string转化成int;

cast(aaa as decimal(10, 2)):将string转化成float,保留两位小数;

2、trim(String A):去除A两侧的空格;

ltrim(String A):去除左边空格;

rtrim(String A):去除右边空格

select trim('abc') from lxw_dual;

3、concat_ws (separator,str1,str2,...) :根据固定的分隔符连接后侧字符串;

concat_ws第一个参数是其它参数的分隔符,分隔符的位置放在要连接的两个字符串之间,分隔符可以是一个字符串,也可以是其他参数。

select concat_ws(',','11','22','33');    11,22,33

4、collect_list/collect_set列转行函数:

在本地文件系统创建测试文件:

存储在hive表中:

按用户分组,取出每个用户每天看过的所有视频的名字:

上面结果中,由于霸王别姬李四看了两遍,所以列表中存在重复,去重处理collect_set()

突破group by限制:

还可以利用collect来突破group by的限制,hive中在group by查询的时候要求出现在select后面的列都必须出现在group by的后面

即select列必须作为分组依据的列,但有的时候我们想根据A分组然后随便取出每个分组中的一个B,带入到这个实验中就是按照

用户进行分组,然后随便拿出一个他看过的视频名称即可:

eg:

collect_list:该函数功能等同于collect_set,唯一的区别在于collect_set会去除重复元素,collect_list不去除重复元素,示例sql如下

with t as ( select 1 id,123 value union all select 1 id,234 value union all select 2 id,124 value union all select 2 id,124 value ) select t.id,collect_set(t.value),collect_list(t.value) from t group by t.id

collect_set:

该函数只接受基本的数据类型,主要作用是将某字段的值进行去重汇总,返回值是array类型字段

with t as ( select 1 id,123 valu union all select 1 id,234 value union all select 2 id,124 value ) select t.id,collect_set(t.value) from t group by t.id

5、get_json_object(string json_string,string path):

该函数的第一个参数是json对象变量,第二个参数使用$表示json变量标识,然后用.或[]读取对象或数组

select get_json_object(pricecount,'$.buyoutRoomRequest') new_id,pricecount from table_sample a where d='2018-08-31' limit 100

6、json_tuple(string json_string,string k1,string k2...)

该函数的第一个参数是json对象变量,之后的参数是不定长参数,是一组键k1,k2...,返回值是元组,该方法比get_json_object高效,因为可以在一次调用中输入多个键值

select m.*,n.pricecount from (select from table_sample a where d='2018-08-31' limit 100)n lateral view json_tuple(pricecount,'paymentType','complete') m as f1,f2

7、split(str,regex):数据切分。

Splits str arround occourances that match regex.该函数第一个参数是字符串,第二个参数是设定的分隔符,通过第二个参数把第一个参数做拆分,返回一个数组

select split('123,3455,2568',',') select split('sfas:sdfs:sf',':')

8、explode():

该函数接收一个参数,参数类型需是array或者map类型,该函数的输出是把输入参数的每个元素拆成独立的一行记录。

select explode(split('123,3455,2568',','))

9、lateral view():

Lateral View 一般与用户自定义表生成函数(如explode())结合使用。UDTF为每个输入行生成零个或多个输出行,Lateral view首先将UDTF应用于基表的每一行,然后将结果输出行连接到输入行,已形成具有提供的表别名的虚拟表。

select j.nf,p.* from ( select m.*,n.pricecount from (select * from ods_htl_htlinfogoverndb.buyout_appraise a where d =

'${zdt.format("yyyy-MM-dd")}' limit 100)n lateral view json_tuple(pricecount,'paymentType','complete') m as f1,f2 )p lateral view explode(split(regexp_replace(p.f1,'\\[|\\]',''),',')) j as nf

结合:hive中行变列和列变行的函数:

collect_list()与collect_set()是将数据列变行;

explode()与lateral view是将数据行变列;

eg:

select items_page, num

from data_limit

lateral view explode(items_pages) good as items_page

其中:

1)explode是将items_pages行变列;

2)good是虚拟表,用来存储explode之后的数据,并定义列名为items_page;

3)lateral view是将items_page与上面的字段num进行笛卡尔积,呈现出多列表示;

10、str_to_map(String text,String delimiter1,String delimiter2)

使用两个分隔符将文本拆分成键值对。Delimiter1将文本分成k-v对,Delimiter2分割每个k-v对。对于delimiter1的默认值是',',delimiter2的默认值是'='.

select str_to_map('abc:11&bcd:22', '&', ':')

11、array_contains(Array<T>,value)

该函数的用来判断Arrary<T>中是否包含元素value,返回值是boolean

select array_contains(array(1,2,3,4,5),3) true

12、percentile(expr,pc):

该函数用来计算参数expr的百分位数,expr:字段类型必须是INT,否则报错;pc:百分位数,已数值形式传入

13、percentile_approx(expr,pc,[nb])

该函数也是用来计算参数expr的百分位数,但数据类型要求没有percentile严格,该函数数值类似类型都可以;pc:百分位数,可以以数组形式传入,因此可以一次性查看多个指定百分位数;[nb]:控制内存消耗的精度,选填

14、数学函数:

(1)round:四舍五入 select round(数值,小数点位数);

(2)ceil:向上取整 select ceil(45.6);

(3)floor:向下取整 select floor(45.6);

15、字符函数:

(1)lower:转成小写

select lower('Hive'); --hive

(2)upper:转成大写

select lower('Hive'); --HIVE

(3)length:长度

select length('Hive'); --4

(4)concat:拼接字符串

select concat('hello','Hive'); --helloHive

(5)substr:求子串

select substr('hive',2); --ive

select substr('hive',2,1); --i

(6)trim:去掉前后的空格

select trim('  hive   '); -hive

(7)lpad:左填充

对hive填充到10位,补位用#

select lpad('hive',10,'#'); --######hive

(8)rpad:右填充

select rpad('hive',10,'#'); --hive######

16、日期函数:

(1)to_date

select to_date('2015-06-01 15:34:23'); --2015-06-01

(2)year

select year('2015-05-22 15:34:23'); --2015

(3)month

select month('2015-05-22 15:34:23'); --5

(4)day

select day('2015-05-22 15:34:23'); --22

(5)weekofyear

select weekofyear('2015-05-22 15:34:23'); --21

(6)datediff(date,date1):日期差,即两个日期差几天,months_between(date,date1),两个日期差几月,用法一致。

select datediff('2015-05-22 15:34:23','2015-05-29 15:34:23'); --[-7]

(7)date_add:在现在日期上增加天数,add_months是增加月份,用法一致。

select date_add('2015-05-22 15:34:23',2); --2015-05-24

(8)date_sub:在现在日期上减少天数

select date_sub('2015-05-22 15:34:23',2); --2015-05-20

(9)date_format(string/date,dateformate):把字符串或者日期转成指定格式的日期。

select date_format('2018-09-12','yyyy-MM-dd HH:mm:ss') as date_time,date_format('2018-09-12','yyyyMMdd') as date_time1 from dual;--2018-09-12 00:00:00

(10)unix_timestamp(date,dateformat):日期格式转化为时间戳,如果括号内没有参数则表示返回当前的时间戳。

select unix_timestamp() as time_stamp,unix_timestamp('2018-09-26 9:13:26','yyyy-MM-ddHH:mm:ss') as time_stamp1 from dual;

(11)from_unixtime(timestamp,dateformat):将时间戳转化为日期格式,格式必须是10位,毫秒级的时间戳需要用cast转化成秒级。

select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') asdate_time,from_unixtime(1537924406,'yyyy-MM-dd') as date_time1 from dual;

from_unixtime(cast(unix_timestamp()/1000 as int),'yyyy-MM-dd HH:mm:ss') as date_time

(12)last_day(date):获取月末最后一天:

select last_day('2018-09-30') as date_time,last_day('2018-09-27 21:16:13') as date_time1 from dual;--2018-09-30

(13)trunc(date,format) format:MONTH/MON/MM, YEAR/YYYY/YY:返回月初、年初

select trunc('2018-09-27','YY') as date_time,trunc('2018-09-27 21:16:13','MM') as date_time1 from dual;

--2018-01-01和2018-09-01

(14)next_day(date,formate) format:英文星期几的缩写或者全拼:当前日期下个星期X的日期。

select next_day('2018-09-27','TH') as date_time,next_day('2018-09-27 21:16:13','TU') as date_time1 from dual;

--2018-10-04和2018-10-02

17、常用函数上:https://blog.csdn.net/Forever_ck/article/details/85268145

常用函数下:https://blog.csdn.net/Forever_ck/article/details/85268773

常用函数总结:https://blog.csdn.net/weixin_41907511/article/details/84826469

18、条件函数:

select nvl(T v1, T default_value); -- 如果v1不为null,返回v1否则defaultV

select if(boolean testCondition, T valueTrue, T valueFalseOrNull); --if条件判断表达式

select coalesce(T v1, T v2, T v3, ...); --返回第一个不为null的value值

19、UNION ALL

是上下关联两个hive表,其中各个关联部分的字段名称必须一致,否则报错;

20、删除表信息:

-- 删除库

drop database if exists db_name;

-- 强制删除库

drop database if exists db_name cascade;

-- 删除表

drop table if exists employee;

-- 清空表

truncate table employee;

-- 清空表,第二种方式

insert overwrite table employee select * from employee where 1=0;

-- 删除分区

alter table employee_table drop partition (stat_year_month>='2018-01');

-- 按条件删除数据

insert overwrite table employee_table select * from employee_table where id>'180203a15f';

21、row_number()函数:

row_number() over(distribute by col1 sort by clo2 desc)

22、正则表达式的应用:

regexp_extract(string subject, string pattern, int index)函数的应用;

将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。

select clientcode

,regexp_extract(filterlist,'(filtertype"\\:")(\\d+)(",)',2) as filtertype

,regexp_extract(filterlist,'(filtername"\\:")((\\W*\\w*)|(\\W*))(",)',2) as filtername

,regexp_extract(filterlist,'(filtertitle"\\:")((\\W*\\w*)|(\\W*))(",)',2) as filtertitle

,regexp_extract(filterlist,'(filterid"\\:")(\\d+\\|\\d+)(",)',2) as filterid

from tmp_action_click

数据处理奇技巧——hive篇相关推荐

  1. 数据处理奇技巧——python数据处理小技能

    有人说做数据无非几点:逻辑思路,技术工具和业务需求,1)逻辑思路中涵盖的大多是一些算法.规则: 2)技术工具中主要是python.Excel和SQL: 3)业务逻辑里面则多为一些指标.客群等. 看着很 ...

  2. 25个增强iOS应用程序性能的提示和技巧 — 中级篇

    本文由破船译自:raywenderlich 转载请注明出处:BeyondVincent的博客 _____________ 在开发iOS应用程序时.让程序具有良好的性能是非常关键的.这也是用户所期望的. ...

  3. 小学计算机打字基础知识,浅谈小学计算机教学技巧5篇

    <浅谈小学计算机教学技巧5篇>由会员分享,可在线阅读,更多相关<浅谈小学计算机教学技巧5篇(3页珍藏版)>请在装配图网上搜索. 1.浅谈小学计算机教学技巧5篇浅谈小学计算机教学 ...

  4. ggplot2箱式图两两比较_作图技巧024篇ggplot2在循环中的坑

    "ggplot2在循环中的输出"生活科学哥-R语言科学 2020-12-23  8:28ggplot2用过之后,你肯定会爱上它:结合一些不错的包,可以得到非常有展现力的图片,但是呢 ...

  5. 移动端1px像素实现技巧 - 讲解篇

    移动端1px像素问题 - 解决办法: DPI介绍: 定义: DPI 表示(每英寸点数)图像每英寸长度内的点数. DPI(Dots Per Inch,每英寸点数)是一个量度单位,用于点阵数码影像,指每一 ...

  6. 信息收集后的数据处理小技巧

    信息收集后的数据处理小技巧 对于数据的批量处理 http://www.txttool.com/about/?id=125 对主域名进行提取 https://seo.juziseo.com/tools/ ...

  7. mac备忘录同步android,IOS技巧心得 篇五:iOS备忘录,可实现全平台实时同步,iPhone ipad PC...

    IOS技巧心得 篇五:iOS备忘录,可实现全平台实时同步,iPhone ipad PC 2020-01-20 17:47:28 11点赞 54收藏 16评论 前言: 由于生活中越来越多的手机.平板电脑 ...

  8. 《鬼谷子》中的沟通技巧——入门篇

    <鬼谷子>中的沟通技巧--入门篇 PMP 关劲松 u 一.鬼谷子简介        鬼谷子,姓王名诩,春秋时人.常入云梦山采药修道.因隐居清溪之鬼谷,故自称鬼谷先生.鬼谷子为纵横家之鼻祖, ...

  9. 装双系统需要给linux系统单独分一个区,PC技巧分享 篇一:教你如何在单硬盘单分区中安装双系统...

    PC技巧分享 篇一:教你如何在单硬盘单分区中安装双系统 2019-10-11 18:24:19 23点赞 105收藏 20评论 前言 很多时候,由于某些需要,在仅有一个分区的情况下,要保留原有系统再装 ...

  10. Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建五(Hive篇)

    Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建五(Hive篇) 七.Hive安装配置 1.准备工作 2.安装hive 全文请看:https://blog.csd ...

最新文章

  1. ElasticSearch基础杂烩-配置-索引-优化
  2. 【企业管理】2020年2 月 每日花语
  3. linux搭建ca服务器搭建,linux下安装EJBCA 搭建私有CA服务器
  4. PHP 4 中对象的比较
  5. FPGA串口(UART)通信协议制定与设计思路详解示例
  6. 转载 ---资深HR告诉你:我如何筛选简历与选择人员的
  7. P3146 [USACO16OPEN]248 G(python3实现)
  8. 各个JSON技术的比较(Jackson,Gson,Fastjson)的对比
  9. Python使用管道实现进程间数据传递
  10. 穷举法求最大公共子序列C语言,算法--最长公共子序列(LongestCommon Subsequence, LCS)...
  11. My97 DatePicker 选择时间后弹出选择的时间
  12. iapp退出软件按钮代码_一师一优课视频专用转码软件的安装和使用教程
  13. 模块参考资料-硬件资料-Air720UG/UH
  14. 迭代器模式之看芒果台还是央视nie?
  15. redis报错:ERR value is not an integer or out of range
  16. 《关键对话》如何高效能沟通之何谓关键对话
  17. 11、Altiris cms 7.0 系统监控
  18. 计算机报税流程,河南地税电子税务局电脑版纳税申报操作流程(图文)
  19. 美国办公室里怎样着装
  20. 分享一篇父母对孩子教育方法的文章

热门文章

  1. javaweb response
  2. 计算机不能连接网络适配器,网络适配器显示未连接的解决方法图文教程
  3. matlab将水印图像嵌入图像,改进的图像自嵌入水印算法及其MATLAB实现
  4. 电脑锁屏壁纸提取方法
  5. setPositiveButton,setNegativeButton,setNeutralButton各代表什么意思
  6. android 标签开源控件,Android开源控件ViewPager Indicator的使用方法
  7. 禾穗HERS | 听说妳事业成功都是靠“关系”?
  8. Python获取字符串中特定的内容
  9. 计算机发展趋势 网络化,计算机的发展趋势表现在多极化网络化等几个方面
  10. 利用Fiddler实现在pc微信端测试