1.创建表:
create table if not exists mydb.exployees(
name 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',
address struct<street:string,city:string,state:string,zip:int> comment 'Home address'
);
mydb是表所属的数据库名称
2.列举指定数据库下的表:
hive > use default;
hive > show tables;
3.使用正则表达式过滤数据库的表名:
hive > use mydb;
hive > show tables 'empl.*';
4.查看表结构的详细信息:
hive > describe extended mydb.exployees;
5.表的分类:
Hive表分为管理表和外部表。
-
管理表:
Hive默认创建的表都是管理表。
管理表的数据存储在由配置项hive.metastore.warehouse.dir所定义的目录的子目录下。当我们删除删除一个管理表时,Hive也会删除这个表中数据。
但是,管理表不方便和其他工作表共享数据。 -
外部表:
外部能够灵活的创建一张表并指向一个目录作为自己的数据源,例如我们创建一个外部表,让其可以读取位于/data/stocks目录下的以逗号分隔的数据:
create external table if not exists stocks (
exchange string,
symbol string,
ymd string,
price_open float,
price_high float,
price_low float,
price_close float,
volume int,
price_adj_close float
)
row format delimited fields terminated by ','
location '/data/blocks/';
关键字external告诉Hive这个表是外部的,而后面的location关键字则用于告诉Hive数据位于哪个路径下。
因为表是外部的,所以Hive并非认为其完全拥有这份数据。因此,删除该表并不会删除掉这份数据,不过描述表的元数据会被删除掉。
6.如何查看表是管理表还是外部表:
可以使用describe extended tablename语句的输出中查看到表是否是管理表或外部表。在末尾的详细表信息输出中,对于管理表,用户可以看到如下信息:
... tableType:MANAGED_TABLE)
对于外部表,用户可以看到如下信息;
... tableType:EXTERNAL_TABLE)
对于外部表,用户还可以对一张存在的表进行表结构复制(而不会复制数据):
create external table if not exists mydb.employees2
like mydb.employees
location '/path/to/data';