本文旨在快速学习或者回顾hive常用知识,阅读本文档需要二十分钟,完成后你将上手hive。
内部表和外部表
内部表(managed table)
默认创建的是内部表(managed table),存储位置在hive.metastore.warehouse.dir设置,默认位置是/user/hive/warehouse。
导入数据的时候是将文件剪切(移动)到指定位置,即原有路径下文件不再存在
删除表的时候,数据和元数据都将被删除
默认创建的就是内部表create table xxx (xx xxx)
外部表(external table)
外部表文件可以在外部系统上,只要有访问权限就可以
外部表导入文件时不移动文件,仅仅是添加一个metadata
删除外部表时原数据不会被删除
分辨外部表内部表可以使用DESCRIBE FORMATTED table_name命令查看
创建外部表命令添加一个external即可,即create external table xxx (xxx)
外部表指向的数据发生变化的时候会自动更新,不用特殊处理
# 查看数据库show databases;# 创建数据库,位置在hdfs上create database if not exists sysoa COMMENT 'OA数据库' LOCATION '/user/database/hive/warehouse/sysoa.db';# 删除数据库,CASCADE:删除数据库之前删除所有的表格DROP DATABASE IF EXISTS userdb CASCADE;# 使用数据库use class;# 创建内部表create table if not exists students2(name string,age int,sex string,brithday date)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;# 导入数据load data local inpath '/home/fonttian/database/hive/students2' overwrite into table students2;# 创建外部表create external table if not exists students3(name string,age int,sex string,brithday date)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' stored as orc; # 删除表结构,保留数据truncate table students2;# 删除表数据与结构,外部表只删除元数据drop table students2;
存储格式为 Sequencefile时的
一个数据导入问题
指定存储格式为 Sequencefile 时,把txt格式的数据导入表中,hive 会报文件格式错,解决方案为先将txt格式传入hive,然后利用传入表格插入Sequencefile格式表格。
load data local inpath '/home/fonttian/database/hive/students2' overwrite into table students3;# 创建外部表create external table if not exists students3_orc(name string,age int