BI项目背景知识学习

2020-03-17  本文已影响0人  dataTONG

项目任务

(1)将数据导入Hive数据库
(2)探索数据,汇总数据建立数据仓库(Sales主题)
(3)PowerBI实现数据可视化
(4)使用python代码发送日报

正则表达式

正则表达式在线生成工具
三大解析工具:正则表达式【正则表达式不等于re模块】 > xpath > beautifulsoup。(xpath 和 beautifulsoup需要先解析成节点的树状结构,而正则表达式可以直接进行文本匹配
只要不是最后一行,每行都以 ‘\n’ 结尾;(.*?);
【返回对象时,用.group()取出;返回列表时,不用.group()】

数据仓库

数据仓库的建设中,一般都会围绕着星型模型雪花模型来设计表关系或者结构。数据仓库大多数时候是比较适合使用星型模型构建底层数据Hive表,通过大量的冗余来提升查询效率。

数据仓库:(基础层、汇总层、应用层);不同的层代表不同的库,可以设置不同的权限、进行权限管控(如业务员只能访问应用层,应用层都是加工汇总好的数据;不让你访问基础层,防止增删数据);

hive数据库是离线数据库(跑在hadoop大数据平台、故适合大数据计算),不能用来做生产数据库(意味着连接到生产的前端系统,如mysql);
powerbi报表制作,连接windows安装odbc【powerbi 连接集群hive环境,提取数据,制作报表;此步需要集群开启远程连接以及Windows安装odbc。调试好后就可以发布到服务器上使用网址来连接】,坑:企业邮箱??

linux文件系统、文本操作命令

linux 没有盘符这个概念,只有一个根目录 /,所有文件都在它下面
“.”代表当前目录,
“..”代表上一级目录,
以“.”开头的文件为隐藏文件,需要用 -a 参数才能显示。

type:看内外部命令??
man:外部命令?,如chmod??;
help:内部命令用help,如source;
yum:
Linux所有的目录和文件名大小写敏感;Linux系统中没有严格的后缀(格式),所以创建文件时可以命名为任意的文件名???

显示当前文件:ls(显示隐藏文件ls -a);

  • 移动文件mv
    用途1-文件从某一个目录移动到另一个目录;
    用途2-文件重命名。
  • touch:
    用途1:文件已存在,刷新时间;
    用途2:创建文件;
cat与管道
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表示硬链接】;

元数据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 文件系统的目录结构:

【两种其他方式的建表方式】

【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;
如下图,有几层分区是固定的;桶对应数据,而区相当于目录

分区partitioned by、分桶clustered by
【动态分区】
动态分区使用前设定参数

【内部表、外部表】删除表时,内部表中的数据和元数据将同时删除;外部表只删除元数据,不删除数据。

【建外部表(指定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】;

sum()+1可能报错,故要使用cast类型转换函数
【排序函数】
计算节点?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操作,受限于reduce数量(故可以通过设置reduce数量的语句来操作)
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的理解
含义:将标准错误输出重定向到标准输出
上一篇下一篇

猜你喜欢

热点阅读