当前位置: 首页 > news >正文

地区性门户网站是什么意思深圳华强北网站建设

地区性门户网站是什么意思,深圳华强北网站建设,湖北网,小程序定制Hive 数据类型 struct类型 struct#xff1a;结构体#xff0c;对应了Java中的对象#xff0c;实际上是将数据以json形式来进行存储和处理 案例 原始数据 a tom,19,male amy,18,female b bob,18,male john,18,male c lucy,19,female lily,19,female d henry,18,male davi…Hive 数据类型 struct类型 struct结构体对应了Java中的对象实际上是将数据以json形式来进行存储和处理 案例 原始数据 a tom,19,male amy,18,female b bob,18,male john,18,male c lucy,19,female lily,19,female d henry,18,male david,19,male案例 -- 建表 create table groups (group_id string,mem_a structname:string, age:int, gender:string,mem_b structname:string, age:int, gender:string ) row format delimitedfields terminated by collection items terminated by ,; -- 加载数据 load data local inpath /opt/hive_data/infos into table groups; -- 查询数据 select * from groups; -- 获取成员a的信息 select mem_a from groups; -- 获取成员a的名字 select mem_a.name from groups;运算符和函数 概述 在Hive中提供了非常丰富的运算符和函数用于对数据进行处理和分析。在Hive中运算符和函数可以归为一类 如果需要查看Hive中所有的函数可以通过 show functions;如果想要查看某一个函数的描述可以使用 -- 简略描述 desc function sum; -- 详细描述 desc function extended sum;在Hive中还允许用户自定义函数 在Hive中函数必须结合其他的关键字来构成语句 入门案例 案例一给定字符串表示日期例如’2024-03-25’从获取年份 -- 方式一以-拆分字符串获取数组的第一位将字符串转化为整数类型 select cast(split(2024-03-25, -)[0] as int); -- 方式二正则表达式-捕获组 select cast(regexp_extract(2024-03-25, (.*)-(.*)-(.*), 1) as int); -- 方式三提供了year函数直接用于提取年份要求年月日之间必须用-隔开 select year(2024-03-25);案例一给定字符串表示日期例如’2024/03/25’从获取年份 -- 方式一 select cast(split(2024/03/25, /)[0] as int); -- 方式二 select cast(regexp_extract(2024/03/25, (.*)/(.*)/(.*), 1) as int); -- 方式三先将/替换为-再利用year函数来提取 select year(regexp_replace(2024/03/25, /, -));常用函数 nvl函数 nvl(v1, v2)判断v1的值是否为null如果v1的值不是null那么返回v1如果v1的值是null那么返回v2 案例 原始数据 1 Adair 800 2 David 600 3 Danny 1000 4 Ben 500 5 Grace 6 Cathy 700 7 Kite 8 Will 600 9 Thomas 800 10 Tony 1000案例 -- 建表 create table rewards (id int,name string,reward double ) row format delimited fields terminated by ; -- 加载数据 load data local inpath /opt/hive_data/rewards into table rewards; -- 查询数据 select * from rewards; -- 计算每一个人平均发到的奖金是多少 -- avg属于聚合函数所有的聚合函数在遇到null的时候自动跳过不计算 -- select avg(reward) from rewards; select avg(if(reward is not null, reward, 0.0)) from rewards; -- nvl select avg(nvl(reward, 0)) from rewards;case-when函数 类似于Java中的switch-case结构是对不同的情况进行选择 案例 原始数据 1 bob 财务 男 2 bruce 技术 男 3 cindy 技术 女 4 david 财务 男 5 eden 财务 男 6 frank 财务 男 7 grace 技术 女 8 henry 技术 男 9 iran 技术 男 10 jane 财务 女 11 kathy 财务 女 12 lily 技术 女案例 -- 建表 create table employers (id int,name string,department string,gender string ) row format delimited fields terminated by ; -- 加载数据 load data local inpath /opt/hive_data/employers into table employers; -- 查询数据 select * from employers; -- 需求统计每一个部门的男生和女生人数 -- 方式一sum(if()) select department as 部门,sum(if(gender 男, 1, 0)) as 男,sum(if(gender 女, 1, 0)) as 女 from employers group by department; -- 方式sum(case-when) select department as 部门,sum(case gender when 男 then 1 else 0 end) as 男,sum(case gender when 女 then 1 else 0 end) as 女 from employers group by department;explode函数 explode在使用的时候需要传入一个数组或者是映射类型的参数。如果传入的是数组那么会将数组中的每一个元素拆分成单独的一行构成一列数据如果传入的是映射那么会将映射的键和值拆分成两列 案例单词统计 -- 创建目录 dfs -mkdir /words -- 将文件复制到这个目录下 dfs -cp /txt/words.txt /words -- 查看数据 dfs -ls /words -- 建表 -- 注意数据在HDFS上已经存在所以应该建立外部表 create external table words (line arraystring ) row format delimitedcollection items terminated by location /words; -- 查询数据 select * from words; -- 需求统计这个文件中每一个单词出现的次数 -- 思路 -- 第一步先将数组中的元素转成一列 select explode(line) from words; -- 第二步统计单词出现的次数 -- 基本结构select x, count(x) from tableName group by x; select w, count(w) from (select explode(line) as w from words ) t1 group by w;列转行 列转行顾名思义指的是将一列的数据拆分成多行数据。在列转行的过程中最重要的函数就是explode 案例 原始数据 沙丘2 剧情/动作/科幻/冒险 被我弄丢的你 剧情/爱情 堡垒 剧情/悬疑/历史 热辣滚烫 剧情/喜剧 新威龙杀阵 动作/惊悚 周处除三害 动作/犯罪案例 -- 建表 create table movies (name string, -- 电影名kinds arraystring -- 电影类型 ) row format delimitedfields terminated by collection items terminated by /; -- 加载数据 load data local inpath /opt/hive_data/movies into table movies; -- 查询数据 select * from movies; -- 需求查询所有的动作片 -- lateral view function(ex) tableAlias as colAlias -- 列转行又称之为炸列 select name, k from movies lateral view explode(kinds) ks as k where k 动作;案例二 原始数据 bob 开朗,活泼 打游戏,打篮球 david 开朗,幽默 看电影,打游戏 lucy 大方,开朗 看电影,听音乐 jack 内向,大方 听音乐,打游戏案例 -- 建表 create table persons (name string, -- 姓名characters arraystring, -- 性格hobbies arraystring -- 爱好 ) row format delimitedfields terminated by \tcollection items terminated by ,; -- 加载数据 load data local inpath /opt/hive_data/persons into table persons; -- 查询数据 select * from persons; -- 获取性格开朗且喜欢打游戏的人 select name, c, h from personslateral view explode(characters) cs as clateral view explode(hobbies) hs as h where c 开朗and h 打游戏;行转列 行转列将多行的数据合并成一列 案例 select * from students_tmp; -- 将同年级同班级的学生放到一起 -- collect_list和collect_set将数据合并到一个数组中 -- 不同的地方在于collect_list允许有重复数据但是collect_set不允许元素重复 -- concat_ws(符号元素)表示将后边的元素之间用指定的符号进行拼接拼接成一个字符串 select grade as 年级,class as 班级,concat_ws(, , collect_list(name)) as 学生 from students_tmp group by grade, class;分类 除了窗口函数以外将其他的函数分为了3类UDF、UDAF和UDTF函数UDFUser Defined Function用户定义函数特点是一进一出即用户输入一行数据会获取到一行结果例如yearsplitconcat_wsregexp_replaceregexp_extract等UDAFUser Defined Aggregation Function用户定义聚合函数特点是多进一出即用户输入多行数据会获取到一行结果例如sumavgcountmax mincollect_listcollect_set等UDTFUser Defined Table-generated Function用户定义表生成函数特点是一进多出即用户输入一行数据能够获取到多行结果例如explodeinline、stack等在Hive中大部分函数都是UDF函数 自定义函数 自定义UDF需要定义一个类Hive1.x和Hive2.x继承UDF类但是Hive3.xUDF类已经过时所以需要继承GenericUDF 自定义UDTF需要定义一个类继承GenericUDTF 打成jar包然后上传到HDFS上 在Hive中创建函数 -- 基本语法 create function 函数名as 包名.类名using jar 在HDFS上的存储路径; -- UDF create function indexOfas com.fesco.AuthUDFusing jar hdfs://hadoop01:9000/F_Hive-1.0-SNAPSHOT.jar; -- UDTF create function splitLineas com.fesco.AuthUDTFusing jar hdfs://hadoop01:9000/F_Hive-1.0-SNAPSHOT.jar;-- 测试 select indexOf(welcome, m); select splitLine(welcome to big data, );删除函数 drop function indexOf;窗口函数 概述 窗口函数又称之为开窗函数用于限定要处理的数据范围 基本语法结构 分析函数 over(partition by 字段 order by 字段 [desc/asc] rows between 起始范围 and 结束范围)partition by对数据进行分类 order by对数据进行排序 rows between x and y指定数据的处理范围 关键字解释preceding向前following向后unbounded无边界current row当前行 示例假设当前处理的第5行数据 2 preceding and current row处理前两行到当前行。即处理第3~5行的数据current row and 3 following处理当前行以及向后3行。即处理第5~8行的数据unbounded preceding and current row从第一行到当前行current row and unbounded following从当前行到最后一行 分析函数大致可以分为三组 聚合函数例如sumavg等移位函数包含lagleadntil排序函数包含row_numberrankdense_rank 案例 原始数据 jack,2017-01-01,10 tony,2017-01-02,15 jack,2017-02-03,23 tony,2017-01-04,29 jack,2017-01-05,46 jack,2017-04-06,42 tony,2017-01-07,50 jack,2017-01-08,55 mart,2017-04-08,62 mart,2017-04-09,68 neil,2017-05-10,12 mart,2017-04-11,75 neil,2017-06-12,80 mart,2017-04-13,94建表 -- 建表 create table orders (name string,order_date string,cost int ) row format delimited fields terminated by ,; -- 加载数据 load data local inpath /opt/hive_data/orders into table orders;需求一查询每一位顾客的消费明细以及到消费日期为止的总消费金额 -- 思路 -- 1. 拆寻每一位顾客的信息那么需要按照顾客姓名来分类 -- 2. 按照日期将订单进行排序 -- 3. 计算总消费金额所以需要求和 -- 4. 到当前消费日期为止的金额也就意味着是获取从第一行到当前行的数据来处理 select *,sum(cost) over (partition by name order by order_date rows between unbounded preceding and current row ) as total_cost from orders;分析函数 聚合函数例如sumavgmaxmin等移位函数 lag(colName, n)以当前行为基础来处理第前n行的数据lead(colName, n)以当前行为基础来处理第后n行的数据ntile(n)要求数据必须有序将有序的数据依次放入n个桶中保证每个桶中的数据几乎一致相差最多不超过1个 排序函数 row_number数据排序之后按顺序给数据进行编号即使数据相同也是给定不同的编号rank数据排序之后按顺序给数据进行编号如果数据相同则给定相同的序号会产生空位dense_rank数据排序之后按顺序给数据进行编号如果数据相同则给定相同的序号但是不会产生空位 移位函数案例 需求二查询每一位顾客的消费明细以及上一次的消费时间 select *,lag(order_date, 1) over (partition by name order by order_date) as last_order_date from orders;需求三查询最早进店消费的前20%的顾客信息 select * from (select *,ntile(5) over (order by order_date) as nfrom orders ) t1 where n 1;排序函数案例 原始数据 Bob Chinese 85 Alex Chinese 76 Bill Chinese 78 David Chinese 92 Jack Chinese 69 Lucy Chinese 74 LiLy Chinese 78 Bob Maths 91 Alex Maths 82 Bill Maths 69 David Maths 60 Jack Maths 69 Lucy Maths 71 LiLy Maths 82 Bob English 60 Alex English 62 Bill English 85 David English 85 Jack English 69 Lucy English 78 LiLy English 93案例 -- 建表 create table scores (name string,subject string,score int ) row format delimited fields terminated by ; -- 加载数据 load data local inpath /opt/hive_data/scores into table scores; -- 查询数据 select * from scores tablesample (5 rows); -- 按科目对成绩进行降序排序 select *,row_number() over (partition by subject order by score desc) as rn,rank() over (partition by subject order by score desc) as ra,dense_rank() over (partition by subject order by score desc) as dr from scores; -- 获取各科目前三名的信息 select * from (select *, rank() over (partition by subject order by score desc) as n from scores ) t where n 3;补充正则捕获组 概述 在正则表达式中将()括起来的部分称之为捕获组此时可以将捕获组看作是一个整体 在正则表达式中默认会对捕获组进行编号编号是从1开始的。编号的计算是从捕获组左半边括号出现的顺序来依次计算的 例如(AB(C(D)E)F(G)) 1 AB(C(D)E)F(G) 2 C(D)E 3 D 4 G在正则表达式中可以通过\n的形式来引用对应编号的捕获组。例如\1表示引用编号为1的捕获组
http://www.pierceye.com/news/606761/

相关文章:

  • 网站销售方案英文淘宝网站建设
  • wordpress双语网站微信二次开发
  • 公司的网站建设做什么费用尚海整装公司电话
  • 贵阳市建设厅官方网站官方网站开发需要几个技术人员
  • 电子政务网站模版科学规划网页的做法是
  • 昆明网站建设猫咪科技抚州网站建设
  • 山东网站建设运行工资做的很漂亮的网站
  • 网站免费源码大全无用下载淘宝支持做微交易网站吗
  • 常用网站推广方法石家庄营销网站建设价格
  • 网站界面设计的基本原则是什么论坛做视频网站
  • 学校网站总务建设怎么做网站流量竞品分析
  • 企业网站建设所需要的资料网站备案 icp备案
  • 商城类网站方案中国风 wordpress主题
  • 网站更换服务器教程南阳网站推广招聘
  • 海尔网站的建设目标四库一平台个人信息查询
  • 佛山市建设网站公司网站手机端和电脑端
  • 属于c2c的网站是重庆化工建设信息网站
  • 高端大气网站推荐网赌网站建设多少钱
  • 宁波网站关键词优化排名网站修改图片怎么做
  • 苏州网站建设案例购买网站域名
  • 自己做剧本网站重庆建设工业公司官网
  • 中国网站建设中心建网站和开发软件哪个难
  • 优化网站被百度屏阿里云网站备案核验单
  • 肇庆做网站哪家好河北建设工程信息网正规网站
  • 怎么做展示网站公司网站管理规定
  • 娄底网站制作备案号查询平台
  • 青岛网站排名方案优化的定义
  • 微网站开发外包杨浦做网站公司
  • 网站推广服务包括哪些个人简历网官网免费
  • 铜仁住房和城乡建设局网站安贞做网站公司