更新时间:2024-08-16 GMT+08:00

创建Hive

功能介绍

本小节介绍了如何使用HQL创建内部表、外部表的基本操作。创建表主要有以下三种方式:

  • 自定义表结构,以关键字EXTERNAL区分创建内部表和外部表。
    • 内部表,如果对数据的处理都由Hive完成,则应该使用内部表。在删除内部表时,元数据和数据一起被删除。
    • 外部表,如果数据要被多种工具共同处理,则应该使用外部表,可避免对该数据的误操作。删除外部表时,只删除掉元数据。
  • 根据已有表创建新表,使用CREATE LIKE句式,完全复制原有的表结构,包括表的存储格式。
  • 根据查询结果创建新表,使用CREATE AS SELECT句式。

    这种方式比较灵活,可以在复制原表表结构的同时指定要复制哪些字段,不包括表的存储格式。

  • 在启用了安全服务的集群中执行如下操作,需要在数据库中CREATE权限,使用CREATE AS SELECT句式创建表,需要对SELECT查询的表具有SELECT权限。详情请参见Hive应用开发概述
  • 目前表名长度最长为128,字段名长度最长为128,字段注解长度最长为4000,WITH SERDEPROPERTIES 中key长度最长为256,value长度最长为4000。以上的长度均表示字节长度。

样例代码

-- 创建外部表employees_info. 
CREATE EXTERNAL TABLE IF NOT EXISTS employees_info 
( 
    id INT, 
    name STRING, 
    usd_flag STRING, 
    salary DOUBLE, 
    deductions MAP<STRING, DOUBLE>, 
    address STRING, 
    entrytime STRING 
) 
-- 指定行中各字段分隔符. 
-- "delimited fields terminated by"指定列与列之间的分隔符为',',"MAP KEYS TERMINATED BY"指定MAP中键值的分隔符为'&'. 
ROW FORMAT delimited fields terminated by ',' MAP KEYS TERMINATED BY '&'  
-- 指定表的存储格式为TEXTFILE. 
STORED AS TEXTFILE;  

-- 创建外部表employees_contact
CREATE EXTERNAL TABLE IF NOT EXISTS employees_contact
( 
    id INT,
    tel_phone STRING,
    email STRING
) 
ROW FORMAT delimited fields terminated by ',' 
STORED AS TEXTFILE;

-- 创建外部表employees_info_extended
CREATE EXTERNAL TABLE IF NOT EXISTS employees_info_extended(id INT, name STRING, usd_flag STRING, salary DOUBLE, deductions MAP<STRING, DOUBLE>, address STRING)
-- 一个表可以拥有一个或多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。对分区内数据进行查询,可缩小查询范围,加快数据的检索速度,还可对数据按照一定的条件进行管理。
-- 使用关键字PARTITIONED BY指定分区列名及数据类型
PARTITIONED BY(entrytime STRING)
ROW FORMAT delimited fields terminated by ',' MAP KEYS TERMINATED BY '&'
STORED AS TEXTFILE; 
-- 一个表在创建完成后,还可以使用ALTER TABLE执行增/删字段、修改表属性、添加分区等操作。
-- 为表employees_info_extended增加“tel_phone”和“email”字段。
ALTER TABLE employees_info_extended ADD COLUMNS (tel_phone STRING, email STRING);