zoukankan      html  css  js  c++  java
  • Hive 表类型简述

    Hive 表类型简述

    表类型一、管理表或内部表Table Type:  MANAGED_TABLE 

    example:

    create table  Inner(
    id int,
    name string,
    description string
    )

    //用来指定原文件的列分隔符
    row  format delimited fields terminated by ' ';

    表类型二、外部表(原始数据表多建于外部表)

    example:

    create external table extertab(
    nobo int,
    name string,
    job string,
    birthday string,
    salary float,
    bonus float
    )
    row  format delimited fields terminated by ' '
    location'/input/demo';



    表类型三、分区表(既可以是内布表,也可以是外部表,看需求而定!)
    example:

    create  table part@NewYork_England(
    no int,
    name string,
    job string,
    mgrno int,
    birthday string,
    salary float,
    bonus float

     )

    <!—当分区只有一个字段时,称为一级分区表;两个字段为二级分区表;还有三级分区表,分区表创建表的时候需要指定分区字段,分区字段与普通字段的区别:分区字段会在HDFS表目录下生成一个分区字段名称的目录,而普通字段则不会,查询的时候可以当成普通字段来使用,一般不直接和业务直接相关。-->
     partitioned by (province string)
    row format delimitedfields terminated by ' ';

     

    //增加分区
    aler table emp_partadd [if not exist] partition(provine='zhejiang',city='hangzhou') 


    //增加分区并指定分区数据所在目录

    Alter table emp_part add partition(province=’Boston’) location ‘/user/hive/warehouse/mydb.db/emp_part/Boston’;

    //向分区表加载数据

    <!—-本地向分区表中添加数据的方法-->

    load data localinpath '/home/user01/emp.txt' into table emp_part partition(province='CHICAGO');

    <!—-hdfs节点向分区表中添加数据的方法;这个操作会造成当前节点的数据(剪贴)移动至表中-->

    load data inpath'/input/user01/emp.txt' into table emp_part partition (province='CHICAGO');

    <!—-直接从本地将数据填充到至表所在的路径中-->

    dfs -put '/home/vampire/emp.txt'into table emp_part partition (province='CHICAGO');

    [动态分区表]
    严格模式:static partitioned by (county string,states string)
    非严格模式:partitioned by (county string,states string)

    需要设置以下参数:
    //是否开启动态分区功能 0.13版本默认开启
    set hive.exec.dynamic.partition=true;


    //动态分区的模式,默认strict,表示必须指定至少一个分区为静态分区,nonstrict模式表示允许所有的分区字段都可以使用动态分区
    set hive.exec.dynamic.partition.mode=nostrict;


    create table dypart(
    id int,
    name string
    )
    partitioned by (addr string)
    row format delimited fields terminated by ';'; 
    //使用特殊字符作为分隔符时需要转义


    //动态分区必须使用mapreduce才能完成,所以不能使用load方式加载
    insert into table dypart partition (addr) select deptno,deptname,addr as addr from dept;


    -----------------------
    --二级动态分区表
    create external table dypart2(
    empno    int,
    empname string,
    empjob  string,
    mgrno    int,
    birthday string,
    salary  int,
    bonus   float,
    deptno  int
    )
    partitioned by (country string,province string)
    row format delimited fields terminated by ' '
    location '/hive/dynamic/dypart2';
    --location之后的目录可以不存在,创建表会自动创建,但作为外部表推荐目录和数据已经存在


    --开启严格模式
    set hive.exec.dynamic.partition.mode=strict;


    --严格模式中,要求主分区必须为静态分区,辅助分区可以为动态
    insert into table dypart2 partition (country='usa',province) select empno,empname,empjob,mgno,birthday,salary,bonus,depno,depno as province from emp;


    --通过子查询方式
    insert into table dypart2 partition (country='usa',province) select c.empno,c.empname,c.empjob,c.mgno,c.birthday,c.salary,c.bonus,c.depno,c.deptname as province from  (select * from emp a join dept b on a.depno=b.deptno) c;


    --覆盖导入方式,此时overwrite和into不能连用
    insert overwrite  table dypart2 partition (country='china',province) select a.empno,a.empname,a.empjob,a.mgno,a.birthday,a.salary,a.bonus,a.depno,b.deptname as province from emp a join dept b on a.depno=b.deptno;



    表类型四:桶表
    将内部表,外部表和分区表进一步组织成桶表
    可以将表的列通过Hash算法进一步分解成不同的文件存储
    create table test_bucket_table(
    id int,
    name string
    )
    clustered by (id) into 5 bucket;


    表类型五:临时表 TEMPORARY hive-0.14以后支持

     

    操作表的一些常用命令:

    //描述表信息
    desc formatted emp_part;


    //查询全表数据
    select * fromemp_part;


    //查询分区字段表数据
    select * fromemp_part where province='CHICAGO';


    //查看分区信息
    show partitionsemp_part;

    //描述表结构
    desc formatted emp;

    //删除内部表
    drop table dept;


    //删除外部表
    drop table emp;


    //清空表数据
    truncate tablestudent;

     

    //删除分区
    aler table emp_partdrop  partition(provine='zhejiang',city='hangzhou')







     

  • 相关阅读:
    es6 可迭代对象
    前端模板
    快速排序
    parseHTML2Vnode
    最大并发请求
    选择排序
    window命令
    Asp.net问题集锦
    ExtJs5.1.1使用中问题集锦
    Sql Server问题集锦
  • 原文地址:https://www.cnblogs.com/beiyi888/p/9645089.html
Copyright © 2011-2022 走看看