- 博客(77)
- 资源 (1)
- 收藏
- 关注
原创 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
331
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
1623
原创 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
445
原创 hive-join的执行计划观察
看下join的执行过程,还是看explain计划。sql代码如下:explainselect t1.prov_id ,t2.deepfrom ( select prov_id ,deep from dim.dim_city where prov_id = 110000 ) t1join ( selec
2022-02-13 17:22:37
586
原创 读懂简单的hive执行计划-explain计划
对于简单的hivesql,看懂执行计划能细致的知道怎么优化对于如下这一段简单的sql,看下explain出来的内容select prov_id ,deep ,count(1) as numfrom dim.dim_citywhere prov_id = 110000and deep = 1group by prov_id ,deep;执行计划//描述任务之间的依赖关系STAGE DEPENDENCIES:S
2022-02-13 16:16:23
564
原创 hive高级分组聚合grouping sets,cube,rollup
日常使用较少,主要记录grouping sets,cube,rollup这三个分组聚合。首先,使用高级分组聚合的语法时,要注意hive是否开启了向量模式。set hive.verctorized.execution.enabled = true;1、grouping setsselect prov_id ,deep ,count(1) as numfrom dim.dim_citywhere p...
2022-02-13 15:13:53
880
原创 flink-streaming消费kafka动态分区写入HDFS(SequenceFile)文件
主要记录下streaming模式下动态分区怎么写文件,sql模式直接写就是了,streaming模式需要自己写下分区方法。大致的数据流程是消费kafka,拆解json,数据写到hdfs(sequenceFile)路径。1、分区需要自定义,这里是读取流数据,获取分区字段package partitionassigner;import org.apache.flink.api.java.tuple.Tuple2;import org.apache.flink.core.io.S...
2022-01-09 10:59:06
1085
原创 大数据之路-看书总结
很早就看过一点,看的不连续,今天专门花时间完整看一遍总结下这本书里自己关注的知识点和自己的一些思考,算是读书笔记吧。2.2.1页面事件 1、这里说到页面型日志上报的时候,进入页面和离开页面成对使用和上报以解决使用时长问题。个人记录:这个策略很好,成对上报进入页面也记录下,使用方便,要不还要再处理数据2、页面透传阿里是通过spm实现,用户行为路径轻松实现个人记录:spm现在互联网公司用的比较全面了,但是一般在使用上并不轻松,往往需要做数据打平的工作,在没有...
2021-12-26 17:53:43
1019
原创 excel实现分组合并后居中
帮一个前同事搞一个分组合并居中,还是查了半天,记录下一、前后效果对比二、操作步骤1、选中A列,分类汇总2、选中A2-A21,ctrl+g定位条件,选空值,然后写=A1,ctrl+enter,然后点退回键,删除刚才条件里面的数据,然后直接点合并后居中3、 然后筛选删除刚才新加的这一行,就删除第一列有值的就好4、最后一步选中第一列的空白区域,点格式刷,然后选中第二列,再删除第一列就行了...
2021-12-11 18:26:06
1800
原创 flink实时生产维度表
十一之前写了个实时的维表,flink-sql实现的,技术上并不难,之前没写过,还是踩了一些坑的,特此总结下一、需求背景1、离线有个用户的维度表,需要搬到流上面,大概是1000万的存量数据,上游来自8个mysql表2、可用的组件有kafka,flink,hbase,redis3、8个表每个变更都需要下发一条完整的记录到kafka二、任务思路1、首先要想好写几个Hbase维表,业务上主键要想清楚,这是每次关联都需要的,比如,这个用户维度表主键是用户id,但是可能还会有身份证id啥的做关联
2021-10-07 22:57:07
1095
原创 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
195
原创 数仓面试总结
2021年5月开始找工作,面试了若干个数仓的岗位,面的差不多也就2个,总结下大致的面试内容一、字节视频面,上海的一个部门,视频面挂,小伙伴内推的 这个5月份面的,大概视频面试了一个小时,主要面试内容 1、问了mapreduce的具体执行过程,这位面试官还问到了执行计划的东西,就是explain sql代码的东西,这个我基本都不会 2、数仓分层的东西,就大致讲了下分几层还有主题的划分 3、因为我现在做了一些flink的东西,问了一点流的东西 4、做了1个sql的题目...
2021-07-08 16:55:12
3937
原创 数仓面试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
890
原创 kafka基础学习一
工作中经常会使用kafka,但是没有系统性的了解,看个课程记录下知识点。第三章:kafka架构深入3.1 kafka工作流程及文件存储机制1、kafka中消息是以topic进行分类的,生产者生产消息,消费者消费消息,都是面向topic的。2、往kafka中发消息时,如果topic不存在,会默认创建,默认1个leader,1个follower3、kafka的副本数包含leader这1个;leader和follower肯定不会在一个机器上4、每个分区维护自己的局部的偏移量,follo
2021-03-21 21:02:30
715
2
原创 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
364
原创 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
428
原创 flink-streaming实战-json数组解析
之前实际开发都是用的blink-sql模式,还没实际开发过streaming模式的作业,有个简单的例子,特意记录下因为下游我们是odps,目前没有jar包,这个之后调通了再加上作业描述: 上游是kafka,原始数据格式为json数组,输出为json对象,本地日志打印输出,source连接参照阿里云的例子package com.alibaba.blink.datastreaming;import com.google.gson.JsonArray;import com.goog...
2021-02-17 21:01:15
5682
1
原创 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
474
原创 flink-java版学习-6-reduce聚合
reduce聚合操作和hive的map-reduce框架中的reduce操作类似个人理解:keyBy+Max这种算子和reduce算子的区别在于,reduce可以多字段聚合,前者只能单字段reduce通过滚动计算取得当前最大值由于之前数据集有时间乱序,出来的结果不够直观,这里调整下数据集sensor_1,1547718200,34.8sensor_1,1547718288,34.8sensor_1,1547719200,37.8sensor_1,1547719280,39.8sen
2021-01-23 23:33:01
876
2
原创 flink-java版学习-5-keyBy+max/min等聚合函数
keyBy:将Stream根据指定的Key进行分区,是根据key的散列值进行分区的(和sql的group by类似)max:对数据聚合,取最大值,非聚合字段,返回的是第一次的值maxBy:和max类似,但是在非聚合字段返回的是当前最大值package com.shihuo.apitest_transform;import com.shihuo.com.shihuo.apitest_beans.SensrReading;import org.apache.flink.api.common.
2021-01-18 00:27:38
1362
原创 flink-java版学习-4-transform算子之map/flatmap/filter算子
1、数据集都是本地数据集,3个算子一起测试 map:个人理解就是1对1的输出,比如我传一个字符串,可以返回字符串的长度 flatmap:1对多的输出,传1个字符串,可以分割为3个字符串,但是流还是一个流(跟hive对比,就很像LATERAL VIEW这种函数,一个输入,多行输出,udtf) filter:就是过滤,返回满足条件的(对应sql的where条件)2、代码示例:package com.shihuo.apitest_transform;...
2021-01-17 23:55:40
1399
原创 flink-java版学习-3-kafka
flink的source使用比较多的是kafka,本地测试连接公司的集群没有成功,先记录下package com.shihuo.apitest_source;import org.apache.flink.api.common.serialization.SimpleStringSchema;import org.apache.flink.streaming.api.datastream.DataStream;import org.apache.flink.streaming.api....
2021-01-17 23:41:14
475
原创 flink-java版学习-2-source连接之本地文件
flink本地测试大多数时候读的都是本地的数据集,记录下:1、本地的sensor.txt文件sensor_1,1547718200,35.8sensor_1,1547719200,37.8sensor_1,1547718280,34.8sensor_6,1547718201,35.5sensor_7,1547718214,35.3sensor_10,1547718234,15.8sensor_1,1547718289,55.82、读取代码如下,之后会频繁的用这个形式:...
2021-01-17 23:37:54
444
原创 flink-java版学习-1-本地批处理和流处理
之前学习了java基础知识,也忘记的差不多了,日常工作还是天天写sql,不写就是不行,还是跟着项目多写写,也学习下flink。 学习主要参照尚硅谷的教程,https://www.bilibili.com/video/BV1qy4y1q728?p=7,感谢尚硅谷的免费课程,有上海的周末培训班就好了,感谢B站。1、首先,需要配置pom文件,我抄来的<?xml version="1.0" encoding="UTF-8"?><project xmlns="ht...
2020-12-27 23:43:11
831
原创 hive-UDF-计算某个标记值的数量;ab值检测
1、主要是计算某个字段值里面的标记值,比如某个字符串有多少个逗号package udf;import com.aliyun.odps.udf.UDF;public class MarkCount extends UDF{ public Long evaluate(String text,String sub){ int count =0, start =0; while((start=text.indexOf(sub,start))>=0){
2020-12-13 19:50:36
500
原创 hive删除字母组成的分区
删除所有分区,但是不删除表结构:alter table bigdata2c.dim_trd_supplier drop if exists partition(business rlike '^[\u4e00-\u9fa5_a-zA-Z0-9]+$');
2020-12-09 10:45:53
137
原创 hive用户标签体系的任务怎么写
背景: 最近有接到业务上的这么个需求,每天计算圈定用户的一些标签,同时把新增和移除标签的信息及当前用户的信息发给下游,举例: 这个用户昨日新增了tag3和tag2这个标签,同时当前codes也是这2个任务设计:首先,存储每天的全量的计算结果,因为新增和减少都需要和之前的数据作比较才知道,同时全部的codes用全量的结果然后,用昨天的数据和前天的数据full join下,这样形成一个新增和减少的关系表最后,按照指定格式取出来新增和减少的code及当前的codes...
2020-12-03 03:25:05
568
原创 order by改分组排序
工作中同事有时候会需要随机排序,同事会全局写个order by rand(),然后几十亿的数据就会比较慢。然后会这么改下。先随机分组下,再排序,随机效果应该差不多distribute by floor(randbetween(1,10001)) sort by RAND();...
2020-12-03 03:09:26
406
原创 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
827
原创 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
1891
原创 excel实现简单sql规律化代码生成
工作中有时候需要规律化生成sql语句,主要是字段信息上,比如规律化的拆解字段,一个一个写实在是慢,用excel函数规律化生成下。实例:如果我是知道这些字段的,比如有个建表语句,黏贴到excel,没有自动分列的自动分列下:然后:第一列函数操作下:=",json_value(message,'$."&B1&"') as "&B1就有了这个效果:当然,如果使用场景多了也可以写个小程序每次按照这个规律处理下,偶尔使用下excel效率还行...
2020-08-17 23:43:34
291
原创 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
10947
原创 阿里云数据读取做桑基图
主要自己做个记录吧,流程:pyodps读取数据源-->pandas-->pyecharts;每天调度会计算好数据落到odps,这边再加个自动发送就好了。桑基图个人觉得某些场景还是蛮适合的,图像的表征能力还是很强的。画图部分主要参考了这个https://blog.csdn.net/akenseren/article/details/103416477,中间细节部分还是看了下官方文档。# -*- coding: utf-8 -*-import pandas as pdfrom py
2020-08-03 22:23:04
641
原创 基于pyodps读本地文件上传到odps
本地文件有传输到odps的需要,虽然阿里云dataworks有这样的操作界面,但是文件内容有个逗号啥的就会有问题,所以专门写个脚本处理这一步。处理逻辑: pandas_read_csv ---->pyodps的dataframe------>odps代码如下,简单方便:# -*- coding: utf-8 -*-import pandas as pdfrom odps import ODPSfrom odps.df import Dat...
2020-08-03 20:56:44
2513
原创 用finereport做一个大屏
大屏在公司越来越常见了,我认为最大的作用还是更及时的发现生产过程中的问题,大屏的选择有很多,比如公司的前端可以自己开发下,或者用报表软件开发,tableau或者帆软都行,还有直接购买外面成熟的大屏产品,比如阿里云的datav。我们公司是买的帆软,report也可以实现这一功能,就用这个做了。一、数据源问题 先说下数据源的问题,互联网公司有一定规模,实现实时数据监控...
2020-03-22 23:35:51
6617
2
原创 用户性别预测
一、背景 公司的注册信息里没有用户性别这一项,但是我们的场景算是电商,如果知道用户的性别,对用户的商品推荐及排序都会比较重要,产品体验会更好二、大致思路 参考现有的数据,一种是用户的维度数据,比如用户使用的手机型号,用户装的app(会有很多维的数据),用户是不是活动来的(我们平台的拉新活动),另一种是用户在app上的行为,比如用户浏览的商品的价格,用户选择的尺码,用...
2020-02-21 22:13:18
3973
原创 hive正常数据转化为json数组
工作中,大多数时候会需要把json数组中的数据解析出来,现在会经常和后端打交道,后端同学就希望把正常的行列数据用json的形式给他们,他们使用起来方便,我看有的文章会写用udtf函数实现,不过本着能用内置函数绝不用自定义函数的原则(主要是我不会写),用内置函数实现也不是很难。 原数据形式: 希望转换成一个标准的json数组,{ 下装款型: ...
2019-10-27 13:11:47
12910
原创 impala--NDV()函数
使用impala查询引擎的时候,如果count(disticnt column)数据量过大会报错,报错内容正在提取遇到以下错误的结果:org.apache.hive.service.cli.HiveSQLException: AnalysisException: all DISTINCT aggregate functions need to have the same set of pa...
2019-09-20 21:01:32
11028
原创 计一次失败的python-udf处理PHP反序列化数据
问题背景:公司后端用的是php,后端开发爸爸存数据的时候存的是php反序列化的数据,我们数据这边需要用到这些字段的信息,想着自己处理一下。 所在环境:大数据平台使用的是阿里云的dataworks,直接函数处理是不行的,需要写个UDF,这边支持java和python的UDF,由于自己的java实在太差,所以搞不定,然后想用python处理下,由于之前写过pytho...
2019-09-08 13:34:47
326
原创 数据仓库之拉链表实现
拉链表在实际工作中还是有使用的必要,能够大量的节省存储空间,我这次主要使用在商户信息构建,商户姓名存在改名字的可能性,但是商户id不变,下面是一个商户信息表做拉链表的例子。主要构建思路:1、首先,找到记录最早一天的商户信息作为初始状态,写入到最后使用的表中 2、然后把改名字的商户的结束日期修改下 + 每日新增的商户信息 + 改名字之后新的商户...
2019-07-22 20:36:07
1982
hive查询优化
2018-10-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人