美文网首页
BI项目背景知识学习

BI项目背景知识学习

作者: dataTONG | 来源:发表于2020-03-17 18:45 被阅读0次

    项目任务

    (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);

    • 移动文件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表示硬链接】;

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

    分区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的理解
    含义:将标准错误输出重定向到标准输出
    

    相关文章

      网友评论

          本文标题:BI项目背景知识学习

          本文链接:https://www.haomeiwen.com/subject/msdzehtx.html