Hive 表类型简述

 

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

example:

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

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

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

example:

create external table extertab(
nobo int,
name string,
job string,
birthday string,
salary float,
bonus float
)
row  format delimited fields terminated by '\t'
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 '\t';

//增加分区
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 '\t'
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')

Hive 表类型简述的更多相关文章

  1. hive 表类型

    Hive表有受控表(内部表).外部表.分区表.桶表四种.   内部表,就是一般的表,前面讲到的表都是内布标,当表定义被删除的时候,表中的数据随之一并被删除.   外部表,数据存在与否和表的定义互不约束 ...

  2. Spark DataFrame vector 类型存储到Hive表

    1. 软件版本 软件 版本 Spark 1.6.0 Hive 1.2.1 2. 场景描述 在使用Spark时,有时需要存储DataFrame数据到Hive表中,一般的存储方式如下: // 注册临时表 ...

  3. spark+hcatalog操作hive表及其数据

    package iie.hadoop.hcatalog.spark; import iie.udps.common.hcatalog.SerHCatInputFormat; import iie.ud ...

  4. 哈希表(Hashtable)简述

    一,哈希表(Hashtable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中 ...

  5. 导hive表项目总结(未完待续)

    shell里面对日期的操作 #!/bin/bash THIS_FROM=$(date +%Y%m%d -d "-7 day") THIS_TO=$(date +%Y-%m-%d - ...

  6. Spark 读写hive 表

    spark 读写hive表主要是通过sparkssSession 读表的时候,很简单,直接像写sql一样sparkSession.sql("select * from xx") 就 ...

  7. sqoop mysql导入hive 数值类型变成null的问题分析

    问题描述:mysql通过sqoop导入到hive表中,发现有个别数据类型为int或tinyint的列导入后数据为null.设置各种行分隔符,列分隔符都没有效果. 问题分析:hive中单独将有问题的那几 ...

  8. 将DataFrame数据如何写入到Hive表中

    1.将DataFrame数据如何写入到Hive表中?2.通过那个API实现创建spark临时表?3.如何将DataFrame数据写入hive指定数据表的分区中? 从spark1.2 到spark1.3 ...

  9. sqoop导入数据到hive表中的相关操作

    1.使用sqoop创建表并且指定对应的hive表中的字段的数据类型,同时指定该表的分区字段名称 sqoop create-hive-table --connect "jdbc:oracle: ...

随机推荐

  1. (PMP)第6章-----项目进度管理

    6.1 规划进度管理 输入 工具与技术 输出 1.项目章程 2.项目管理计划 (范围管理计划, 开发方法) 3.事业环境因素 4.组织过程资产 1.专家判断 2.数据分析 3.会议 1.进度管理计划 ...

  2. qhfl-1 跨域

    CORS跨域请求 CORS即Cross Origin Resource Sharing 跨域资源共享,那么跨域请求还分为两种,一种叫简单请求,一种是复杂请求 简单请求 HTTP方法是下列方法之一 HE ...

  3. Redis Sentinel 模拟故障迁移

    什么是redis sentinel 参考文档:https://redis.io/topics/sentinel 简单的来说,就是Redis Sentinel 为redis 提供高可用性,主要体现在下面 ...

  4. JavaScript标准库之 ----  Object

    Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象. 语法:  Object.assign(target, ...sources) 参数: ta ...

  5. AdminLTE用django部署

    前言 最近从网上看到AdminLTE这个web前端的主题挺好的,我平时用python就是写一些后台,准备以后就用这个框架了,这里就是把这个用django初始化一下这个项目. 基础环境介绍 Python ...

  6. 【WPF】实现类似QQ聊天消息的界面

    最近公司有个项目,是要求实现类似 QQ 聊天这种功能的. 如下图 这没啥难的,稍微复杂的也就表情的解析而已. 表情在传输过程中的实现参考了新浪微博,采用半角中括号代表表情的方式.例如:“abc[dog ...

  7. Mybatis关系映射

    一.一对一关系映射 使用resultType+包装类实现 1.假设问题背景是要求在某一个购物平台的后台程序中添加一个这样的功能:查询某个订单的信息和下该订单的用户信息.首先我们可以知道,一般这样的平台 ...

  8. 利用nodejs安装并运行express的三个坑

    概述 这是我安装并运行express的三个坑,应该是比较常见的,在此记录一下. 内容 express不是内部或外部命令 输入命令:express -V 报错:'express' 不是内部或外部命令,也 ...

  9. redis 实现发布订阅的功能

    redis 除了作为缓存的功能外还可以用作消息中间件的功能,这片博客主要是介绍一下 redis 整合spring 实现消息的发布和订阅功能: 1:redis依赖,依赖两个包,redis 包, spri ...

  10. Shell-12 -- case

    case 是一种匹配选择执行的结构,相当于java中的switch