表创建语句及参数详解

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [数据库名.]表名
[(列名 数据类型 [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
   | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]
(Note:  only available starting with 0.6.0)]
[LOCATION hdfs_path]
  [TBLPROPERTIES (property_name=property_value, ...)]  (Note:  only available starting with 0.6.0)


参数解释:
EXTERNAL:是否为外部表(加EXTERNAL为外部表)。
    外部表
      建表时,可以指定一个指向实际数据的路径(LOCATION)。
      删表时,只删除元数据,不删除数据(即不删除HDFS上的数据文件)。
    内部表
      建表时,会将数据移动到数据仓库指向的路径。
      删表时,只删除元数据和数据文件一起删除。

IF NOT EXISTS:是否检查表已存在。
    加上IF NOT EXISTS,表存在时不做任何操作,返回true。
    不加,表存在时报错。

COMMENT:添加注释。

PARTITIONED BY:分区。
    查询时,有时候只需扫描表中的一部分数据,无需全表扫描,所以引入的分区。
    分区的目的,就是辅助查询,缩小查询范围,加快数据的检索速度和对数据按照一定的规格和条件进行管理。
    一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。
    分区是以字段的形式在表结构中存在,但是该字段不存放实际的数据内容,仅仅是分区的表示。通过describe table命令可以查看到字段存在。

CLUSTERED BY:群集(桶)。
    CLUSTERED是在分区的基础上,按照列,对数据的进一步拆分和归类。
    表和分区都可以对列进行 CLUSTERED BY 操作,将若干个列放入一个桶(bucket)中。
    bucket的主要作用:
      ① 数据抽样。
      ② 提升某些查询操作效率,例如mapside join。
    也可以利用SORT BY 对数据进行排序。这样可以为特定应用提高性能。

ROW FORMAT:设置列分隔符。
    row_format支持格式
      ① DELIMITED [FIELDS TERMINATED BY char]
      ② DELIMITED [COLLECTION ITEMS TERMINATED BY char]
      ③ DELIMITED [MAP KEYS TERMINATED BY char]
      ④ SERDE serde_name [WITH SERDEPROPERTIES property_name=property_value,property_name=property_value, ...]

STORED AS:设置加载数据的数据类型。
    TEXTFILE表示纯文本文件(默认)。
    SEQUENCE表示压缩文件。

LOCATION:实际数据的路径。

你可能感兴趣的:(hadoop,hive,创建表,参数详解)