![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
hive
huobumingbai1234
路漫漫其修远兮,吾将上下而求索
展开
-
hiveudf-app版本转统一长度的数值
客户端上报的日志数据一般都会记录app版本,基本会有如下这种规范实际客户端版本普遍是4位左右,比如8.1.1.0这种形式,数字+小数点,这个版本对比版本大小很不方便,需要统一长度。实现不管各种格式都统一结果的长度,8.1.1 -> 8010100; 8.1 -> 8010000; 8.134.5.55.6 - >8120555; 10.02.00.1 -> 10020001;兼容主版本是1位和2位的情况。一、指定长度判断限定死客户端的版本是4位,对4位各自判断二、对后3位循环判断,然后再加上第一位,需原创 2022-06-01 18:30:30 · 317 阅读 · 3 评论 -
hive-udf jsonObject移除一系列key值
json对象里面可能有100个k-v,移除50个,保留50个import com.google.gson.Gson;import com.google.gson.JsonObject;import com.google.gson.JsonParser;import org.apache.hadoop.hive.ql.exec.UDF;public class JsonObjectRemove extends UDF { public String evaluate(String i原创 2022-02-15 16:16:55 · 1575 阅读 · 0 评论 -
hive group by和distinct性能完全一致
先说结论,两者没有区别,先看执行计划1、group byexplainselect prov_idfrom dim.dim_citygroup by prov_id;STAGE DEPENDENCIES:Stage-1 is a root stageStage-0 depends on stages: Stage-1STAGE PLANS:Stage: Stage-1Map ReduceMap Operator Tree:TableScanalias原创 2022-02-13 18:19:00 · 434 阅读 · 0 评论 -
hive实现id1_id2,id3_id4对应的实际值对应关系;370000_450000,440000_130000,450000_440000 ---> 陕西_拉萨,郑州_四川,拉萨_郑州
同事问了这么个问题:370000_450000,440000_130000,450000_440000 这么一组城市id怎么转换成实际的城市名称对应关系,有一个维表会维护对应的关系。记录下这个怎么写:select concat_ws(',',collect_list(concat(t2.col2,"_",t3.col2))) as result ,t1.col1 ,concat_ws(',',collect_list(t1.col0)) as ttfrom (原创 2021-08-18 09:49:56 · 191 阅读 · 0 评论 -
数仓面试sql题目-hive-sql
题目1:有表table1,里面有2列,列a和列b,对应社区相互关注的用户,怎么找到相互关注的一组用户答:select a ,bfrom ( select a ,b from table1 union all select b ,a from table1 ) t1group by a ,bhaving count(1) > 1;题目2:...原创 2021-06-09 16:39:31 · 865 阅读 · 0 评论 -
hive编程指南-个人不会的知识点记录
买这本书没有认真看完过,重新看下,记录下自己不会或者之前不用且模棱两可的知识点。第三章:数据类型3.1 hive的基本数据类型,是对java数据类型的实现,在hive中,如果是float和double数据类型比较,hive会隐式把float转换成double,即向上取3.2 集合数据类型,struct、map、array三种集合数据类型 struct:与c语音的struct或者"对象,{"col1":"a","col2":123}: 主要函数:1、struct 2、...原创 2021-03-09 00:21:03 · 363 阅读 · 0 评论 -
hive-维表关联,维表层级id不确定情况
问题描述:事实表存储的类目id不确定是几级id;一共有三级类目,需要把类目信息维护进事实表,比如记录的是二级类目id,需要把一级类目数据维护进事实表。一开始没有想到怎么搞,还是想了一会儿想了这么个处理方法:ods_classify原始业务库表,id就是各级的类目id,pid就是上一层级的类目id,dim_classify是事先处理好的一二三级类目表select t1.id ,t4.third_id ,t4.third_title ,case when t原创 2021-03-08 22:27:28 · 424 阅读 · 0 评论 -
hiveUDF-json对象新加一行数据
需求内容,json对象需要新加一行数据{"a":1} -> {"a":1,"b",2}这个可以通过sql拼接进来,感觉不太严谨,如果有嵌套的json对象,可能识别会有问题,新写了一个函数。我使用了GSON这个类package udf;import com.aliyun.odps.udf.UDF;import com.google.gson.*;public class JsonAdd extends UDF{ public String evaluate(Strin原创 2021-02-17 20:52:07 · 440 阅读 · 0 评论 -
order by改分组排序
工作中同事有时候会需要随机排序,同事会全局写个order by rand(),然后几十亿的数据就会比较慢。然后会这么改下。先随机分组下,再排序,随机效果应该差不多distribute by floor(randbetween(1,10001)) sort by RAND();...原创 2020-12-03 03:09:26 · 401 阅读 · 0 评论 -
json数组解析
工作中会有这样的数据类型,需要规则化的解析出来方便下游使用解析如下:select crawler_data_time ,nav ,model ,author_id ,nick_name ,follower_num ,create_time ,get_json_object(concat('{',report_1,'}'),'$.distribution_key') as distribution_key ,get_json_object(concat('.原创 2020-10-18 14:56:47 · 820 阅读 · 0 评论 -
hive-udf正常数据转化为json形式(二)
之前都是手动拼字符串写的,优点是灵活,缺点也很明显,容易出错。下面提供一种udf的形式:package udf;import com.aliyun.odps.udf.UDF;public class TableBulidJson extends UDF { public String evaluate(String ... params) { if (params == null || params.length == 0 || params.length % 2原创 2020-10-08 19:34:34 · 1875 阅读 · 0 评论 -
named_struct类型怎么用
今天用到了named_struct类型,主要用这个函数做json拼接select named_struct( '"supplier_sku_id"',supplier_sku_id, '"supplier_id"',t1.supplier_id, '"prefee_rate"',prefee_rate, '"order_rate"',order_rate, '"goRate"',go_rate, '"comple原创 2020-08-12 23:05:55 · 10831 阅读 · 0 评论 -
hive正常数据转化为json数组
工作中,大多数时候会需要把json数组中的数据解析出来,现在会经常和后端打交道,后端同学就希望把正常的行列数据用json的形式给他们,他们使用起来方便,我看有的文章会写用udtf函数实现,不过本着能用内置函数绝不用自定义函数的原则(主要是我不会写),用内置函数实现也不是很难。 原数据形式: 希望转换成一个标准的json数组,{ 下装款型: ...原创 2019-10-27 13:11:47 · 12875 阅读 · 0 评论 -
计一次失败的python-udf处理PHP反序列化数据
问题背景:公司后端用的是php,后端开发爸爸存数据的时候存的是php反序列化的数据,我们数据这边需要用到这些字段的信息,想着自己处理一下。 所在环境:大数据平台使用的是阿里云的dataworks,直接函数处理是不行的,需要写个UDF,这边支持java和python的UDF,由于自己的java实在太差,所以搞不定,然后想用python处理下,由于之前写过pytho...原创 2019-09-08 13:34:47 · 319 阅读 · 0 评论 -
数据仓库之拉链表实现
拉链表在实际工作中还是有使用的必要,能够大量的节省存储空间,我这次主要使用在商户信息构建,商户姓名存在改名字的可能性,但是商户id不变,下面是一个商户信息表做拉链表的例子。主要构建思路:1、首先,找到记录最早一天的商户信息作为初始状态,写入到最后使用的表中 2、然后把改名字的商户的结束日期修改下 + 每日新增的商户信息 + 改名字之后新的商户...原创 2019-07-22 20:36:07 · 1976 阅读 · 0 评论 -
hive函数--多行数据转化成map类型
最近工作中向别的部门提供接口数据时有这样的需求将下面的表格形式的数据的后两列输出为map形式即这个形式:然后用这个函数处理:str_to_map(concat_ws(',',collect_set(concat_ws(':',a.寄件省份,cast(a.件量 as string))))) as 寄件省份件量分布...原创 2018-06-03 20:47:39 · 17879 阅读 · 1 评论 -
hive中count(*)、count(1)、count(某字段)的区别
最近看到某公司面试题有这个,顺便查了一下。count(*):所有行进行统计,包括NULL行count(1):所有行进行统计,包括NULL行count(column):对column中非Null进行统计我在集群找了一个表试了一下,结果差距不是很大,因为执行时间会受集群资源的影响,所以看下具体的执行步骤先看结果,count(*)执行时间26sselect count(*)from ods.baseo...原创 2018-06-15 16:34:41 · 40778 阅读 · 3 评论 -
HIVE-表操作基础知识
上一份工作对数据的时效性要求较高,且公司有较为完善的数据平台,所以hive没怎么写过,现在的新工作需要大量的用底层数据(仓库未搭建),物流行业的底层数据质量相对较差,需要做大量清洗工作,又重新学习了一下hive,大致的总结了一下。一、HIVE建表语句--中括号里面的都可以省略CREATE [EXTERNAL] table [IF NOT EXISTS] table name [(col_name ...原创 2018-06-29 20:26:46 · 636 阅读 · 0 评论 -
Dynamic partition strict mode requires at least one static partition column.
最近同事在向分区表插入数据的时候一直报这个错。提交的语句大致是:set hive.exec.dynamic.partition=true;set hive.exec.dynamic.partition.mode=nonstrict;insert overwrite table tmp.everyweek_marketdata partition (ds)select...fr...原创 2018-07-18 21:48:55 · 11054 阅读 · 5 评论 -
hive--支持in (select from ....)子查询的用法
hive支持 in 子查询的用法,不管in (1,2,3)这种具体数值,还是in (select ,,,from ,,)这种子查询的写法in (select .. from ..)使用报错主要有2方面的原因,一、版本问题:hive1.1版本是支持这种写法的,具体从哪个版本支持这种写法不是很清楚 可以在服务器上看hive的版本,进入hive环境,看到hive-commo...原创 2018-08-28 11:13:24 · 17001 阅读 · 8 评论 -
hive简单查询优化总结
hive作为hadoop系列的计算模型,在公司的数据清洗和报表开发广泛使用,合理的优化自己的语句结构可以节省计算时间,优化集群的计算资源,下面总结下日常工作中自己碰到的一些问题和别人总结的一些方法。我们先了解下关系型数据库sql的执行顺序,hive大致相同然后大致了解下hive的架构:具体策略:1、尽早的过滤数据,hive同样会先执行join,再执行w...原创 2018-10-20 20:18:25 · 2745 阅读 · 1 评论 -
json数组解析的两种形式-hive
单个json我们很容易的可以用get_json_object进行解析,json数组就需要用复杂的方式了1、可以用UDTF,这个是阿里云环境下小伙伴帮忙写的,但是这个不能和原数据进行关联,就是只能取这一个字段import com.aliyun.odps.udf.UDFException;import com.aliyun.odps.udf.UDTF;import com.aliyun....原创 2018-12-29 23:28:32 · 2288 阅读 · 0 评论 -
判断用户连续几天登录或者连续几天出单等
工作中清洗日志数据的时候有时候会有这样的场景,要看用户连续登陆的情况,或者商家连续有单,用户持续下单的数据,这时候可以写个UDF,如果嫌麻烦的可以参考以下sql,可以计算出用户连续登陆的天数,diff = 1就是连续登陆2天的,大于1就是连续登陆多天以上的。--假定数据形式是:dt(登录日期-yyyymmdd类型) uid(用户id) select uidfro...原创 2019-01-19 14:40:52 · 3873 阅读 · 2 评论 -
hive-严格查询模式下set hive.mapred.mode=strict,order by必须加limit有没有系统性能的提升
一、hive严格查询模式下使用order by必须加limit有系统性能的提升 我理解就是加个必填项,让返回的结果集少点,别的在map-reduce阶段,没有任何性能的提升,order by执行完才执行的limit; 书中看到这么一句话,强制用户增加这个limit语句可以防止reducer额外执行很长一段时间。 我在别的博客中有这样看到的说法-如下图,不...原创 2019-05-18 21:59:00 · 5290 阅读 · 1 评论 -
阿里云环境下纯sql构建日期维度表
一个完整的数据仓库,日期维度表是必不可少的,对于数据的多维度处理是一个很好的东西。现在的工作环境是阿里云,在这个环境下用纯sql构建了一个日期维度表,主要字段包含以下结果,后续农历日期将通过udf实现,再补充进来数据生产方案先借用调度系统的补数据方案补指定日期内的数据:主要字段包含以下数据:create table dim_date_data( `dt` bi...原创 2019-07-01 22:59:04 · 1525 阅读 · 0 评论 -
HUE--hive函数大全
日常工作常用的hive函数总结原创 2018-06-05 23:15:58 · 16393 阅读 · 2 评论