Hive的表操作

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’;

    原文作者:pptb
    原文地址: https://www.jianshu.com/p/401f86eaa1cd
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞