语法

  1. CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
  2. [(col_name data_type [COMMENT col_comment], ...)]
  3. [COMMENT table_comment]
  4. [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
  5. [CLUSTERED BY (col_name, col_name, ...)
  6. [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
  7. [ROW FORMAT row_format]
  8. [STORED AS file_format]
  9. [LOCATION hdfs_path]
  • EXTERNAL关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
  • PARTITIONED BY创建分区表
  • CLUSTERED BY创建分桶表
  • ROW FORMAT
 DELIMITED [FIELDS TERMINATED BY char] 
 [COLLECTION ITEMS TERMINATED BY char]
 [MAP KEYS TERMINATED BY char] 
 [LINES TERMINATED BY char] 
 | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

用户在建表的时候可以自定义SerDe或者使用自带的SerDe。如果没有指定ROW FORMAT 或者ROW FORMAT DELIMITED,将会使用自带的SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的SerDe,Hive通过SerDe确定表的具体的列的数据。

  • STORED AS: SEQUENCEFILE(二进制序列文件)、TEXTFILE(文本)、RCFILE(列式存储格式文件)
  • LOCATION :指定表在HDFS上的存储位置。
  • LIKE允许用户复制现有的表结构,但是不复制数据


示例

普通表

create table if not exists t_window(
    name string,
    orderdate string,
    cost int
)comment '窗口表'
row format delimited fields terminated by ','
stored as textfile;
create table if not exists student2(
    id int, name string
)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/hive/warehouse/student2';

查询创表


create table if not exists student3 as 
select id, name from student;

加载数据

load data [local] inpath '/opt/module/datas/student.txt' 
overwrite | into table student [partition (partcol1=val1,…)];
  • local:表示从本地加载数据到hive表;否则从HDFS加载数据到hive表
  • overwrite:表示覆盖表中已有数据,否则表示追加

    示例

    load data local inpath '/home/admin/data/over.txt' overwrite into table t_window;
load data local inpath '/opt/module/datas/dept.txt' 
into table default.dept_partition partition(month='201707’);