
# 创建Hive表
#### 功能介绍
本小节介绍了如何使用HQL创建内部表、外部表的基本操作。创建表主要有以下三种方式：
- 自定义表结构，以关键字EXTERNAL区分创建内部表和外部表。
  - 内部表，如果对数据的处理都由Hive完成，则应该使用内部表。在删除内部表时，元数据和数据一起被删除。
  
  - 外部表，如果数据要被多种工具共同处理，则应该使用外部表，可避免对该数据的误操作。删除外部表时，只删除掉元数据。
   
- 根据已有表创建新表，使用CREATE LIKE句式，完全复制原有的表结构，包括表的存储格式。
- 根据查询结果创建新表，使用CREATE AS SELECT句式。 这种方式比较灵活，可以在复制原表表结构的同时指定要复制哪些字段，不包括表的存储格式。
  ![](https://support.huaweicloud.com/devg3-mrs/public_sys-resources/note_3.0-zh-cn.png)
  目前表名长度最长为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);
```
