hiveQL数据定义

来源:互联网 发布:linux gtk编程 编辑:程序博客网 时间:2024/05/20 11:34
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

修改表还有好多。。。。



原创粉丝点击