hive不支持行级插入操作、更新操作、删除操作,hive也不支持事物。
1,创建数据库
create database xxx;
show databases;
use xxxdatabase;
hive 会为每个数据库创建一个目录,数据库中的表将会以这个数据库目录的子目录形式存储。有一个例外就是default数据库中的表,因为这个数据库本身没有自己的目录。
目录位置位于属性hive.metastore.warehouse.dir所指定的目录之后,默认是/user/hive/warehouse(指的是hdfs上的路径)。
改变这个路径可以在创建表的时候指定location '/xxx/xxxx';
用户查看路径:
describe database xxdatabase;
创建数据库时可以增加一些和其相关的键值对属性信息
create database xxxdatabase
with dbproperties ('creator' = 'mark', 'date' = '2017-08-14');
提示符里显示当前使用数据库。
set hive.cli.print.current.db=true;
删除数据库:
drop database if exists xxxdatabase;
hive不能删除包含有表的数据库,所以可以在命令后加上cascade
drop database if exists xxxdatabase cascade;
2,修改数据库
hive的数据库的元数据是不能修改的,只能改属性信息,比如:
alter database financials set dbproperties ('creator2'='ady');
3,创建表
create table if not exists zhangtest.employees(
home string comment 'employee name',
salary float comment 'employee salary',
subordinates array<string> comment 'names of subordinates',
deductions map<string,float>
comment 'keys are deductions names, values are percentages',
adress struct<street:string, city:string, state:string, zip:int>
comment 'home adress')
comment 'description of the table'
location '/user/hive/warehouse/
zhangtest
.db/employee'
tblproperties ('creator'='me', 'data'='2017')
;
可以使用desc formatted zhangtest.employees;
查看表的格式化信息。
管理表也叫内部表,目前为止我们创建的表都是这种表,hive控制着数据的声明周期。
当我们删除一个表时,hive也会删除这个表中的数据。
外部表
create external table if not exists taobaoAccount333 (
email string)
row format delimited fields terminated by ''
location '
/input/333/';
关键字external告诉hive这个表是外部表,而location告诉hive数据位于哪个路径下。
删除外部表时,并不会删除数据,而是删除元数据信息。
使用desc extended tabblename 来查看是否内部表或外部表。
分区表
create table xxx (xxxxxxxxxxxxx)
partitioned by(xx, yy);
hive将会创建好反映分区结构的子目录。例如:/xx=xx/yy=yy
show partitions tablename;查看表中存在的所有分区。
删除表
drop table if exists taobaoAccount333;
如果用户开启了hadoop回收站功能,那么被删除的数据会被移到用户目录下的.trash目录下。
对于外部表,表的元数据信息会被删除。
修改表
重命名表
alter table xxx rename to yyy
修改表还有好多。。。。