hiveQL數據定義

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

修改表還有好多。。。。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章