zoukankan      html  css  js  c++  java
  • 大数据HIve视频教程全集笔记

    一.课程介绍

    分十一章

    • 基本概念
    • 安装
    • 数据类型
    • DDL,数据定义
    • DML,数据操作
    • 查询
    • 函数
    • 压缩和存储
    • 调优
    • 实战谷粒影音
    • 常见错误及解决方案

    二.基本概念

     Hive是个翻译引擎,仅存在于客户端,计算集群中不存在。

    Hive无法支持迭代计算,数据挖掘不擅长

    三.安装

    Hive配置文件:conf/hive-env.sh.template,改为sh脚本再执行。要改hadoop文件位置和hive配置文件夹内容

    use 《数据库》;

    show tables;

    create tables student(id int, name sring);

    insert into student  values(2, "sq");

    desc student;

    quit;

    load data local inpath  "/pata/data.txt" into table student;

    drop table student;

    create tables student(id int, name sring) row format delimited fields terminated by " ";

    hive默认只有单一用户数据库

    Mysql无主机登录:mysql数据库里user表;select User,Host,Password from user;update user set host='%' where host='localhost';delete from user where Host=;hadoop102';flush privilleges;

    配置Hive MetaStore数据放Mysql里:1.拷贝mysql驱动到hive/lib下;2.conf/hive-site.xml配置;3.会在mysql里创建metastore数据库(可配置);

    -e:sql在字符串里;-f:sql在文件里

    exit:先提交再退出

    quit:直接退出,但是新版的无区别了

    dfs ls /;

    ! ls /;

    历史命令在家目录下的.hivehistory中

    hive-site.xml里可以配置当前数据库名称和表结构名称,hive.cli.print.header和hive.cli.print.current.db

    数据仓库位置:hive.metastore.warehouse.dir里配置

    日志默认都在logs文件下,hive-log4j.properties,配置hive.log.dir

    修改配置:全局修改;命令行用-hiveconf配置键值对;终端中用set命令设置

    set 键值,查看值

    四.数据类型

    hive数据类型大写

    复合数据类型:STRUCT,MAP,ARRAY

    CAST('1' as INT);把字符串1转换为INT

    五.DDL

    创建数据库:create database 《》;,默认文件夹路径在/usr/hive/warehouse/*.db

    location后可以指定路径

    if not exists不存在时执行

    查询数据库:show databases;

    模糊查询:show databases like 'hive#';

    查询详情:desc database <数据库>;

    extended查看额外信息

    alter database  《数据库》 set dbproperties (”a“="b");

    删除数据库:drop database 《数据库》;数据库不为空删不掉,最后要加cascade

    创建表:CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type) [COMMNET col_commnet],...]……

    要用JDBC连接Hive的话,要开hiverserver2服务;Beeline可以模拟JDBC连接Hive;

    管理表:也叫内部表,表没了数据也没了

    create table as 

    create table like

    desc formatted <数据表>:查看表结构

    内部表用来存中间结果和结果表,外部表存原始数据

    内部表和外部表互相转换:alte table student2 set tlproperties(‘EXTERNAL'='FALAE');区分大小写和引号模式

    partition就是建立一个单独的文件夹,大的数据集分为小的数据集,就是分目录,可以避免全表扫描

    数据导入Hive时要指定分区,partition(分区名=’‘),指定分区列

    alter table student add partition(分区名='');添加多个分区用空格分离

    add改为drop即删除分区,删除多个partition用逗号分离

    二级分区表:两个分区字段

    分区表和数据产生关联的三种方式:

    1.上传数据后修复:msck repair table 表名;

    2.上传数据后添加分区

    3.上传数据后load到分区

    show partitions 表名;显示分区

    修改表:

    1.重命名:ALTER TABLE 名字 RENAME TO 新名

    2.增加、修改、删除表分区

    3.增加、修改、替换列信息:ALTER TABLE 表名 CHANGE  COLUME 列旧名 列新名 列类型 ,change可为add和replace,replace是替换所有字段

    六.DML

    load加载数据

    本地是复制导入,hdfs是移动导入;

    insert插入数据:可以把select的中间表查询结果插入;可以有多插入模式,多行来自一个表可以放在开头;

    as  select方式创建表

    创建表时通过location关键字指定数据位置来加载

    import来导入export的数据

    导出:

    insert,导出到文件夹

    hadoop dfs -get导出

    hive shell输出重定向

    export table 表明 to 路径,命令

    清空表数据:truncate tabel 表名

     hive可以导入任意格式的数据,只要数据可以被格式化可以被理解

    七.查询

    Hive的cwiki上有LanguageManual,可看select部分

    列重命名:可以用as分隔也可以不用

    join只能等值连接,内连接 left right full连接

    order by,一个全局reducer,默认升序

    sort by,局部reducer

    属性mapreduce.job.reduces决定有几个reducer job,默认-1;

    distribute by

    类似分区,结合sort by使用,按照字段存在不同的文件中

    cluster by

    sort by和distribute by是一个字段

    分桶表:一个文件夹内数据按文件存储而不是按文件夹,应对数据集过大,语法是clustered by;

    分桶表用insert模式建立;

    hive.enforce.bucketing为true;

    reduce数量要hive自己决定; 

    分桶抽样:

    tablesample(bucket 1 out of 4 on id)

    x为从哪个bucket出,y为bucket的几分之几

    八.函数

    给null赋值:nvl,列如果是null,则返回replace值

    case when:case 字段 when 数值 then 数值 else 数值 end

    行转列:

    所谓的行转列是指把数据表中具有相同key值的多行value数据,转换为使用一个key值的多列数据,使每一行数据中,一个key对应多个value。

    行转列完成后,在视觉上的效果就是:表中的总行数减少了,但是列数增加了。

    concat:连接字符

    concat_ws:用分隔符连接字符,参数的列只能是字符类型或者string类型数组

    collect_set:将某列数据去重,返回数组

    select 
        t1.c_b,
        CONCAT_WS("|", COLLECT_SET(t1.name))
    from (
        select
            CONCAT_WS(",", constellation, blood_type) c_b, 
            name
        from person_info) t1
    group by
    t1.c_b

    列转行:

    所谓的列转行是指把表中同一个key值对应的多个value列,转换为多行数据,使每一行数据中,保证一个key只对应一个value。

    列转行完成之后,在视觉上的效果就是:表中的列数减少了,但是行数增加了。

    explode:将一列中的map、array分为多行

    lateral view udtf(expression) tableAlias as columnAlias,和explode、split等合用,用于拆分后的聚合

    对原来的行进行侧写

    select movie, category_name
    from movei_info lateral view explode(category) tmpTable as category_name;

    窗口函数:

    指定窗口,聚合函数应用窗口范围内数据进行计算

    聚合函数,要是同时选区列,没有group by无法选择

    跟在聚合函数后面,空格分离

    只限定聚合函数

    over:指定分析函数的窗口大小,不加参数即group by生成的组有几个。可以包含distribute by,按照某个字段分区来生成窗口

    窗口限定了数据集合,每行数据按照属性进入不同的窗口中去

    current row:当前行

    n preceding:往前n行

    n following:往后n行

    unbounded:起点。unbounded preceding表示从前面的起点,unbounded following表示到后面的终点。

    lag(col,n):往前第n行数据

    lead(col,n):往后第n行

    ntile(n):有序分区中的行分发到指定数据的组中,各个组有编号,从1开始。ntitle返回的是组号

    九.压缩和存储;

    十.调优

    十一.实战

    十二.常见错误

  • 相关阅读:
    如何设置body高度为浏览器高度
    h5的video下载按钮如何隐藏
    微信小程序中的子父组件传值问题
    elementUI级联选择器2(选择及回显)编辑保存
    elementUI级联选择器(选择及回显)
    vue+elementUI 表格操作行的增删改查
    单独验证非form表单中的input(限制)
    JS中去除数组中的假值(0, 空,undefined, null, false)
    vue 组件之间的传值 (父子传值、兄弟传值)
    http协议的状态码
  • 原文地址:https://www.cnblogs.com/cascle/p/15107714.html
Copyright © 2011-2022 走看看