1、Hive的内表

Hive 的内表,就是正常创建的表,在 http://www.cnblogs.com/raphael5200/p/5208437.html 中已经提到;

2、Hive的外表

创建Hive 的外表,需要使用关键字 External:

CREATE EXTERNAL TABLE [IF NOT EXISTS] [db_name.]table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[SKEWED BY (col_name, col_name, ...)
ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
[STORED AS DIRECTORIES]
[
[ROW FORMAT row_format]

下面看一个例子:

create External table food_ex
(
id int,
name string,
category string,
price double
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
lines terminated by '\n';
-- 加载数据
load data local inpath '/opt/food.txt' overwrite into table food_ex;
select * from food_ex;

这两个,左边是外表,右边是内表从大体上看似乎没什么区别,但是他的主要区别在于删除操作上:

  内表删除表或者分区元数据和数据都删了

  外表删除表元数据删除,数据保留

下面分别执行两条语句:

 drop table food;
drop table food_ex;

执行这两条语句以后,两个表都删除了,但是结果却不一样,访问NameNode的50070端口:

可以看到,虽然都执行了表删除语句,内表删除后是把元数据和数据都删除了,而外表却只删除了元数据(表的信息)但真实数据却保留了下来;

3、Hive的分区partition

必须在表定义时创建partition

a、单分区建表语句:

create table day_table (id int, content string)
partitioned by (dt string);

单分区表,按天分区,在表结构中存在id,content,dt三列。 以dt为文件夹区分

例:

 create table log_info
(
ip string
)
PARTITIONED BY(times string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
lines terminated by '\n';
# 下面是log_info 的表结构信息,分区已经创建
hive> desc log_info;
OK
ip string
times string # Partition Information
# col_name data_type comment times string
Time taken: 0.077 seconds, Fetched: 7 row(s)

b、 双分区建表语句:

create table day_hour_table (id int, content string) 
partitioned by (dt string, hour string);

双分区表,按天和小时分区,在表结构中新增加了dt和hour两列。 先以dt为文件夹,再以hour子文件夹区分

 create table log_info2
(
ip string
)
PARTITIONED BY(days string,hours string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
lines terminated by '\n';
# 下面是log_info2 的表结构信息,分区已经创建
hive> desc log_info2;
OK
ip string
days string
hours string # Partition Information
# col_name data_type comment days string
hours string
Time taken: 0.08 seconds, Fetched: 9 row(s)

c、Hive添加分区表语法 (表已创建,在此基础上添加分区):

ALTER TABLE table_name ADDpartition_spec
[ LOCATION 'location1' ]
partition_spec [ LOCATION 'location2' ] ...
ALTER TABLE day_table
ADDPARTITION (dt='2008-08-08', hour='')
location '/path/pv1.txt'

d、Hive删除分区语法:

ALTER TABLE table_name DROP PARTITION partition_spec, partition_spec,...

用户可以用 ALTER TABLE DROP PARTITION 来删除分区。分区的元数据和数据将被一并删除。例:

ALTER TABLE day_hour_table DROP PARTITION (dt='2008-08-08', hour='');
alter table log_info drop partition (times='');

e、Hive数据加载进分区表中语法:

 LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] 

例:

单分区数据加载

 load data local inpath '/opt/log' overwrite into table  log_info partition(times='');
load data local inpath '/opt/log2' overwrite into table log_info partition(times='20160222');

hive> select * from log_info;
OK
23.45.66.77 20160222
45.66.11.8 20160222
2.3.4.5 20160223
4.56.77.31 20160223
34.55.6.77 20160223
34.66.11.6 20160223
Time taken: 0.125 seconds, Fetched: 6 row(s)

在Hive中会根据分区的名称新建两个分区目录

双分区数据加载

load data local inpath '/opt/log3' overwrite into table log_info2 partition(days='',hours='');
hive> select * from log_info2;
OK
12.3.33.66 23 12
23.44.56.6 23 12
12.22.33.4 23 12
8.78.99.4 23 12
233.23.211.2 23 12
Time taken: 0.069 seconds, Fetched: 5 row(s)

当数据被加载至表中时,不会对数据进行任何转换。Load操作只是将数据复制至Hive表对应的位置。数据加载时在表下自动创建一个目录基于分区的查询的语句:

SELECT day_table.* FROM day_table WHERE day_table.dt>= '2008-08-08';

f、Hive查看分区语句: 

hive> show partitions day_hour_table; 
OK
dt=2008-08-08/hour=08
dt=2008-08-08/hour=09
dt=2008-08-09/hour=09
hive> show partitions log_info;
OK
times=20160222
times=20160223
Time taken: 0.06 seconds, Fetched: 2 row(s)

Hive 7、Hive 的内表、外表、分区的更多相关文章

  1. 分析Hive表和分区的统计信息(Statistics)

    类似于Oracle的分析表,Hive中也提供了分析表和分区的功能,通过自动和手动分析Hive表,将Hive表的一些统计信息存储到元数据中. 表和分区的统计信息主要包括:行数.文件数.原始数据大小.所占 ...

  2. Hive 官方手册翻译 -- Hive Transactions (Hive 事务)

    由 Alan Gates创建, 最终由 Andrew Sherman修改于2018年8月7日 原文链接:https://cwiki.apache.org/confluence/display/Hive ...

  3. Hive 7、Hive 的内表、外表、分区(22)

    Hive 7.Hive 的内表.外表.分区   1.Hive的内表 Hive 的内表,就是正常创建的表,在 http://www.cnblogs.com/raphael5200/p/5208437.h ...

  4. Hive内表和外表的区别

    本文以例子的形式介绍一下Hive内表和外表的区别.例子共有4个:不带分区的内表.带分区的内表.不带分区的外表.带分区的外表. 1 不带分区的内表 #创建表 create table innerTabl ...

  5. hive内表和外表的创建、载入数据、区别

    创建表 创建内表 create table customer( customerId int, firstName string, lastName STRING, birstDay timestam ...

  6. Hive的内表和外表以及分区表

    1. 内表和外表的区别 内表和外表之间是通过关键字EXTERNAL来区分.删除表时: 内表:在删除时,既删除内表的元数据,也删除内表的数据 外表:删除时,仅仅删除外表的元数据. CREATE [EXT ...

  7. Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)

    本博文的主要内容如下: Hive文件存储格式 Hive 操作之表操作:创建外.内部表 Hive操作之表操作:表查询 Hive操作之表操作:数据加载 Hive操作之表操作:插入单表.插入多表 Hive语 ...

  8. Hive 表操作(HIVE的数据存储、数据库、表、分区、分桶)

    1.Hive的数据存储 Hive的数据存储基于Hadoop HDFS Hive没有专门的数据存储格式 存储结构主要包括:数据库.文件.表.试图 Hive默认可以直接加载文本文件(TextFile),还 ...

  9. Hive Experiment 2(表动态分区和IDE)

    1.使用oracle sql developer 4.0.3作为hive query的IDE. 下载hive-jdbc driver http://www.cloudera.com/content/c ...

随机推荐

  1. StoryBoard 页面传值

    如图新建一个viewController和DetailViewController VC 和DetailVC 联线的Idetnifier 设置为:GoDetailVC ViewController主要 ...

  2. Java 实现Md5算法

    package other; import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/* * ...

  3. DLNA介绍(包含UPnP,2011/6/20 更新)

    这部分的内容大多来源于网络及官方文档,依照自己的翻译理解整理所成.东西比較多,从头慢慢看还是能够懂个大概的. 文件夹: 一.DNLA的建立 二.DLNA的成员 三.DLNA标准的制定 四.DLNA的设 ...

  4. ZigBee心电传输(三)

    这段时间因为另外一个项目需要,我搞Zed板去了.现在接着上一步的工作吧,继续把心电做完.这里想要测试一下把心电波形数据传输出来,然后用协调器接收,并从串口显示出来.之后再用ZigBee转蓝牙,从而可以 ...

  5. [置顶] .net技术类面试、笔试题汇总1

    1.简述 private. protected. public. internal 修饰符的访问权限. private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该类内 ...

  6. BitmapFactory 加载图片到内存

    Bitmap占用内存分析 Android的虚拟机是基于寄存器的Dalvik,它的最大堆(单个进程可用内存)大小一般是16M,当然不同设备是不一样的,可以查看/system/build.prop文件,[ ...

  7. 小学生之Log4j使用教程

    以前都是把所有日志都输出到一个文件下面,今天有个同事问想把某个包下的日志输出到 指定的地方,于是就在网上查了一些资料,总结一下,以免以后用到. 一.log4j是什么?  Log4j是一个开源的日志记录 ...

  8. C#、.NET和ASP.NET三者之间的区别

    刚毕业后出去找工作面试的时候就遇到这个问题!.回答不上来.回来网上查的如下: 那么 .NET.C#和ASP.NET这三者之间区别不清楚,到底它们之间有什么联系呢? 1..NET是一个平台,一个抽象的平 ...

  9. c - 每位数字尾部加空格

    /* input:一个4位整数. output:每位整数后紧跟一个空格的字符串. */ char * insert(char *s) { int len = strlen(s); * len + ); ...

  10. Objective-C中instancetype和id的区别

    要区分instancetype和id,首先要弄清楚什么是关联返回类型(Related Result Type). 关联返回类型即一个方法的返回类型就是调用这个方法的调用者的类型.具有下列条件的方法具有 ...