Hive
TankPush
这个作者很懒,什么都没留下…
展开
-
Hive的not in子查询引发的血案:子查询用in,结果正确;而not in 子查询结果必须key(id)中没有null值存在,最终结果才正确
------------------------------------------------- 子查询用in,结果正确;而not in 子查询结果必须key(id)中没有null值存在,最终结果才正确with a as ( select 1 as id, "a1" as name union all select 2 as id, "a2" as name union all select 3 as id, "a3" as name ),b as( selec原创 2020-06-20 22:47:27 · 456 阅读 · 0 评论 -
Hive中inline(array(struct))直接解析struct结构中的内容
从struct 类型的 named_struct_1字段 解析其中内容:page_id, page_name, log_datecreate table tmp_user_scan_info_struct_mid stored as orc asselect uid, named_struct('page_id', page_id, 'page_name', page_name, 'log_date', log_d原创 2020-05-17 04:51:50 · 2062 阅读 · 0 评论 -
Hive中String数据类型转Map类型(第一种:完整map结构的string类型转map类型;第二、三种:类似map结构的string类型转map类型,第三种需指定分隔符)
----------第一种 完整map结构的string类型: 查看原始表的表结构和数据 ------------hive> select * from test_map_1_to_string;uid string11 {"key1":"value1,key2":"value2"}2 {"key3":"value3,key4":"value4"}-------------------------------- 错误 HiveSQL ---------------------------原创 2020-05-16 19:30:30 · 3491 阅读 · 0 评论 -
Hive自带函数和配置参数(更新中,对Hive函数或具体实现有疑问处可留言)
create_union原创 2020-05-16 17:42:55 · 219 阅读 · 0 评论 -
Hive实现:1、获取每个人最高分对应的学科和分数(学生最高分);2、获取每门课程都高于平均分的人、课程和分数(三好学生:每科高于平均分);3、获取每个学科都及格(即不低于60分)的学生
数据表和需求表名:student, 结构和具体内容如下:name course scorezs Math 100zs Engl 80ls Math 90ls Engl 70需求如下:1、获取每个人最高分对应的学科和分数(方式一:使用row_number()开窗函数;方式二:不用开窗函数,使用join方式)2、获取每门课程都高于平均分的人、课程和分数数据准备set hive.exec.mode.local.auto=true;set hive.c原创 2020-05-16 14:42:42 · 4161 阅读 · 0 评论 -
Hive中Map数据类型转String类型,其中具体内容不变
--上传测试数据drop table test_map_1;create table test_map_1 asselect 1 as uid, map("key1", "value1","key2", "value2") as map1 union all select 2 as uid, map("key3", "value3","key4", "value4") as map1;--查看当前测试表结构是否是map<string,string>类型hive> desc t原创 2020-05-13 17:25:21 · 12297 阅读 · 0 评论 -
Hive sql 任意N天中有M天登录,如 任意7天达到3天登录
使用HiveSQL实现 任意N天中有M天登录的需求:具体举例,***任意7天达到3天登录***可以翻译为:当前次登录时间 与 第3次登陆的时间 的差值在7天内WITH user_info as(select 1 as user_id, '2020-01-01' as log_date union allselect 1 as user_id, '2020-01-02' as log_date union allselect 1 as user_id, '2020-01-03' as log_dat原创 2020-05-13 16:58:30 · 832 阅读 · 0 评论 -
多字段同时列转多行(Hive版),即多字段,对应应的位置连接 (如 a-b 1-2 =>列转行后为两行,分别为 a-1,b-2) 注意:posexplode比 explode多返回一个pos
查询sql:select tmp.*, t1.t1_sku_id, t2.t2_order_numfrom( select 1 as uid, 'a,b,c' as sku_id, '10,20,30' as order_num union all select 2 as uid, 'a,b,c,d' as sku_id, '10,20,30,40' as order_num)tmplateral view outer posexplode( spl原创 2020-05-13 15:10:43 · 474 阅读 · 0 评论 -
使用HiveSQL实现开始到结束日期之间的所有日期
查询1:set hive.exec.mode.local.auto=true; --开启本地模式set hive.cli.print.header=true; --打印表.列名select tmp.*, t.*, date_add(start_date, pos) as mid_datefrom( select '1' as uid, '2020-01-01' as start_date, '2020-01-05' as end_date原创 2020-05-13 14:40:52 · 4191 阅读 · 0 评论