- 博客(68)
- 收藏
- 关注
原创 hvie日期维度表建设
last_day(date_sub(datestr,dayofmonth(datestr)-1)) month_end_date --当月最后一天。,concat(yearid,'年',monthid,'月',substr(datestr,9,2),'日') as date_name。,concat(yearid,'年第',quarterid,'季度') as quarter_cn_name。,concat(yearid,'年',monthid,'月') as monthstr。
2024-12-02 14:29:10
697
1
原创 字节电商-数仓面试
1.二叉树的广度优先,深度优先实现 2.如何评价数仓的好坏 3.通过上一问的几个方面如何给多个数仓打分-落地,量化 4.a,b,c三张表a join b on a.id=b.id join c on b.id=c.id有几个map-reduce 笔试: 1.连续登录问题:求连续登录5天以上的人 2.用户登录表,每次登录记录一条数据,登录时间精确到秒,求用户的登录总时长,如果两次登录时间超过三十分钟不作为连续登录,单条登录信息时间算0 3.微信红包 入参:红包个数,总金额 出参:数组,数组...
2021-10-13 15:32:21
1201
2
原创 面试记录-数仓
MT-买菜 1.简介 2.项目介绍 3.数据迁移中的校验,如何进行,数据量大不能全量比对如何优化 4.0到1的数仓具体建设内容,ods/dwd/dws分别做了啥,维度退化从哪一步开始 5.数据治理可以做的点 6.sql+python题 ...
2021-07-19 21:38:37
400
原创 DataX-数据转换自定义函数
使用DataX将mysql数据倒入Hive由于字段包含【\n】导致Hive数据串行,在DataX配置文件中加入Transformer解决。 参考-DataX-github 问题: DataX本身自带的函数没有类似replace的替换函数所以需要自定义groovy函数来实现。 字段本身会有空值导致数据被过滤,需要做容错。 话不多说上代码 "transformer":[ { ".
2020-12-25 16:57:58
4086
原创 数仓-订单状态变化
引言:在数据仓库建设中,存在需要保存历史状态的情况,比如核心实体的历史状态/订单状态等。技术解决方案通常采用历史拉链表,但是拉链表计算逻辑复杂/成本高/使用困难,下面讨论其他的解决方案。 累计快照事实表 以订单模型为例:订单编号/状态/时间 拉链表方案 订单编号 状态 时间 开始时间 结束时间 001 下单 2020-12-03 2020-12-03 2020-12-04 001 付款 2020-12-04 2020-12.
2020-12-03 21:05:19
1293
原创 hive分区表修改增加列遇到的两个问题
由于需求改变,需要在原有的hive分区表中添加列,并每次充写最近30天的分区数据。 问题: 1.执行alter语句增加列后修改列的位置,导致数据串列。 2.重写分区后只有最新分区的新增列有数据,其他原有分区的该列为null。 问题原因: 1.hive增加列只是修改了hive的元数据,并没有改变hdfs的数据文件,其查询结果按照列的顺序和hdfs按分隔符分割后的数据对应,导致错列。 2.原因与上面的相同,解决方法为删除旧分区后再重新写入, alter table db.table drop .
2020-11-26 14:31:37
879
原创 Python邮件与CentOS邮件
背景:由于项目需要对每日数据进行比对监控,所以需要把比对结果发送给各负责人,本文记录下Python发送邮件的几个步骤。 需要模块:smtplib pip install smtplib 闲言少叙上代码 # -*- coding: UTF-8 -*- from email.header import Header from email.mime.text import MIMEText import smtplib #发送邮箱 sender='xxxxx@qq.com' password='.
2020-05-14 15:32:27
431
原创 Python调用MySQL存储过程
使用Python处理MySQL逻辑时如果把SQL语句直接写在字符串中调用多次运行需要多次编译而且代码维护难度增加,MySQL存储过程将SQL逻辑封装解决这个问题,下面记录一下测试效果。 创建测试存储过程 delimiter $$ DROP PROCEDURE IF EXISTS `add_person`$$ CREATE PROCEDURE `add_person`(IN p_id in...
2020-04-15 14:29:44
3201
原创 数据仓库之拉链表
背景:在业务数据中存在会改变状态的数据,需要做历史分析,比如订单状态、登录位置等。 问题:如何找到历史某一天的所有主体的状态。 针对上述问题有三种解决方案: 每天保存全量数据快照:每天都做数据全量备份,可直接查询历史某个节点的全量数据。 每天只做增量数据抽取:查询的时候需要按用户分组并过滤更新时间最近的数据。 每天做增量数据且完成拉链:查询指定开始和结束时间即可。 上述三种方案的利弊...
2020-03-11 17:36:19
3138
原创 计算连续登陆最大天数
背景:在网站平台类业务需求中用户的「最大登陆天数」,需求比较普遍。 原始数据: u0001 2019-10-10 u0001 2019-10-11 u0001 2019-10-12 u0001 2019-10-14 u0001 2019-10-15 u0001 2019-10-17 u0001 2019-10-18 u0001 2019-10-19 u0001 2019-10-20 u...
2019-11-01 11:21:57
10502
11
原创 python 操作 hive
在使用Hadoop生态的时候需要使用脚本动态拼接hiveSQL来实现对数据的适应性操作。 在业务中使用了两种方式,下面做下记录: 1.使用hive -e 'sql ' 2.JDBC方式 -- 第一种方式 使用 hive -e 来执行命令 -- 这种方式的有点是操作简单,无需其他关联操作,使用的模块时os os.system('hive -e "select * from ..."')...
2019-07-01 10:09:27
1816
原创 hive几种join方式
hive处理表关联时由于数据量以及数据倾斜等问题会导致计算性能差甚至任务失败,下面记录一下hive的几种关联方式。 1.common join 普通连接,在SQL中不特殊指定连接方式使用的都是这种普通连接。 缺点:性能较差 优点:操作简单,普适性强 2.map join map端连接,与普通连接的区别是这个连接中不会有reduce阶段存在,连接在map端完成 适用场景:大表与小表...
2019-06-28 10:41:13
4970
原创 hive 提交任务时Job init failed
背景:oozie+hive+python. 执行操作:在oozie中配置python脚本动态拼接SQL使用hive执行 关键操作:hiveSQL中有动态分区 报错信息: 2019-03-26 13:53:51,437 WARN [main] org.apache.hadoop.mapreduce.v2.app.job.impl.JobImpl: Job init failed or...
2019-06-26 11:37:44
563
原创 Hive order by ,sort by ,distribute by, cluster by
Hive中对于排序给出了通用的「order by」与 非全局排序「sort by」至于其他两个函数是配合使用的。 order by与sort by的区别: order by的使用与标准SQL相同,实现全局排序,但是缺点是由于要进行全局有序所以在reduce阶段只有一个reducer,也就意味着失去了发挥多节点并发的优势,性能较差。 sort by是在分区内排序,在reduce阶段不会只剩...
2019-06-17 14:27:51
267
原创 Windows 可以使用 gitbash 但是cmd不能识别git命令
Windows下安装了git 鼠标右键可以看到 gitbash和GitUI 但是cmd命令行不能执行git命令 原因:没有配置git.exe的路径到PATH环境变量中 解决:在gitbash命令行中执行 where git 找到git.exe的路径,然后配置到环境变量PATH中 重新启动CMD即可,注意配置环境变量的时候添加 git.exe所在文件夹即可 ...
2019-05-16 11:54:47
7429
2
原创 python 数据库 % 冲突问题解决
在使用python后台调用 MySQL数据库的时候会有 「%」的关键字冲突问题,比如 用Python后端读取 MySQL 中记录的逻辑,在 impala端执行,其中涉及到模糊匹配的 「%」会报错 解决:SQL逻辑中的单个「%」换为「%%」即可,不错的 trip。 ...
2019-05-15 15:36:34
613
原创 pycharm urls 文件没有高亮显示
使用 pycharm 开发 django 项目发现配置urls文件时没有高亮语法显示,看起来相当难受,做下记录 原因:pycharm将urls文件当做普通的文本文件处理了,效果如下 解决:File--->settings---->editor--->File Types 将urls.py移除即可 ...
2019-05-14 16:28:49
1691
1
原创 Python学习日志--文件读写
在编程过程中经常需要文件读写,Python的文件读写要比Java简单的多。 打开文件的集中方式: # 1.只读 open("path/filename","r") # 2.只写 open("path/filename","w") # 3.追加 open("path/filename","a") # 读取整个文件 file = open("path/filename","r") fi...
2019-04-18 20:54:35
337
原创 Python学习日志--面向对象
面向对象的思想是高级语言中最好的特性,使程序的开发更加优美,维护起来更加简洁。 Python中面向对象与Java中的面向对象在特性和功能方面几乎没有区别。 面向对象的特征: 封装性:可以将多个属性和方法(功能)封装,有利于统一维护 继承性:在继承父类之后将拥有父类的属性和方法,简化程序的开发,维护 多态性:相同函数由于执行的对象的不同产生的效果也就是执行的代码段不同 示例1:封装 ...
2019-04-18 20:29:05
229
原创 Python 缺省参数,可变参数
Python中形参有确定参数,缺省参数,可变参数,关键字参数。具体的使用和区别如下 确定参数:平时最常用的必传确定数量的参数即为确定参数 缺省参数:在调用函数时可以传也可以省去的参数,如果不传将使用默认值 可变参数:可变长度参数 关键字参数:长度可变,但是需要以kv对形式传参 举例: # 1.缺省参数 即有默认值的参数 例如: def test1(a, b = 3): prin...
2019-04-16 20:33:39
6518
1
原创 Python 列表,字典 常规操作
记录下Python 中 「列表」,「字典」的常规操作,备忘 列表 # 1.定义列表,以中括号声明即列表,无需声明类似List之类的东西 var_name = [E1, E2, E3, E4] # 2.增 var_name.append(E5)#增加单个元素,只是添加的元素在列表的尾部 var_name.insert(1,E6)#增加单个元素到指定的位置(第一个参数) var_name...
2019-04-15 20:42:46
234
原创 lead窗口函数
lead函数在Impala中可以配合over使用,lead函数有三个参数 lead(property,num,default) 第一个参数「property」标识想查询的列,「num」标识相对于当前行的第num行,第三个参数是默认值。 举例: -- 建表 CREATE TABLE test(id string,name string); -- 插入数据 INSERT INTO TAB...
2019-04-11 20:38:48
20185
3
原创 hive调优记录
1.设置小文件合并配置参数 set mapred.max.split.size=100000000; set mapred.min.split.size.per.node=100000000; set mapred.min.split.size.per.rack=100000000; 2.限制Reducer个数的上限 3.以上两类参数的调优说明: 设置split size是需要减少ma...
2019-04-01 19:53:59
196
原创 Kudu Schema 原则
概述:Schema 设计主要是 Primary Key,Partition Strategy,Column Type 前二者对性能影响明显后者面向业务。 Column Design: Type 支持类型: Boolean,integer,float,double,unixtime,decimal,UTF-8 string,binary 其中decimal类型是...
2019-04-01 19:47:23
1112
原创 KUDU&Impala基本操作
概述:通过 Impala 可是实现 Kudu 的创建数据库,对表的增,删,查,改。 ---------------------------------------- 基本常用操作: --描述表 DESCRIBE tabel_name; --查看分区情况 SHOW PARTITIONS table_name; --查看当前使用数据库 SELECT current_database()...
2019-04-01 19:44:29
8213
原创 关于窗口函数的使用
Hive 窗口函数在计算部分与整体之间的关系中常用到,可以达到简化SQL,减少Hive 执行计划产生的MR数。 实列:1 需求:统计各城市用户在总体的占比 数据结构:「user_city」表中有两个字段「user_name」,「city」,表示用户姓名与所在城市 分析:上述需求中明显需要统计每个「城市」的用户数与「所有用户数」,然后做商得到最终结果 实现1:不适用窗口函数 se...
2019-03-30 10:29:31
522
原创 Excel数据导入hive
Hive导入Excel数据并不能使用类似一键导入的开关,只能先将数据进行格式转换,hive中简表,load数据的方式。 打开Excel并另存为.txt格式文本文档excel与text转换 上传文件到HDFS 根据excel中的数据结构进行建表,注意结构顺寻要一致 load数据到hive表中,load data inpath '/hdfs/file/a.txt' into table tab...
2019-03-11 17:04:48
3449
1
原创 Hive 脚本--转义,引号的使用
在Hive脚本中需要对保留字符进行转义且Hue窗口支持使用单引号与双引号,但是脚本中与Hue中的使用是有差别的 转义字符: 如下SQL,使用Hive中的函数进行字符串分割 select split('hello;hive;sql;hadoop',';')[0] 上述SQL在Hue窗口可以正常数据「hello」但是在Hive脚本中会报错 org.apache.hadoop.hive...
2019-03-01 16:45:59
9126
原创 Spark递归读取文件夹 删除HDFS文件
在使用Spark 计算HDFS数据时会遇到整个文件夹文件读取,删除输出路径的需求,特此记录一次 递归读取文件: sc .hadoopConfiguration .setBoolean("mapreduce.input.fileinputformat.input.dir.recursive", true) 删除已存在的路径: def deleteOutPutPath(sc: Sp...
2019-03-01 15:51:56
2294
原创 CDH 5.14安装Spark2服务
由于默认的Spark版本为1.6,开发任务需要Spark2所以记录一次Spark2的安装。 一、JDK1.8 集群的JDK版本升级,Spark2需要JDK1.8来支持 下载 JDK1.8 上传到/usr/share/jdk8文件夹下 每个节点都需要在相同的目录下配置JDK CDH配置中制定Java的目录 二、下载spark2 spa...
2019-02-12 18:52:46
999
原创 scala 报错 org/scalacheck/Test$TestCallback 类找不到
背景:需要编写 Scala 单元测试,采用 ScalaTest 框架,代码如下: import org.apache.spark.{SparkConf, SparkContext} import org.scalatest._ class WorldCountTest extends FlatSpec with BeforeAndAfter{ val master = "local[2]"...
2019-02-11 18:10:09
717
原创 Kudu Partition Tablet Bucket
kudu中关于分区的概念有三个:partition,tablet,bucket。 概念: 「partition」类似hbase中的「region」也就是将整张表来分片存储管理,是一个逻辑上的概念。 「tablet」是分区中存储数据的最小单位,是物理概念,也就是数据在寻找存储位置的时候最终会落到一个确定的「tablet」中。 「bucket」这个概念是比较容易混淆的,「bucket」是在ha...
2019-01-07 11:38:24
1388
1
原创 简单记录Gitlab-CI
CI也就是持续集成,需要自动化实现从更新代码到打包,测试,部署等工作。 Gitlab自带的CI工具,总体思路是为自动执行任务提供服务器,当更新代码等操作发生是自动触发任务,这里执行任务的服务器就是Runner,具体执行的 任务需要进行配置,也就是.gitlab-ci.yml文件。 1.配置Runner # For Debian/Ubuntu/Mint curl -L https://p...
2018-12-28 10:53:00
248
原创 记录一次Spark调优性能对比
在重写MR到Spark的过程中发现Spark的性能并没有达到我的预期,记录一次调优操作即效果对比 本文涉及调优手段: 持久化 分区数 未调优之前的代码: val jsonStringRDD: RDD[String] = sc.textFile(s"$inputPath") val check1RDD = jsonStringRDD.filter(js => check1(...
2018-12-18 19:13:18
531
原创 恢复 Hive 删除表,数据库
背景:CDH集群hue窗口操作,删除database; hive中使用 drop table或者drop database 删除数据之后是可以进行恢复的,truncate掉的数据目前无法恢复。 删除掉的数据可以在trash文件夹中找到,点击restore恢复至删除前的文件位置,如果删除的时间比较久回收站被清除也无法恢复。 恢复步骤: 恢复数据至原位置 找到删除的文件夹...
2018-12-15 16:25:34
7398
2
原创 spark写 本地文件报错
环境:spark1.6,window10,Hadoop2.6 报错:rdd.saveastextFile(outPath) 原因: .在spark bin目录下没有winutils.exe问价 本地dill问价有损坏 c/windows/system32中没有hadoop.dll文件 解决:查看文件夹,没有文件去下载并放到文件夹下;如果有文件尝试修复本地环境,下载DirectX Repa...
2018-12-11 15:59:06
1289
原创 hive外部表指向多个文件/文件夹
hive建外部表正常指向一个文件或者文件夹时很简单,然而需求是指向两个不同的文件夹起上级目录中还有其他文件不能直接指定上级目录,特此记录。 新建外部分区表 //新建外部分区表 create external table test(content string) partitioned by(date string); 将不同的文件/文件夹指向不同分区即可 //递归读取...
2018-11-21 11:52:36
5328
2
原创 hue端查看任务日志报错
环境:CDH5.14.0,HIVE,YARN,HDFS都是cdh默认的版本 背景:配置资源池的时候将resource manager的权限从 * 改为指定用户和group 现象:在hue中执行workflow后看不到日志 报错: User [dr.who] is not authorized to view the logs for attempt_1542114179367_1068_...
2018-11-21 11:17:34
3718
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅