美文网首页
Hive表基础

Hive表基础

作者: 码戈 | 来源:发表于2020-06-08 15:36 被阅读0次

    建表

    create table stu(id int,name string) //指定表名、字段
    row format              //row format 代表行格式化
    delimited fields terminated by  '\t';   //demlimited fields分隔字段 以 /t分隔
    

    HDFS存元数据地址
    /home/softwares/hadoop-2.6.1/dfs/data/current/BP-1499552349-192.168.31.160-1574884211184/current/finalized/subdir0/subdir0

    导入数据

    导入本地数据:load data local inpath '/path/' into table XX; = hadoop fs -put filepath /hadooppath/XX

    HDFS上的数据交互:load data inpath 'hadooppath' into table XX; 修改namendoe元数据信息

    分区表(常用)

    分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。
    Hive 中的分区就是分目录,把一个大的数据集根据业务需要(时间)分割成小的数据集。
    在查询时通过 WHERE 子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。
    谓词下推:先走个数据过滤(WHERE)

    语法

    create table dept_partition(
    deptno int, dname string, loc string
    )
    partitioned by (month string)
    row format delimited fields terminated by '\t'
    
    Snipaste_2020-06-08_10-16-07.png

    分区 将month作为一个单独的列
    加载数据到分区表

    load data local inpath '/home/data/dept.txt' into table dept_partition partition (month='2019-06');
    
    Snipaste_2020-06-08_10-20-40.png

    hdfs直接上传
    hadoop fs -put /home/data/dept.txt /user/hive/warehouse/dept_partition/month=2019-08

    增加分区:分区与分区之间是空格
    alter table XX add partition(month='2019-08');

    alter table dept_partition add partition(month='2019-08') partition(month='2018-06'); //多个也ok

    Snipaste_2020-06-08_11-22-31.png

    删除分区:分区与分区之间是“,”

    alter table XX drop partition(month='2019-08');
    alter table dept_partition drop partition(month='2019-08'), partition(month='2018-06'); //多个也ok
    

    查看分区表有多少分区

    >show partition dept_partition;
    >desc formatted dept_partition; //查看分区结构
    

    创建二级分区表

    create table dept_partition2( 
    deptno int, dname string, loc string
    )
    partitioned by (month string, day string)
    row format delimited fields terminated by '\t';
    
    load data local inpath '/home/data/dept.txt' into table dept_partition2 partition (month='2019-07',day='01')
    
    Snipaste_2020-06-08_11-37-22.png

    查询,过滤数据使用

    select * from dept_partition2 where month='2019-07' and day='01';
    

    把数据直接上传到分区目录上,让分区表和数据产生关联的三种方式(重点)

    1.上传数据后修复

    hadoop fs -mkdir -p /user/hive/warehouse/dept_partition/month=2019-11
    
    hadoop fs -put ./dept.txt /user/hive/warehouse/dept_partition/month=2019-11
    
    >msck repair table dept_partition;
    
    修复后可查询.png

    2.上传数据后添加分区(常用)

    hadoop fs -mkdir -p /user/hive/warehouse/dept_partition/month=2019-11
    
    hadoop fs -put ./dept.txt /user/hive/warehouse/dept_partition/month=2019-11
    alter table dept_partition add partition(month='2019-11')
    

    3.load

    load data local inpath '/home/data/dept.txt' into table dept_partition partition(month='2019-11')
    

    增加/修改/替换列信息[add/change/replace]

    alter table XX add columns(name string)
    
    alter table XX change column name sex string //修改name列名,注意加上类型
    

    replace会替换表中所有列,需写全字段

    alter table XX replace columns(name string, sex string)
    

    删表

    drop table dept_partition;
    

    复制表结构

    create table XX like xx;
    

    数据导入、导出

    load

    hive> load data [local] inpath '/opt/module/datas/student.txt' [overwrite] | into table student [partition (partcol1=val1,…)];
    

    load data:表示加载数据
    local:表示从本地加载数据到 hive 表;否则从HDFS 加载数据到 hive 表
    inpath:表示加载数据的路径
    overwrite:表示覆盖表中已有数据,否则表示追加
    into table:表示加载到哪张表
    student:表示具体的表
    partition:表示上传到指定分区

    insert

    >insert into table XX
    >select ___ from XX;
    

    AS Select 创建表并且加载数据

    create table  student3 
    as select id, name from student;
    

    创建表时通过 Location 指定加载数据路径

    location.png

    导出

    insert:将表中数据导出到本地或者hdfs
    local为本地路径,不加local为hdfs

    insert overwrite local directory 'path'
    row format delimited fields terminated by '\t'
    select * from XX;

    hadoop命令导出到本地

    hadoop fs -get hdfspath loaclpath
    

    export 与 import

    export table XX to 'hdfspath';
    import table XX from 'hdfspath'

    清除表中数据truncate
    Truncate 只能删除管理表,不能删除外部表中数据

    truncate table XX;

    相关文章

      网友评论

          本文标题:Hive表基础

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