hive
¤睿
一叶知秋
展开
-
hive中distinct和group by 去重运行效率对比
hive中distinct和group by 去重运行效率对比。原创 2022-10-05 18:55:11 · 1993 阅读 · 1 评论 -
SemanticException Range based Window Frame can have only 1 Sort Key
selectsum(money) over(partition by id order by datekey,id)from table_test;在运行这个语句的时候报错Error while compiling statement: FAILED: SemanticException Range based Window Frame can have only 1 Sort Key解决方案显式窗口子句可能会解决错误:select sum(money) over (partition b原创 2021-07-01 15:00:19 · 783 阅读 · 0 评论 -
hive分区字段不支持timestamp类型
首先创建一个外部分区表(分区字段设置为时间类型(timestamp))辅助表test创建普通外部表create external table test(id string comment '账号',datekey timestamp comment '交易时间',name string comment '公司名称')location '/xx/lrz_test';create external table testa(id string comment '账号',dateke原创 2021-05-21 15:39:13 · 1075 阅读 · 0 评论 -
hive查看锁表以及解锁
今天在使用hive的时候发现insert overwrite table tablea,无法向里面插入数据,从而看了一下hive的解锁和查看锁表情况首先先看锁表情况show locks tablea;结果:tab_name modetablea SHARED得知tablea表已经锁住通过unlock table tablea进行解锁...原创 2021-05-09 15:38:24 · 5845 阅读 · 0 评论 -
hive实现wm_concat()
首先还是先说下wm_concat的函数定义wm_concat:通过id实现某个字段的拼接举一个例子来更清楚的展示wm_concat的作用效果例:现有table: tmp|id | name || 1 | yy || 1 | yw || 2 | tl || 3 | lo || 3 | ke |oracle sql:select id,wm_concat(name) namet from tmp group by id结果:|id | namet || 1 .原创 2021-04-29 23:25:30 · 4589 阅读 · 0 评论 -
hive系统时间减几天,但保留时分秒
先说思想hive只有date_sub()函数实现日期减去几天,但是如果还要求保留时分秒的话,这个函数不能满足需求。只能通过对date_sub()的结果再次处理方可得到含有时分秒的值,也就是在date_sub()函数后面拼接上当前日期的时分秒即可。select FROM_UNIXTIME(UNIX_TIMESTAMP(concat_ws('',date_sub(current_timestamp,1),substr(current_timestamp,11)),'yyyy-MM-dd HH:mm:s.原创 2021-04-26 20:07:07 · 2137 阅读 · 1 评论 -
hive如何将split切割后的结果转成列输出
首先创建一个测试表 test 将需求表明。 id name 1 yy,tl,dd 2 xy,dl,dz想要得到的结果是1 yy1 tl1 dd2 xy2 dl2 dz思路: 需要将name通过','进行切割(split),得到数组结果集,就需要考虑如何将这个数组和id如何输出,此时就要借助explode,而hive不支持explode的直接使用,还需要lateral view去实现。下面给出对应的sql语句:select a.id, b.ren原创 2021-03-05 17:56:35 · 1188 阅读 · 0 评论 -
hive实现日期相减
今天在看hive日期相减函数的时候只发现了,datediff(),date_sub(),date_add()等函数可查看此链接,却没有发现保留精确值的函数。而当发现unix_timestamp()函数就会感觉计算会很简单。通过时间戳(划算为秒)来计算保留日的精确值select abs((unix_timestamp('2021-01-28 00:00:00') - unix_timestamp('2021-01-29 12:00:00'))/(3600*24))描述:`unix_timestamp原创 2021-01-28 17:08:18 · 25345 阅读 · 0 评论 -
hive修改字段类型
alter table 表名 change column 原字段名 现字段名 字段类型原创 2020-12-30 14:50:40 · 19462 阅读 · 0 评论 -
hive实现regexp_substr()
首先需要清楚regexp_substr()的作用,先看官方解释REGEXP_SUBSTR通过允许您在字符串中搜索正则表达式模式来扩展功能的功能。它也与相似REGEXP_INSTR,但是它不返回子字符串的位置,而是返回子字符串本身。如果您需要匹配字符串的内容,而不是它在源字符串中的位置,则此功能很有用。该函数返回的字符串形式为VARCHAR2或,并且CLOB数据的字符集与相同source_char。接下来对函数中的各个参数进行说明:REGEXP_SUBSTR(source_char, pattern, p原创 2020-11-09 19:35:02 · 6893 阅读 · 0 评论 -
hive中时间类型1991-04-14 00:00:00.0无法显示
最近发现一条数据插入到hive当中的时候会自动转换为1991-04-14 01:00:00.0最开始以为是字段类型的原因尝试了date、timestamp类型,date类型虽然可以显示成1991-04-14但是导出到别的数据库(例如:oracle)中的时候任然会默认转换为1991-04-14 01:00:00.0。我又再次通过函数等方式进行测试还是不能成功。最终问题类型只能定义为hive底层逻辑问题,暂未得到处理。...原创 2020-10-28 20:34:29 · 608 阅读 · 1 评论 -
hive实现获取当前季度第一天
首先可以通过 (floor(substr(current_timestamp,6,2)/3.1)*3)+1 --获取的是本季度的月份例:select current_timestamp,(floor(substr(current_timestamp,6,2)/3.1)*3)+1输出: 2020-09-29 22:34:25.533 7然后通过拼接的方式实现,注意季度月份为1,4,7,10,拼接时需要进行判断。select concat(year(current原创 2020-09-30 10:32:35 · 6695 阅读 · 0 评论 -
hive中实现merge into
低版本的hive中又很多函数或者语句不支持使用,比如merge into就是一个。比如有两表表一:testtable1 包含以下字段: name project projectid grademath yearq monthq dayq表二:testtable2包含以下字段: name grade gradeid math chines原创 2020-09-29 15:23:02 · 6947 阅读 · 7 评论 -
Hive的Pivit和Unpivot实现
pivot转换SELECT uid, kv['c1'] AS c1, kv['c2'] AS c2, kv['c3'] AS c3FROM ( SELECT uid, map(key, value) kv FROM vtable GROUP BY uid) t-------------------------------------------------uid c1 c2 c3101 11 12 13102 21 22 23Unpivot转换SELECT转载 2020-09-18 16:54:17 · 2231 阅读 · 0 评论 -
hive常用时间日期函数
获取当前时间第一种获取方式select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss');可以通过修改时间格式('yyyy-MM-dd HH:mm:ss'),来调整输出结果比如:调成yyyy-MM-dd则只显示年月日,不显示时间。注:hive中yyyyMMdd其中一定要对应好字母的大小写关系,否则会报错。 ---------------------------------------------------------- 输出结果:.原创 2020-08-05 18:09:05 · 3489 阅读 · 0 评论