赞
踩
一:背景
和传统的数据库表的概念类似,hive表由表数据和描述表结构等的元数据组成。表数据一般存储在HDFS中,当然也可以存储在其他文件系统中,比如S3中;表的元数据存储在一个关系型数据库中,比如MYSQL中,而不是存储在HDFS中。
Hive中表分为两大类托管表(Managed table)也称之为受控表或内部表另外一种表是外部表(External table)。默认情况下,创建hive表时,hive会把数据存储到它的数据仓库目录下,这种方式创建的表我们称之为受控表。另外一种方式是创建一个外部表(External table)。此时,我们只需要告诉hive数据的外部引用地址,hive本身不会在自己的数据仓库目录下存储这些数据。
二:Hive表处理
1.创建表的语法:
- Create [EXTERNAL] TABLE [IF NOT EXISTS] 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]
- [ROW FORMAT row_format]
- [STORED AS file_format]
- [LOCATION hdfs_path]
create table表示创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以使用if not exists选项来忽略这个异常。
external关键字表示用户可以创建一个外部表,在建表的同时通过location来指定实际数据的路径,hive创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除真实数据。
如果文件数据是纯文本,可以使用stored as textfile。如果数据需要压缩,使用stored as sequencefile。
有分区的表可以在创建的时候使用Partitioner by语句。一个表可以拥有一个或者多个分区,每个分区会单独存在一
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。