项目任务
(1)将数据导入Hive数据库
(2)探索数据,汇总数据建立数据仓库(Sales主题)
(3)PowerBI实现数据可视化
(4)使用python代码发送日报
正则表达式
正则表达式在线生成工具
三大解析工具:正则表达式【正则表达式不等于re模块】 > xpath > beautifulsoup。(xpath 和 beautifulsoup需要先解析成节点的树状结构,而正则表达式可以直接进行文本匹配)
只要不是最后一行,每行都以 ‘\n’ 结尾;(.*?);
【返回对象时,用.group()取出;返回列表时,不用.group()】
- re.compile()用来编译正则表达式,
- re.match() 只匹配开头,返回对象,.group();
- re.search() 只匹配一次,返回对象,.group();
- re.findall() 匹配所有,并返回列表。
- re.I:不区分大小写;
- group() 同 group(0) 就是匹配正则表达式整体结果
- group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。
数据仓库
数据仓库的建设中,一般都会围绕着星型模型和雪花模型来设计表关系或者结构。数据仓库大多数时候是比较适合使用星型模型构建底层数据Hive表,通过大量的冗余来提升查询效率。
- 星型模型:提升查询效率
维度表:不常更新;每个维表都有一个维作为主键。
事实表:像日志,每天都会产生;所有这些维的主键组合成事实表的主键。
(强调的是对维度进行预处理,将多个维度集合到一个事实表,形成一个宽表。这也是我们在使用hive时,经常会看到一些大宽表的原因,大宽表一般都是事实表,包含了维度关联的主键和一些度量信息,而维度表则是事实表里面维度的具体信息,使用时候一般通过join来组合数据,相对来说对OLAP的分析比较方便) - 雪花模型:比较符合数据库范式的理念,数据冗余少
雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 "层次 " 区域,这些被分解的表都连接到主维度表而不是事实表。雪花模型更加符合数据库范式,减少数据冗余,但是在分析数据的时候,操作比较复杂,需要join的表比较多所以其性能并不一定比星型模型高。
数据仓库:(基础层、汇总层、应用层);不同的层代表不同的库,可以设置不同的权限、进行权限管控(如业务员只能访问应用层,应用层都是加工汇总好的数据;不让你访问基础层,防止增删数据);
hive数据库是离线数据库(跑在hadoop大数据平台、故适合大数据计算),不能用来做生产数据库(意味着连接到生产的前端系统,如mysql);
powerbi报表制作,连接windows安装odbc【powerbi 连接集群hive环境,提取数据,制作报表;此步需要集群开启远程连接以及Windows安装odbc。调试好后就可以发布到服务器上使用网址来连接】,坑:企业邮箱??
linux文件系统、文本操作命令
linux 没有盘符这个概念,只有一个根目录 /,所有文件都在它下面- /opt:给主机额外安装软件所摆放的目录;
- /tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。
终端命令提示符介绍
base 是平常写python代码来使用的,hive_37是python连接hive 来使用的环境;instance-grq6ue3 表示主机名;~ 是当前用户默认进入的路径,~是家目录的简写;$:是普通用户, #:是超级用户
“.”代表当前目录,
“..”代表上一级目录,
以“.”开头的文件为隐藏文件,需要用 -a 参数才能显示。
type:看内外部命令??
man:外部命令?,如chmod??;
help:内部命令用help,如source;
yum:
Linux所有的目录和文件名大小写敏感;Linux系统中没有严格的后缀(格式),所以创建文件时可以命名为任意的文件名???
显示当前文件:ls(显示隐藏文件ls -a);
cat与管道
- 移动文件mv
用途1-文件从某一个目录移动到另一个目录;
用途2-文件重命名。- touch:
用途1:文件已存在,刷新时间;
用途2:创建文件;
cat与管道
目录返回:cd /(返回根目录);cd (返回当前用户的家目录??);查看pwd。
创建新目录与递归创建目录:mkdir -p a/b/c;
创建文件:touch a.txt;
删文件夹:rm -r(rm表示删文件夹、-r表示递归/迭代【目录要加-r】);rm -f(强制force删除的意思);
编辑文本:touch a.txt;vi a.txt【命令模式(:wq退出),按i进入编辑模式(shift+zz退出)】;i/esc/编辑/shift+zz退出;
vi命令(全屏编辑器)
【任务调度】Linux下的任务调度分为两类,系统任务调度(/etc/crontab)和用户任务调度(/var/spool/cron)。
crontab格式:前五段是时间设定段,第六段是要执行的命令段.png
【重定向】>>追加;>表示覆盖。
输出重定向会覆盖原来的内容,>>输出重定向则会追加到文件的尾部。
修改文件权限:chmod
r 读取权限,数字代号为 "4"
w 写入权限,数字代号为 "2"
x 执行权限,数字代号为 "1"
- 不具任何权限,数字代号为 "0"
chmod 751 file: rwx + r-x + --x
文件所有者:读、写、执行权限
同组用户:读、执行的权限
其它用户:执行的权限
全屏编辑器:编辑模式、末行模式、输入模式。
全屏编辑器
移动光标
捕获.PNG
末行模式:查找并替换
末行模式:查找并替换
ip改动
sed与awk命令.PNG
创建快捷方式:ln -s frog.txt frog_ruan.txt【有-s表示软链接;无-s表示硬链接】;
- 软链接-s:软链接不占用磁盘空间,源文件删除则软链接失效。
- 硬链接:硬链接只能链接普通文件,不能链接目录。
元数据stat:元数据的修改时间change、文件数据的修改时间modify。
用户权限:
三种身份owner用户U、group用户所在组的其他用户G、others其他用户组的用户O;
三种权限r(read)w(write)x(execute);
ls -l
【20200318】
bash对空格敏感;read命令对换行符敏感(逐行读取);绿色表示文件夹、白色表示文件;
每个一进程至少都有3个文件描述符:0(标准输入)、1(标准输出)、2(错误输出);
linux学习1
man
linux文件系统命令
shell:脚本 编程(先学bash后学shell)【#! /bin/bash(当前bash内部启动子bash)】
linux学习内容3种安装方式:编译安装、yum安装、rpm安装;
用户交互输入、文本文件输入;
当前bash(父bash)执行:source .两种方式;(子bash)执行:bash ./。
文本流
重定向:覆盖重定向、追加重定向。
任何一个进程在系统中有三块区域:堆、栈、程序段(bash在此)。
中文转换:LANG=zh_CN.UTF-8
hive:#!bin/sh
-v:输出信息-v(输出sh中的命令show databases);
-e:执行内容-e【更常用】;
-f:执行sql脚本-f(hive -f wt2.sql);
查看hdfs 文件系统的目录结构:
【两种其他方式的建表方式】
- 仅复制表结构;
-
既复制表结构,也复制表信息【走MR方式建表】。
两种其他方式的建表方式
【hive建表(内部表[分区表])、导入数据】load data命令就是把数据从linux上放到了hdfs路径上。
use wt;
drop table student;
create table student(id int comment 'id',name string comment '姓名',score string comment '成绩')
[partitioned by(day string)]
[clustered by(id) sorted by(name) into 4 buckets]
row format delimited fields terminated by ','
lines terminated by '\n'
stored as textfile[表示:文件内容存储格式];
create table if not exists DimCurrency(
CurrencyKey string,
CurrencyAlternateKey string,
CurrencyName string
)row format serde 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
with serdeproperties(
'field.delim'=',',
'serialization.encoding'='UTF-8')
stored as textfile;
【SerDe序列化与反序列化??】采用序列化:将文件内容序列化为hive底端的对象;反序列化:hive里面的一个对象输出到textfile中去。
捕获.PNG
【可以查看建表的详细信息,如内表/外表】
show create table student;
desc formatted userwud; #**无table,否则会报错
【加载本地数据】
load data local inpath '/home/wt/student.txt' [overwrite有表示覆盖;无则表示追加] into table student [partition (day='20200317') 分区表:最终显示会多一列.day] ;
【加载hdfs数据(注:该操作是移动数据)】
load data inpath 'hdfspath' [overwrite有表示覆盖;无则表示追加] into table student;
【分区表查看】
[hive]show partitions student;
【partition相关】
create用partitioned by ;
show用partitions;
load用partition。
alter(增加分区)用partition:alter table test add partition(dt='20140910');(查询不到数据可能因为未添加分区,即外部分区表需要添加分区才能看到数据)
- 【linux系统写hadoop fs命令】
hadoop fs -ls / #此处有空格
- 【hive里面写dfs 命令】
【删除内部表时,内部表中的数据和元数据将同时删除,故下面的语句返回为null】
dfs -ls hdfs://localhost:9000/user/hive/warehouse/frog_wt.db/student;
【删除外部表时(hadoop中的路径还存在??),只删除元数据,不删除数据】
[hive]drop table student;
[linux]hadoop fs -ls /tmp/student
【分区partitioned by(动态分区)、分桶clustered by】桶是更为细粒度的数据范围划分(优点——更高的查询处理效率;取样sampling更高效)。
分桶前开启set hive.enforce.bucketing=true;
如下图,有几层分区是固定的;桶对应数据,而区相当于目录
【动态分区】
动态分区使用前设定参数
【内部表、外部表】删除表时,内部表中的数据和元数据将同时删除;外部表只删除元数据,不删除数据。
【建外部表(指定location)】
use wt;
drop table student;
create [external] table student(id int comment 'id',name string comment '姓名',score string comment '成绩')
row format delimited fields terminated by ','
lines terminated by '\n'
stored as textfile
location '/tmp/student';
【hive数据导出】
hive数据导出
【控制台显示数据(此时路径要完整)】
hadoop fs -text hdfs://localhost:9000/user/hive/warehouse/adventure_ods_wt.db/dimaccount/*
【hive中执行insert dir方式:导入到本地local目录可以指定分割符】
[hive中执行]
insert overwrite local directory '/home/frog004/wt' ##此处的local表示插入到本地目录;并且导入到wt的文件夹下
row format delimited fields terminated by ',' ## ','分隔符而非 '\t'
select * from adventure_dw_wt.dimproduct;
insert overwrite local directory '/home/froghd/wt/1' ##此处的local表示插入到本地目录
row format delimited fields terminated by '\t'
select * from adventure_ods_wt.dimaccount;
【hive与shell结合的方式】
[linux中执行]
hive -e 'select * from adventure_ods_wt.dimaccount'
hive -S -e 'select * from adventure_ods_wt.dimaccount' | grep Cash > '/home/froghd/wt/1/wttest.txt'
注意:重定向到目录?目录里面的文件?
【常用函数】
select id,name,score,case when score<60 then '不及格'
else '及格' end as grade
from student;
select *,if(score>60,'pass','fail') as grade
from student;
【查询插入】
insert into student
select 5,'wt',null;
insert into table student values (6,'lisi',80);
【聚合函数】
非空计数count();
计算count(1)【空、非空均计数,即全null也+1】;
【排序函数】计算节点?job数?reduce数?*
order by:实际工作不常用,因为???(order by是全局排序,只使用一个reduce);常用得到的统计结果中的一小部分,放入关系型数据库来排序,会快很多。
order by是全局排序,只使用一个reduce
group by:where条件在map执行,group by在reduce执行(having也在reduce中执行);group by使用了reduce操作,受限于reduce数量(故可以通过设置reduce数量的语句来操作;groupby数据倾斜、优化参数(启动2个MRjob来进行优化操作,【但启动job初始化也会占用时间】)语句。
有两个问题——网络负载与数据倾斜(数据倾斜经常出现在group by中)。
【数据倾斜(相同key的值就会拉到一个或几个节点上;用最通俗易懂的话来说,数据倾斜无非就是大量的相同key被partition分配到一个分区里,造成了’一个人累死,其他人闲死’的情况)】就是我们在计算数据的时候,数据的分散度不够,导致大量的数据集中到了一台或者几台机器上计算,这些数据的计算速度远远低于平均计算速度,导致整个计算过程过慢。
【数据倾斜定义】指的是并行处理的过程中,某些分区或节点处理的数据,显著高于其他分区或节点,导致这部分的数据处理任务比其他任务要大很多,从而成为这个阶段执行最慢的部分,进而成为整个作业执行的瓶颈,甚至直接导致作业失败。不怕数据量大(归根结底就是分区),就怕数据倾斜。一旦数据倾斜,严重影响效率。
面试必问&数据倾斜:6个解决方法
【Shuffle(shuffle的原理是按照key,来进行values的数据的输出、拉取和聚合的)动作触发,所有相同 key会聚集在节点上】在做数据运算的时候会设计到,countdistinct、group by、join等操作,都会触发Shuffle动作。一旦触发,所有相同 key 的值就会拉到一个或几个节点上,发生单点问题。
group by
reduce数量、groupby数据倾斜的参数设置语句
设置reduce数量、groupby数据倾斜、优化参数(启动2个MRjob来进行优化操作)语句
mapjoin:mapjoin是一种优化操作;没有reduce,只有map操作;使用场景——关联操作的一张表非常小;不等值的链接操作(普通的join只支持等值链接)。
mapjoin
mapjoin2
distribute by(分散数据)、sort by(在reduce上进行操作;局部排序):两者结合出现,确保局部有序(每个reduce的输出都是有序的);
cluster by(相同值的数据聚集到一起,并排序):cluster by col等同于distribute by col order by col。
捕获.PNG
对比
【窗口函数】
可用来去重:row_number() over()
累加:sum() over()
【hive函数基本分类与介绍】
hive函数基本分类与介绍
聚合函数因为处理数据集合,故在reduce阶段使用;
desc function extended concat;
and和or的优先级:先执行and、后执行or;
cast:cast(money as bigint);
if(con,v1,v2);
case when;
concat_ws:带分隔符字符串链接函数;
lead、lag;
rank(1224)、dense_rank(1223)、row_number(1234);
ntile()分片;
窗口函数
【MapReduce总结】
map读取数据;
reduce:??
求职面试(多少种机器学习模型/数据分析要量化管理、量化结果)
影响找工作的三大因素结果导向(突出产出/达到效果:改善了问题从x%提升到了y%)——分析报告:解决什么问题;模型:达到什么效果;BI的产品是什么。
结果导向(突出产出/达到效果)
项目经验模板
转行模板
转行模板2
数据分析与行业研究经验:(提示更多可能:如果有更多数据,还可以怎样做??;数据-分析-结论-效果)
负责公司医疗战略地图项目,利用---指标,分析各城市医疗资源供需现状,独立编制《研究报告》,解决2个问题。
参与公司养老战略地图项目,独立负责爬虫(养老网)、数据可视化部分。
以上工作中对数据有一定了解(而非靠经验),自学python实现爬虫后,技术驱动效率极大地刺激我,并自学机器学习算法,发现我更适合技术工作、数据分析/挖掘相关工作,故转行发展。以上就是我的个人基本情况,如果您对我的工作经验或能力有任何疑问,接下来我将就具体项目跟您深入探讨(你对我哪段项目经验感兴趣?)。
缺点:就高不就低,就远不就近。(本职工作一定ok,业务的话缺少开发经验、开发的话缺少业务策略)
先看职责,再看任职要求(工作时间>经验>工具)。
第一篇:数据仓库概述
理解数据仓库中星型模型和雪花模型
Hive2.0函数大全(中文版)
2020年PowerBI 学习笔记(2)
linux里source、sh、bash、./有什么区别
数据分析常用的22个linux命令
数据分析工作中shell脚本的使用:该脚本表示使用sqoop把生产数据库mysql中的商户交易数据导入到hive数据库
Adventure Works案例分析
Adventure Work Cycles BI项目可视化
Adventure电商分析案例第四篇《sqoop初步学习》
Adventure电商分析案例第五篇《powerbi子弹图》
PowerBI基础1:使用PowerBI制作Bullet Chart子弹图
#!/bin/bash
echo "hello world"
int=1
while(( $int<=5))
do
echo $int
let "int++"
done
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
value1=home
value2=${value1}"="
echo $value2
var1=/etc/
var2=yum.repos.d/
var3=${var1}${var2}
echo $var3
str='http://www.
你的域名.com/cut-string.html'
echo ${str:0:5}
my_array=(A B "C" D)
echo "第一个元素为:${my_array[0]}"
# &1代表标准输出,&2代表标准错误,&-代表关闭与它绑定的描述符
关于2>&1的理解
含义:将标准错误输出重定向到标准输出
网友评论