- 博客(166)
- 收藏
- 关注
原创 2021-10-24
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入程序人生欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 。如果你想学习如何
2021-10-24 17:56:57
427
原创 COALESCE
COALESCE()函数主流数据库系统都支持COALESCE()函数,这个函数主要用来进行空值处理,其参数格式如下:COALESCE ( expression,value1,value2……,valuen)COALESCE()函数的第一个参数expression为待检测的表达式,而其后的参数个数不定。COALESCE()函数将会返回包括expression在内的所有参数中的第一个非空表达式。如果expression不为空值则返回expression;否则判断value1是否是空值,如果v..
2021-04-06 17:26:11
451
原创 kafka topic
回顾kafka极简入门(二)--安装topic是kafka的生产者和消费者最小交互的单位,我们先从topic入手,创建第一个topic. 进去kafka的bin目录我们发现有个kafka-topics.sh脚本 1.创建topic官方推荐如果kafka版本大于等于2.2使用--bootstrap-server替代--zookeeper(2.2以上也兼容--zookeeper)命令如下kafka-topics.sh --create --bootstrap-serv...
2021-03-25 14:20:12
1039
原创 自然键 or 代理键
概念解释键:键是唯一标识一个实体的一个或者多个数据属性。在物理数据库中,建可以由变的一个或者多个列组成,它们的值唯一标识关系表中的一行自然键:由现实时间中已经存在的数据组织成的键, 字段本身具有一定的含义;例如,身份证号、员工编号等代理键: 就是充当主键的字段本身不具有业务意义,只具有主键作用,比如自动增长的ID比如商品,在ETL过程中,对于商品维表的每一行,可以生成一个唯一的代理键与之对应; 商品本身的自然键可能是商品ID等。其实对于前台应用系统来说,商 ID是代理键:而对于数据仓库系统来说.
2021-03-23 20:00:06
404
原创 hive 宽表变竖表 长表变宽表
1.这是源数据以及需要转化的目标表.我们的方法是 , 用 GROUP BY按照year分组 , 并且依次提取1月,2月,3月,4月的 num,具体实现 1 2 3 4 5 6 selectyear, max(casewhenmonth=1thenmoneyelse0end)asM1, max(casewhenmonth=2thenmoneyelse0end)asM...
2021-03-01 23:21:47
984
1
原创 hive的开窗函数举例(SUM、AVG、MIN、MAX)
数据准备: cookie1,2015-04-10,1 cookie1,2015-04-11,5 cookie1,2015-04-12,7 cookie1,2015-04-13,3 cookie1,2015-04-14,2 cookie1,2015-04-15,4 cookie1,2015-04-16,4建表语句: create database if not exists myhive; use myhive; drop ta...
2021-03-01 23:17:09
741
原创 Hive数据仓库之全量表、增量表、快照表、切片表和拉链表
数据仓库中常见的一些表:全量表:记录每天的所有的最新状态的数据,增量表:记录每天的新增数据,增量数据是上次导出之后的新数据。快照表:按日分区,记录截止数据日期的全量数据切片表:切片表根据基础表,往往只反映某一个维度的相应数据。其表结构与基础表结构相同,但数据往往只有某一维度,或者某一个事实条件的数据拉链表:记录每条信息的生命周期,当一条记录的生命周期结束,就会重新开始一条新的记录,并把当前日期放入生效开始日期。如果当前信息至今有效,则在生效结束日期中填入一个极大值(如9999-99-99),一般
2021-03-01 00:23:52
2396
原创 数据仓库之数仓分层
1 为什么要分层1.1 把复杂问题简单化,将复杂的任务分解成多层来完成,每一层只处理简单的任务,方便定位问题。1.2 减少重复开发:规范数据分层,通过中间层数据,能够减少极大的重复计算,增加一次计算结果的复用性。1.3 隔离原始数据: 不论是数据的异常还是数据的敏感性,使真实数据与统计数据解耦开2 数据集市与数据仓库概念2.1 数据集市(Data Market),现在市面上的公司和书籍对数据集市有不同的概念。数据集市侧是一种微型的数据仓库,它通常有更少的数据,更少的主题区域,以及更少的历史数
2021-02-28 22:42:49
277
原创 Kafka为什么吞吐量大、速度快
Kafka是大数据领域无处不在的消息中间件,目前广泛使用在企业内部的实时数据管道,并帮助企业构建自己的流计算应用程序。Kafka虽然是基于磁盘做的数据存储,但却具有高性能、高吞吐、低延时的特点,其吞吐量动辄几万、几十上百万。但是很多使用过Kafka的人,经常会被问到这样一个问题,Kafka为什么速度快,吞吐量大;大部分被问的人都是一下子就懵了,或者是只知道一些简单的点,本文就简单的介绍一下Kafka为什么吞吐量大,速度快。一、顺序读写众所周知Kafka是将消息记录持久...
2021-02-28 20:25:38
263
原创 拉链表回滚
拉链表dwd_userinfo_db,目前时间是2020-12-15,想回滚到2020-11-27,那么拉链表的状态得是2020-11-26userid starttime endtime1 2020-11-12 2020-11-261 2020-11-27 9999-99-992 2020-11-16 2020-12-132 2020-12-14 9999-99-99拉链表回滚:过滤starttime<=2020-11-26的数据,将endtime&g
2021-02-21 14:54:43
248
原创 HashMap put,get操作
hashmap数据结构。数据结构中有数组和链表来实现对数据的存储,但是这两种方式的优点和缺点都很明显:1,数组存储,它的存储区间是连续的,比较占内存,故空间复杂度高。但是利用二分法进行查找的话,效率高,时间复杂度为O(1)。其特点就是:存储区间连续,查找速度快,但是占内存严重,插入和删除就慢。2,链表查询,它的存储区间离散,占内存比较宽松,故空间复杂度低,但时间复杂度高,为O(n)。其特点就是存储空间离散,空间复杂度低,插入和删除方便,但是时间复杂度高,导致查询比较慢。综合以上两者的特点,就产生
2021-02-21 12:00:16
351
原创 Python:访问数据库MySQL
访问数据库MySQLMySQL数据库是最常用的轻量级数据库,本节介绍Python编程访问数据库MySQL。此前,请确保已经安装了MySQL。可参考博文Ubuntu安装MySQL及常用操作安装MySQL。Python访问MySQL有多种方式,这里主要介绍两种最常用的访问方式:1. 利用模块PyMySQL2. 利用支持Python的MySQL驱动包前期准备无论是哪种方式,首先都需要安装python模块管理工具——pip,因为我们使用的Python3,所以pip需要使用与之配套的pip3,直接使用p
2021-02-19 19:50:58
435
原创 Python:多态
多态介绍多态之前,我们先看看什么叫方法重写。方法重写子类继承父类,会继承父类的所有方法,当父类方法无法满足需求,可在子类中定义一个同名方法覆盖父类的方法,这就叫方法重写。当子类的实例调用该方法时,优先调用子类自身定义的方法,因为它被重写了。例如:class People: def speak(self): print("people is speaking") class Student(People): #方法重写。重写父类的speak方法 def speak(sel.
2021-02-19 19:49:38
207
原创 Python:继承
继承Python支持类的继承,同时也支持多继承,其派生类定义如下:class DerivedClass(BaseClass1, BaseClass2,..., BaseClassN): 类的属性 类的方法Python请注意基类的排列顺序,当子类调用自身没有定义的方法,也并没有指定具体的基类名称时,python会从左到右依次查找继承的基类中是否包含该方法,直到找到就停止,否则报错。例如:#定义Animal类 class Animal: def eat(self)..
2021-02-19 19:49:06
103
原创 Python:类和实例
跟Java和C++类似,Python也是一门面向对象的语言,接下来将介绍Python类和类的实例。类类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个实例所共有的属性和方法。类定义的语法格式如下:class ClassName: 类的属性定义 类的方法Python类的属性一般在类内部可以定义类的属性,如Person类,通常会定义姓名name,年龄age等基础属性。定义方式与定义变量相同:var = ""。将属性名以双下划线开头可将属性定.
2021-02-19 19:48:18
135
原创 Python:高阶函数-filter
filter()filter()也是Python常用的内置函数,用于过滤序列。与map()类似,fiter()也是接收两个参数:一个函数和一个序列,将函数作用在序列的每一个元素上,根据函数返回值True或False,来决定是否舍弃该元素,最终返回一个迭代器,内容是原序列的子序列。例如:def is_even(x): return x % 2 == 0 l = filter(is_even,[0,1,2,3,4,5]) print(l) for var in l: #for循环遍历迭.
2021-02-19 19:47:36
318
原创 Python:reduce函数
reduce()reduce函数接收两个参数,一个是函数f,一个是Iterator,其中函数f必须接收两个参数。reduce在Iterator的第一二个元素上执行函数f得到结果res,然后将结果res继续与第三个元素作为函数f的两个参数执行函数f,直到遍历完成。例如:from functools import reduce def f(x,y): return x * y #range(1,4)生成一个序列[1,2,3] result = reduce(f,range(1,4..
2021-02-19 19:47:00
375
原创 Python:map函数
map()map函数接收两个参数,一个是函数f,一个是Iterator,map在Iterable的每个元素上依次执行函数f,并把结果作为新的Iterator迭代器返回。例如:#定义方法f def f(x): return x * x result = map(f,[1,2,3]) #返回一个Iterator迭代器,可用for循环来访问 for var in result: print(var)Python将上述代码写入文件map.py,利用命令python3 map...
2021-02-19 19:46:22
756
原创 Python:字典
Dictionary:字典字典和列表也很相似。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的。定义格式:dic = {'key1':val1,'key2':val2,'key3':val3}。>>> dic = {'name':'Mary','sex':'W','age':23} >>> print(dic['name']) #输出键为'name'的值 Mary >>> print(.
2021-02-18 20:07:08
91
原创 Python:集合
Set:集合集合Set是一个无序不重复的序列。通常用来进行成员关系测试和删除重复元素,且支持集合运算(并交差等)。定义格式:#{}定义的集合。其每个元素就是obj1,obj2,... s1 = {obj1,obj2,obj3,…} #set()定义的集合。其每个元素为obj拆分的单个字符列表 s2 = set(obj)Python例如:>>> set1 = {'Dog','Cat','Rabbit'} >>> print(se..
2021-02-18 20:06:35
94
原创 Python:元组
Tuple:元组Tuple元组和List列表很相似,元组元素也可以不相同,可以包含数字、字符串等,但元组和列表的定义格式不同,且元组元素不允许修改,列表允许修改。元组定义格式:tuple = (obj1,obj2,obj3,…)。>>> tup = (); #创建空元组tup >>> tuple = ('hello','world',12,3.6,'python') #创建元组tuple >>> print(tuple) ('he.
2021-02-18 20:05:54
93
原创 Python:列表
List:列表List列表是python中最常用的数据类型。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。列表定义格式:list = [obj1,obj2,obj3,…],与其他编程语言的数组概念相似,下标从0开始,即list[0]=obj1。列表截取的语法格式:变量[头下标:尾下标]访问列表可以使用下标索引来访问列表的单个元素,也可以使用方括号的方式来截取子列表来进行访问。例如:#!/usr/bin/python3.5 L=[] #创建空列表 l.
2021-02-18 20:05:18
182
原创 Python:循环语句
Python有两种循环结构:while和for...in...whilewhile当其后的判断条件满足时,就是执行缩进的语句块,直到while后面的条件不满足就停止。语法格式:while 判断条件: 语句块Python例如求和1+2+3+4+5:n = 1 sum = 0 while n<=5: sum = sum+n print(sum)Python将上述代码写入while.py文件中,执行命令python3 while.py,输出结果为...
2021-02-18 20:03:56
139
原创 Python:条件语句
条件语句Python的条件语句和其他编程语言如Java和C++有较大的不同,其条件语句语法格式为if...elif...else,如下:if 表达式1: 语句块 elif 表达式2: 语句块 else: 语句块Python与其他编程语言如Java和C++一样,当遇到第一个满足的条件,执行完相应的语句块后,就会跳出该条件结构,不会再去判断下一个条件。Python与它们的不同之处在于:1.Python将else if缩减成elif2.Python每个条件语句都是:结尾,下一.
2021-02-18 20:02:58
161
原创 Python:读写文件
读写文件内置函数open()可实现读文件功能,并返回一个file对象,随后便可对其进行相关操作。语法格式为:open(filename, mode)。filename是文件名称,mode是打开文件的模式(可选),如只读、写入、追加等等,如果省略第二个参数mode则默认为只读方式打开文件。Python读写文件最常用的打开模式有以下几种:r: 只读方式,默认模式w:写入方式,若已存在该文件则覆盖,若不存在则创建a:追加方式,若已存在该文件则追加,若不存在则创建r+:读写方式,若已存在该文件则从
2021-02-18 20:01:57
176
原创 Python:输入输出
输入Python利用内置函数input()来实现标准键盘输入。input()可以接收一行文本,并将返回该文本。例如:>>> str=input("Please input your name:") Please input your name:Mary >>> print("Your name is",str) Your name is MaryPython输出Python利用内置函数print()来实现标准输出。在 Python 中,输.
2021-02-18 20:01:16
365
原创 Python:数据类型
数据类型Python3数据类型主要包括以下几种:整型、浮点型、布尔型、复数型、字符串。其中整型、浮点型、布尔型和复数型内部存储都是以Number数字的形式,而字符串以String字符串的形式存储。Number:数字Number包括整型、浮点型、布尔型和复数型。Number可以进行常见的数值运算,运算时布尔型True为1,False为0。>>> a = 2 #整型变量 >>> b = 1.5 #浮点型变量 >>> c = Tr.
2021-02-18 20:00:18
157
原创 Python:基础语法
基础语法声明变量Python中的变量不需要声明类型,其在使用前必须赋值。赋值格式:变量名 = 值,如n = 5。Python允许多个变量同时赋值,如a = b = c = 1 i, j, k = 1, 'hello', 2.8Python注释Python单行注释以#开头,例如:#这是单行注释 a = 'Hello World' print(a)Python多行注释可以用三个单引号'''或三个双引号"""将需要注释的部分括起来,如:'''...
2021-02-18 19:59:16
82
原创 hive udf 大小写转换,解析json案例
把 hive 安装目录下的lib 添加到java项目中简单UDF示例1、先开发一个java类,继承UDF,并重载evaluate方法 package com.hive.udf; import org.apache.hadoop.hive.ql.exec.UDF; public class ToLowerCase extends UDF { public String evaluate(String field) { ...
2021-02-09 10:59:50
559
2
原创 java中的indexOf()方法
介绍一下indexOf()的两种用法和实现功能:1、 indexOf(String str): 返回指定字符str在字符串中(方法调用者)第一次出现处的起始索引,如果此字符串中没有这样的字符,则返回 -1。2、indexOf(String str, int index): 返回从 index 位置开始查找指定字符str在字符串中第一次出现处的起始索引,如果此字符串中没有这样的字符,则返回 -1。举例说明:String str = "01234567890123456789";System.
2021-02-09 10:32:27
32405
1
原创 Java String类 常用方法
String类:String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象。String类对象创建后不能修改,StringBuffer & StringBuilder 类。这时我们会问,为什么我们String变量赋值不就是改变了吗?其实不是的,赋值后将会生成新的对像来存放新的内容,原先的对象依旧在内存中,但是s不在指向它,那么这个对象就会成为垃圾内存,在某一个特定的时刻有Java虚拟机回收。详情解释请点击 包含在一对双引号之间。Strin...
2021-02-09 10:26:19
249
原创 toString和String.valueOf的比较
这两个方法的源码Object中toString方法:String中valueOf方法:当传入参数为byte,short,int,long,float,double,boolean,char(8种基本数据类型)时可以调用String.valueOf()方法转化为String。传入参数为byte,short时会自动转成int。针对传入参数为Object类型,比较如下:1.相同点Object中有public方法toString,因此任何一个对象都能调用toSring valueOf的参数是O
2021-02-09 10:07:04
436
原创 JAVA中对字符串的常见处理函数汇总
字符串看到字符串,想到字符串处理中,有字符串的反转,初级面试中常用到字符串分割成字符串组,初级面试中常用到字符串中的替换,初级面试中常用到字符串中的截取,初级面试中常用到反转reverse,java 中字符串没有reverse这个方法,Python中有,如果未有编程语言限制,可以直接用python语言str.reverse()实现;那用Java呢,也很简单,就是将所有字符倒序;有时候,面试要求将所有的方法都写下来Java中String没有reverse方法,StringB
2021-02-09 09:48:06
300
1
原创 大数据 java01 hive udf函数(手机号码脱敏)
Hive UDFHive UDF 函数 1 POM 文件 2.UDF 函数 3 利用idea打包 4 添加hive udf函数 4.1 上传jar包到集群 4.2 修改集群hdfs文件权限 4.3 注册UDF 4.4 使用UDF Hive UDF 函数1 POM 文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache..
2021-02-09 09:38:59
383
原创 scala基础教程之-数据类型
一、基本的数据类型数据类型 描述 Byte 8位有符号值。范围从-128到127 Short 16位有符号值。范围从-32768至32767 Int 32位有符号值。范围从-2147483648 to 2147483647 Long 64位有符号值。 从-9223372036854775808到9223372036854775807 Float 32位IEEE754单精度浮点数 Double 64位IEEE754双精度浮点数 Ch..
2021-02-09 00:08:31
175
原创 Java传参-基本数据类型和引用数据类型作为参数的区别(值传递)
java中的方法可以传递参数,参数的传递方法就是值传递。参数有形参和实参,定义方法时写的参数叫形参,真正调用方法时,传递的参数叫实参。调用方法时,会把实参传递给形参,方法内部其实是在使用形参。所谓值传递就是当参数是基本类型时,传递参数的值,比如传递i=10,真实传参时,把10赋值给了形参。当参数是对象时,传递的是对象的值,也就是对象的首地址。就是把对象的地址赋值给形参。基本类型当做方法的形参时当引用类型当做参数的形参时基本数据类型和引用数据类型作为参数的区别基本数据类型
2021-02-09 00:08:15
892
原创 java final修饰的变量作用
之前一直以为final修饰的变量不能改变,这个理解是有问题的。首先final修饰的基本变量是不可变的,但是final修饰的对象要看以下情况:先定义一个自定义对象 @Data public class FinalUser { private String name; public FinalUser(String name) { this.name = name; } } 然后在别的对象里引用一下,加上fina...
2021-02-09 00:06:10
421
原创 hbase RowKey设计
一条数据的唯一标识就是RowKey,那么这条数据存储于哪个分区,取决于RowKey处于哪个一个预分区的区间内,设计RowKey的主要目的 ,就是让数据均匀的分布于所有的region中,在一定程度上防止数据倾斜。接下来我们就谈一谈RowKey常用的设计方案。生成随机数、hash、散列值 比如: 原本rowKey为1001的,SHA1后变成:dd01903921ea24941c26a48f2cec24e0bb0e8cc7 原本rowKey为3001的,SHA1后变成:49042c5
2021-02-09 00:05:56
72
原创 HBase优化 预分区
预分区 每一个region维护着StartRow与EndRow,如果加入的数据符合某个Region维护的RowKey范围,则该数据交给这个Region维护。那么依照这个原则,我们可以将数据所要投放的分区提前大致的规划好,以提高HBase性能。手动设定预分区Hbase> create 'staff1','info','partition1',SPLITS => ['1000','2000','3000','4000']生成16进制序列预分区create 'staff2','..
2021-02-08 15:07:23
113
原创 hive 列转行
测试数据hive> select * from col_lie limit 10;OKcol_lie.user_id col_lie.order_id104399 1715131104399 2105395104399 1758844104399 981085104399 2444143104399 1458638104399 968412104400 1609001104400 2986088104400.
2021-02-08 14:53:45
475
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人