数理统计:
1.描述统计
2.推断统计
1.描述统计
1.什么是描述统计?
描述统计 从数据中提取 变量的主要信息
2.从数据中提取 变量的主要信息 =》 【指标】 统计量
统计量:
1.频率与频数
2.集中趋势分析:
均值、中位数、众数、分位数
3.离散程度分析:
极差、方差、标准差
4.分布形状:
偏度、峰度
3.提取 变量:
1.数值变量 【就是一个table 中的 column 是数值类型】
2.类别变量 【就是一个table 中的 column 是非数值类型 string 】
1.频率与频数
1.适用场景 =》类别变量
2.频数:就是 每个不同的取值出现的次数
3.频率:每个不同的取值出现的次数 与总次数的比值 用%表示
意义:
类别变量中,每个取值出现的次数
eg:
A班级 及格 30人 , B班级及格 35人 能说明()
1.A班级 成绩更好
2.B班级 成绩更好
3.成绩差不多
4.无法确定哪个班级成绩好
分析:
1.类别变量 => 及格
2. 频数 =》及格人数
1.集中趋势分析:
均值、中位数、众数、分位数
均值: 一组数据的总和 除以 数据的个数
均值 = 和 / 个数
中位数:一组数据的 按照 升序进行排列 最中间的位置 就是 中位数
众数: 一组数据 出现的次数最多的值
注意:
1.数值变量:
均值、中位数 表示一组数据 的 集中程度
2.类别变量:
众数 集中程度
3.分布:
正太分布:
偏态分布:
左偏分布: 均值在 最左边
右偏分布:均值在 最右边
4.影响:
1.均值 =》 受 极端值 影响 、
2.中位数 众数 不受极端值影响 【稳定】
3.众数 一组数据 中 可能不是唯一的 【单拿出来 是不行的】
问:
国家城市统计居民收入水平 , 使用那个指标衡量 更合适 ?
1.均值
2.中位数
3.中位数或者众数
4.都可以
意义:
衡量数据综合水平
思考:
缺失值 填充 如何处理?
1.数据 =》 0
2. 数据 去掉
3. 补充 =》 中位数
分位数:
通过 (n-1 ) 分位 划分 n个区间
每个区间数据的个数是相等的 (近似相等)
意义:
利用分位数 + 极值 可以判断 数据的分布状态
集中趋势分析:
弊端 :
5 5 5 5 =》 5
0 -5 20 5 =》 5
-100 100 120 -100 =》5
离散程度分析:
极差 、方差 、标准差
极差:一组数据中 ,最大值 - 最小值
方差: 一组数据中 每个元素 与 均值的偏离 大小
标准差:就是方差的开方
意义:
方差/标准差:
1.数据的分散性
越大 数据越分散
越小 数据越集中
2.数据的波动性
越大 波动越大
越小 波动越小
分布形状:
偏度、峰度
1.偏度:
倾斜程度的度量
eg:
数据 -》 正态分布 偏度就是 0
数据 -》 左偏分布 偏度就是 小于0
数据 -》 右偏分布 偏度就是 大于0
2.峰度:
描述 数据分布 陡缓的程度
1.标准 正态分布 峰度 0
2.如果 峰度 > 0 :
数据在分布上 数据比 标准 正态分布 密集 =》 方差比较 小
2.如果 峰度 < 0 :
数据在分布上 数据比 标准 正态分布 分散 =》 方差比较 大
意义:
1. =》 数据的分布特征
2. 数据正太校验
基本命令:
1.mv + cp
1.mv 剪切
2.cp 复制
mv =》 文件个数 始终是1分
cp =》 文件个数 始终是2分
1.移动
[root@sygy10 bigdata]# mv 1.log ../1.log
[root@sygy10 bigdata]# cp ~/1.log ./
2.改名字
[root@sygy10 ~]# mv 1.log 1.log_blk
[root@sygy10 ~]# cp 1.log_blk 1.log
标准写法:
mv xx.log bigdata/xx.log
cp xx.log bigdata/xx.log
不标准写法:
mv xx.log bigdata/
cp xx.log bigdata/
2.上传下载
1.xshell 工具
2.命令
linux 安装一个 包 : pip
yum install -y lrzsz
rz 上传
sz 下载
3.xshell 工具
3.rm 删除文件 或者 文件夹 (高危命令)
1.文件
[root@sygy10 ~]# rm 1.log_blk
rm:是否删除普通文件 "1.log_blk"?y
[root@sygy10 ~]# rm -f jdk-8u212-linux-x64.tar.gz
2.文件夹
[root@sygy10 ~]# rm -r bigdata/
rm:是否进入目录"bigdata/"? y
rm:是否删除普通文件 "bigdata/1.log"?y
rm:是否删除目录 "bigdata/"?y
[root@sygy10 ~]# rm -r -f dir1/
rm -rf xxx [通用的写法]
4. alias (别名)
别名使用:
alias ll='ls -l --color=auto'
alias aa="cd /tmp"
1.使用
[root@sygy10 ~]# alias aa="cd /tmp"
[仅仅当前会话生效]
2.aa 命令 在任何地方都能使用?
1.环境变量
[root@sygy10 tmp]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
2.环境变量 配置文件 :
1.全局的 [所用用户都可以使用]
/etc/profile
2.个人的 【只能是当前用用户能使用,其他不能使用】
~/.bashrc
~/.bash_profile
3.生效
source /etc/profile
source ~/.bashrc
source ~/.bash_profile
eg : =》 1.命令 在任何地方都能使用
[root@sygy10 ~]# vim /etc/profile
配置了一个 aa 别名
eg: =》 2。所用用户都可以使用 aa
useradd zs 【创建用户】
su - zs 【切换用户】
[root@sygy10 tmp]# useradd zs
[root@sygy10 tmp]# su - zs
[zs@sygy10 ~]$
[zs@sygy10 ~]$ pwd
/home/zs
[zs@sygy10 ~]$ aa
[zs@sygy10 tmp]$ pwd
/tmp
[zs@sygy10 tmp]$
2.个人的 【只能是当前用用户能使用,其他不能使用】
~/.bashrc
~/.bash_profile
5.历史命令
history
mysql =》
mysql -uroot -p
[root@sygy10 ~]# aa_zs
[root@sygy10 tmp]# !281
6.tab 自动补全的功能
按tab 键 按一次 自动补全 或者 过滤
按tab 键 按二次 过滤
7. 用户相关的命令
1.用户、用户组
1.用户
[root@sygy10 ~]# ll /usr/sbin/user*
-rwxr-x---. 1 root root 118192 11月 6 2016 /usr/sbin/useradd
-rwxr-x---. 1 root root 80360 11月 6 2016 /usr/sbin/userdel
-rwxr-x---. 1 root root 113840 11月 6 2016 /usr/sbin/usermod
2.用户组
[root@sygy10 ~]# ll /usr/sbin/group*
-rwxr-x---. 1 root root 65480 11月 6 2016 /usr/sbin/groupadd
-rwxr-x---. 1 root root 57016 11月 6 2016 /usr/sbin/groupdel
-rwxr-x---. 1 root root 57064 11月 6 2016 /usr/sbin/groupmems
-rwxr-x---. 1 root root 76424 11月 6 2016 /usr/sbin/groupmod
3.创建用户
[root@sygy10 ~]# useradd xinwei
[root@sygy10 ~]# id xinwei
uid=1002(xinwei) gid=1002(xinwei) 组=1002(xinwei)
4.创建一个用户:
1.用户名称 xinwei
2.创建了一个用户组 xinwei
3.创建了一个 家目录 :/home/xinwei
用户 : 用户组 :
主组
附属组
1.用户信息 =》文件 记录 [root@sygy10 ~]# vim /etc/passwd
2.用户组信息 =》 文件 记录 [root@sygy10 ~]# vim /etc/group
5.切换用户 su
[root@sygy10 ~]# su - xinwei
[root@sygy10 ~]# su xinwei
6.样式丢失
如何解决:
1.-bash-4.2$ cd /etc/skel/
2.-bash-4.2$ cp ./.* ~
7.用户组
[root@sygy10 ~]# groupadd bigdata
[root@sygy10 ~]# usermod -a -G bigdata zs
需求:
zs 要求 主组是 bigdata ,附属组 zs 也要
1.[root@sygy10 ~]# usermod -g bigdata zs
2.[root@sygy10 ~]# usermod -a -G zs zs
8.修改用户的密码 ;
passwd :
1.root /当前用户 : :
[root@sygy10 ~]# passwd zs
9.sudo 普通用户 临时 使用root的最大权限
1.配置 /etc/sudoers
zs ALL=(ALL) NOPASSWD: ALL
2. 使用
sudo xx
思考:
sudo su - xxx :
1.命令报不报错
2.需不需要输入密码
cdh : hdfs yarn hive hbase
su - yarn [切换不了]
su - hive 【有点问题】
/sbin/nologin =》 还有个提示
8.文件权限的命令
1.权限
-rw-r--r--. 1 root root 7 4月 13 13:53 1.log
drwxr-xr-x. 2 root root 4096 4月 12 14:03 dir2
drwxr-xr-x: 10字母 =》 权限
第一字母:
d: 文件夹
-:文件
l:软连接 (win 快捷方式)
权限:rwxr-xr-x 9个决定的 755
第一组:rwx =》 4+2+1 = 7 所属用户的权限
第二组 r-x =》 4+0+1 = 5 所属用户组的权限
第三组 r-x =》 4+0+1 = 5 其他用户组的权限
权限:
r 读权限 4
w 写权限 2
x 执行权限 1
- 没权限 0
- rw- r-- r-- =》
2.修改权限命令 -R
chmod
chmod 646 ./1.log
3.chown 改变 所属者
[root@sygy10 tmp]# chown zs:zs 1.log
9.其他命令:
1.查找文件:
1.find
[root@sygy10 ~]# find / -name "*1.log*"
2.locate
locate
2.系统相关的命令:
1.内存
free
2.磁盘
df
3.负载
top
load average: 0.00, 0.01, 0.05 各自不要超过 10
3.可能遇到的问题 :
编辑文件 swp文件
进程+端口号 :
yum : httpd
1.查看进程号:
1.java 代码 =》 jdk =》 jps
2. ps -ef | grep 程序的名字(pid) => pid
2.查看端口号 port
netstat -nlp | grep pid
通讯的命令:
1.ping ip
2.telnet ip port
下载 :
1. wget
2.curl
命令 + url
tar :
linux 处理 归档文件的命令
归档文件:
普通文件:1.log 1m
归档文件:1.log.tar 1m
压缩文件:1.log.tar.gz 0.9m
1.普通 =》压缩 归档文件
1.log =》1.log.tar.gz
tar -zcvf xxx.tar.gz file...
-cf => 创建一个新归档 + 使用归档文件
z => 压缩 gz
v =》详细地列出处理的文件
eg:
[root@sygy10 ~]# tar -zcvf dir.tar.gz dir2 dir4 jdk-8u212-linux-x64.tar.gz
2.解压
tar -zxvf xxx.tar.gz
-xf => 解压 +使用归档文件
z => 压缩 gz
v =》详细地列出处理的文件
百度 、谷歌 、 加一个功能 =》 github 码云 flinkcdc =》 maxwell 源码 =》 flink antrl4 sql
shell :
1.什么是shell ? 脚本语言 python
1.一个编程的语言
2.可以执行的文件
3.文件内容 linux命令组成的
1.shell语法入门
1.入门
1.文件 xxx.sh 结尾
2.第一行 #!/bin/bash
1.编写脚本
vim wc.sh
2.得有执行权限【不一定】
1.不给文件权限
sh xxx.sh
[root@sygy10 shell]# sh ./wc.sh
word count
[root@sygy10 shell]# cat wc.sh
#!/bin/bash
echo "word count"
2.给文件 执行权限
[root@sygy10 shell]# chmod 744 ./wc.sh
[root@sygy10 shell]# ./wc.sh
word count
[root@sygy10 shell]# sh ./wc.sh
word count
补充:
1.给权限
[root@sygy10 shell]# chmod u+x ./wc.sh
[root@sygy10 shell]# ./wc.sh
word count
[root@sygy10 shell]# ~/shell/wc.sh
word count
[root@sygy10 shell]# sh ~/shell/wc.sh
word count
2. debug
1.[root@sygy10 shell]# sh -x ./wc.sh
2.
#!/bin/bash -x
echo "word count"
2.定义变量 引用
eg:
[root@sygy10 shell]# cat variable.sh
name="zhangsan"
dt1="date"
dt2=`date`
echo $name
echo $dt1
echo $dt2
1.定义变量的方式:
key=value
注意:
1.= 前后不能有空格
2.变量名一般都是大写的【标准】
2.变量的种类:
shell中变量的数据类型 =》 string
1.静态
k="v" k='v' k=v
2.动态
k=`v` : v是变量 v系统自带的命令
3.引用
$k
${k}
任务调度:
shell =》
时间点: T+1 、h+1 20min
20220414 =》20220413
20220414 0:05
1.yarn资源
2.看你几点上班
crontab 命令 =》 定时调度
开源框架:
dophschudule 【恢复数据、重跑数据】
xxl 【shell -》 】
azkanban xx
ozzio xx
airflow 【费劲】
runduck
自己开发
3.shell脚本 参数传递 :
1.$n
$1 $2
[root@sygy10 shell]# cat parameter.sh
echo "脚本文件名: $0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "参数个数: $#"
echo "传递的参数作为一个字符串: $*"
echo "传递的参数作为一个字符串: $@"
echo "脚本运行时的pid :$$"
补充:
1.传递参数 “空格” 作为符号分割
2.参数本身带有空格 要加双引号
4.数组
语法格式:
arr=(v1 v2 ... vn)
1.数组用()表示
2.元素用 空格 分割
eg:
[root@sygy10 shell]# cat arr.sh
arr=(zs lisi ww zl)
echo "所有元素 : ${arr[@]}"
echo "第一个元素 : ${arr[0]}"
echo "元素个数 : ${#arr[@]}"
5.流程控制
分支
循环
1.分支 if else
语法格式:
if condition;then
业务代码
else
业务代码
fi
condition => 条件判断语法
[ condition ]
结果:
非空 true
空 false
[ hadoop ]
$? => 获取上一个程序运行的结果 :
1.成功 0
2.失败 非0的数据
条件表达式:
1.数值判断
= 等于
== 等于
-lt 小于
-eq 等于
-ge 大于等于
-le 小于等于
-gt 大于
-ne 不等于
2.权限判断
-r
-w
-x
3.文件判断
-f
-e
-d
eg:
[root@sygy10 shell]# cat if.sh
name1="zs"
name2="lisi"
if [ ${name1} == ${name2} ];then
echo "等于"
else
echo "不等于"
fi
if elif 语法格式:
if condition;then
业务代码
elif condition;then
业务代码
else
业务代码
fi
eg:
[root@sygy10 shell]# cat if_2.sh
score=$1
if [ ${score} -gt 90 ];then
echo "优秀"
elif [ ${score} -ge 60 ];then
echo "良"
else
echo "不及格"
fi
循环:
语法格式:
foreach:
for el in item1 item2 ... itemn
do
业务代码
done
for i :
语法格式 :
for((i=0;i<size;i++))
do
业务代码
done
eg:
[root@sygy10 shell]# cat for.sh
for x in 1 2 3 4
do
echo "${x}"
done
echo "-----------------"
for((i=0;i<5;i++))
do
echo "v is ${i}"
done
while:
while condition
do
业务代码
done
eg:
[root@sygy10 shell]# cat while.sh
i=1
while ((${i}<=5))
do
echo "v is ${i}"
let i++
done
总结:
条件表达式 不能用 < >
while for 能用 < > 不能用 -gt
[] =》 条件判断
() => 数值运算
https://blog.csdn.net/taiyang1987912/article/details/39551385?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=1
监控 服务器
ip hostname
linux01 linux02 linux03
df
free
[root@sygy10 shell]# cat split.sh
str="linu01,linu02,linux03"
arr=(${str//,/ })
for linux in $arr[@]
do
echo ${linux}
done
str.split(",")
shell =>
IFS变量 =》 字符串分割的效果
补充: linux 文本分析的 命令
awk =》 取出文本内容
sed =》 文本替换
awk :
1.获取列
[root@sygy10 shell]# cat 1.log | awk '{print $1}'
a
1
[root@sygy10 shell]# cat 1.log | awk '{print $1,$2}'
a b
1 2
2.获取行
[root@sygy10 shell]# cat 1.log | awk 'NR==1{print}'
a b c
[root@sygy10 shell]# cat 1.log | awk 'NR==2{print}'
1 2 3
[root@sygy10 shell]# cat 1.log | awk 'NR>1{print}'
1 2 3
[root@sygy10 shell]# cat 1.log | awk 'NR>=1{print}'
2.sed
文本替换
1.a 替换成 dd
[root@sygy10 shell]# cat 2.log
a a b
1 a 3
[root@sygy10 shell]# sed -i 's/a/dd/' 2.log #每行 第一次遇到 a 替换成dd
[root@sygy10 shell]# cat 2.log
dd a b
1 dd 3
2.全局替换
把所有的a 都替换成 dd
[root@sygy10 shell]# sed -i 's/a/dd/g' 2.log
坑:
[root@sygy10 shell]# sed -i 's#dd#a#g' 2.log
替换文件路径:
/path/a
p1="/path/a"
p1="/path1/a1"
sed -i 's/\/path\/a/\/path1\/a1/g' 3.log
sed -i 's#/path/a#/path1/a1#g' 3.log
sql => 文件
spark-submit -f xxx.sql
hive -f "sele"
-e
linux模板机:
1. ip 动态ip =》静态ip
1.内网
2.学习方便
2.关闭防火墙 :
1-65535
关闭防火墙
3.额外的安装包 :
1.jdk =》 卸载掉
2.mysql =》 mysql自带的额外包【安装mysql 去掉就行】 【superset mysql自带的额外包】
ip:
1.win =》 vmware :
1.子网ip 1-255
192.168.10.0
2.网关
192.168.10.2
2.linux => 静态ip
IPADDR=192.168.10.10
GATEWAY=192.168.10.2
DNS1=192.168.10.2
[root@sygy10 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
ONBOOT="yes"
IPADDR=192.168.10.10
GATEWAY=192.168.10.2
DNS1=192.168.10.2
【重启网络或者 重启机器】
service network restart
关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
额外的安装包 :
1.jdk =》 卸载掉
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
linux =》 centos :
1.安装软件:
1.yum
2.rpm
3.tar
rpm :
卸载:
1.查询 java
rpm -qa | grep -i java
2.卸载
rpm -e --nodeps xxx
克隆之后:
1.机器的名字
vim /etc/hostname
2.机器的ip
10 -》 03
vim /etc/sysconfig/network-scripts/ifcfg-ens33
改ip 跟机器号对应上
规范:
[hadoop@sygy03 ~]$ mkdir app project software shell data log
MySQL:
1.版本:
5.6 【少】
5.7 【多】
8.x 【】
2.部署平台:
win =》
mac =》
linux =》
1.两种方式
1.rpm包 =》 部署简单 【学习使用】
2.tar包 =》 部署复杂 【生产上用】
安装mysql:
1.卸载 mysql 相关的包
[root@sygy03 software]# rpm -qa|grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64
[root@sygy03 software]# rpm -e --nodeps mariadb-libs
[root@sygy03 software]# rpm -qa|grep mariadb
2.安装mysql
1.解压
[root@sygy03 software]# tar -xvf ./mysql-8.0.21-1.el7.x86_64.rpm-bundle.tar -C ./mysql
2.安装
rpm :
rpm -ivh mysql-community-common-8.0.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-8.0.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.21-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.21-1.el7.x86_64.rpm
3.启动
1.查看配置mysql
vim /etc/my.cnf
日志文件:/var/log/mysqld.log
2.mysql 初始化
mysqld --initialize --user=mysql
临时密码:
root@localhost: (mdeIsSmq3s6
root
(mdeIsSmq3s6
3.启动mysql
systemctl start mysqld
4.登录mysql
[root@sygy03 mysql]# mysql -uroot -p\(mdeIsSmq3s6
5.修改密码
alter user root@localhost identified by '123456';
6.修改任何 ip 都可以访问 mysql
update mysql.user set host='%' where user='root';
7.刷新权限
flush privileges;
mysql 远程连接工具:
1.dbvear =》 hive phoniex clickhouse
2.netcat
3. db
mysql 语法:
1.聚合函数(分组函数)
group By =》 分组
聚合函数 =》 指标统计 sum avg max min count
需求:
统计 每个部门有多少个人 ?
c查什么:
维度 : 部门
指标 : 人数
聚合统计逻辑:
聚合统计:
group by +聚合函数
group by =》 分组
20,<20,20,20>
30,<30,30,30,30>
10,<10,10,10,10>
聚合函数 =》 指标 count
20,3
30,4
2.开窗函数
1.聚合函数 : 多行数据 按照一定规则 进行聚合 为一行
sum avg max 。。。
理论上: 聚合后的行数 <= 聚合前的行数 [看维度选取 groupby 里面的字段]
2.需求:
既要显示 聚合前的数据 又要显示 聚合后的数据 ?
eg:
id name sal dt sal_all
1 zs 1000 2022-4 1000
2 ls 2000 2022-4 2000
3 ww 3000 2022-4 3000
1 zs 1000 2022-5 2000
2 ls 2000 2022-5 4000
3 ww 3000 2022-5 6000
窗口函数:
窗口 + 函数
窗口: 函数运行时 计算的数据集的范围
函数:运行时的函数
1.聚合函数
2.内置窗口函数
语法结构:
函数 over([partition by xxx,...] [order by xxx,...] )
over() :以谁进行开窗 【table】
partition by: 以谁进行分组 【group by column】
order by: 以谁进行排序 【column】
窗口函数:
数据:
服务器 每天的启动 次数
linux01,2022-04-15,1
linux01,2022-04-16,5
linux01,2022-04-17,7
linux01,2022-04-18,2
linux01,2022-04-19,3
linux01,2022-04-20,10
linux01,2022-04-21,4
统计累计问题:
需求:
每个服务器每天的累计 启动次数
name dt cnt
linux01,2022-04-15,1
linux01,2022-04-16,5
linux01,2022-04-17,7
linux01,2022-04-18,2
linux01,2022-04-19,3
linux01,2022-04-20,10
linux01,2022-04-21,4
name dt cnt cnt_all
linux01,2022-04-15,1 1
linux01,2022-04-16,5 6
linux01,2022-04-17,7 13
linux01,2022-04-18,2 15
linux01,2022-04-19,3 18
linux01,2022-04-20,10 28
linux01,2022-04-21,4 32
create table window01(
name varchar(50),
dt varchar(20),
cnt int
);
每个服务器每天的累计 启动次数
1.聚合函数
COUNT,SUM,MIN,MAX,AVG
select
name,
dt,
cnt,
sum(cnt) over(partition by name order by dt ) as cnt_all
from window01;
2.内置窗口函数
窗口大小:
select
name,
dt,
cnt,
sum(cnt) over(partition by name order by dt ) as sum_all,
-- sum(cnt) over(partition by name order by dt ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) as sum_all1
-- sum(cnt) over(partition by name order by dt ROWS BETWEEN 3 PRECEDING AND CURRENT ROW ) as sum_all2
-- sum(cnt) over(partition by name order by dt ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING ) as sum_all3
-- sum(cnt) over(partition by name order by dt ROWS BETWEEN 3 PRECEDING AND UNBOUNDED FOLLOWING) as sum_all4
sum(cnt) over(partition by name order by dt ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) as sum_all5
from window01;
2.内置窗口函数
1.取值 串行
2.排序
RANK
ROW_NUMBER
DENSE_RANK
CUME_DIST
PERCENT_RANK
NTILE
NTILE:
ntile
需求:
把数据按照某个字段进行排序 ,把数据分成几分
select
name,
dt,
cnt,
sum(cnt) over(partition by name order by dt ) as sum_all,
ntile(2) over(partition by name order by dt ) as n2,
ntile(3) over(partition by name order by dt ) as n3
from window01 ;
把数据平均分配 指定 N个桶 ,如果不能平均分配 ,优先分配到 编号 小的里面
RANK
ROW_NUMBER
DENSE_RANK
RANK: 从1 开始 , 按照顺序 相同会重复 名次会留下 空的位置 生成组内的记录编号
ROW_NUMBER: 从1 开始 , 按照顺序 生成组内的记录编号
DENSE_RANK:从1 开始 , 按照顺序 生成组内的记录编号 相同会重复 名次不会会留下空的位置
select
name,
dt,
cnt,
sum(cnt) over(partition by name order by dt ) as sum_all,
RANK() over(partition by name order by cnt desc ) as rk,
ROW_NUMBER() over(partition by name order by cnt desc) as rw,
DENSE_RANK() over(partition by name order by cnt desc ) as d_rk
from window01 ;
1. 串行
LEAD
LAG
1. 串行
LEAD:窗口内 向下 第n行的值
LAG:窗口内 向上 第n行的值
LEAD(column,n,default)
column => 列名
n =》 取 几行
default =》 取不到就给一个默认值
select
name,
dt,
cnt,
sum(cnt) over(partition by name order by dt ) as sum_all,
LEAD(dt,1,"9999-99-99") over(partition by name order by dt ) as lead_alias,
LAG(dt,1,"9999-99-99") over(partition by name order by dt ) as lag_alias
from window01 ;
2.取值
FIRST_VALUE
LAST_VALUE