Hive 创建表
在Hive中,我们可以使用类似SQL的约定来创建表。它支持各种各样的灵活性,其中表的数据文件存储在其中。它提供两种类型的表: –
- 内部表
- 外部表
内部表
内部表也称为托管表,因为其数据的生命周期由Hive控制。默认情况下,这些表存储在由hive.metastore.warehouse.dir定义的目录下的子目录中(即/user/hive/warehouse)。内部表不足以与Pig等其他工具共享。如果我们尝试删除内部表,Hive会删除表模式和数据。
- 让我们使用以下命令创建一个内部表:-
hive> create table demo.employee (Id int, Name string , Salary float)
row format delimited
fields terminated by ',' ;
在这里,该命令还包括数据以’,’分隔的信息。
- 通过使用以下命令来查看创建的表的元数据:-
hive> describe demo.employee
- 让我们看看当我们再次尝试创建现有的表时的结果。
在这种情况下,会发生异常。如果我们想要忽略这种类型的异常,可以在创建表时使用 if not exists 命令。
hive> create table if not exists demo.employee (Id int, Name string , Salary float)
row format delimited
fields terminated by ',' ;
- 在创建表的同时,我们可以向列添加注释,还可以定义表的属性。
hive> create table demo.new_employee (Id int comment 'Employee Id', Name string comment 'Employee Name', Salary float comment 'Employee Salary')
comment 'Table Description'
TBLProperties ('creator'='Gaurav Chawla', 'created_at' = '2019-06-06 11:00:00');
- 使用以下命令查看创建的表的元数据:
-
hive> describe new_employee;
- Hive允许使用现有表的模式来创建一个新表。
hive> create table if not exists demo.copy_employee
like demo.employee;
在这里,我们可以说新表是现有表的副本。
外部表
外部表允许我们在外部创建和访问表和数据。 external 关键字用于指定外部表,而 location 关键字用于确定加载数据的位置。
由于表是外部的,数据不存储在Hive目录中。因此,如果我们尝试删除表,表的元数据将被删除,但数据仍然存在。
要创建外部表,请按照以下步骤操作:
- 使用以下命令在HDFS上创建一个目录:
hdfs dfs -mkdir /HiveDirectory
- 现在,将文件存储在创建的目录中。
hdfs dfs -put hive/emp_details /HiveDirectory
- 让我们使用以下命令来创建一个外部表:-
hive> create external table emplist (Id int, Name string , Salary float)
row format delimited
fields terminated by ','
location '/HiveDirectory';
- 现在,我们可以使用以下命令来检索数据: –
select * from emplist;