更新时间:2026-07-03 GMT+08:00
分享

使用Hive语法创建Managed Table

功能描述

使用Hive语法创建管理表。DataSource语法和Hive语法主要区别在于支持的表数据存储格式范围、支持的分区数等有差异,详细请参考语法格式和注意事项说明。

注意事项

  • CTAS建表语句不能指定表的属性。
  • Hive管理表不支持在建表时指定多字符的分隔符。
  • 关于分区表的使用说明:
    • 创建分区表时,PARTITIONED BY中指定分区列必须是不在表中的列,且需要指定数据类型。分区列支持STRING, BOOLEAN, TINYINT, SMALLINT, SHORT, INT, BIGINT, LONG, DECIMAL, FLOAT, DOUBLE, DATE, TIMESTAMP等Hive开源支持的类型。
    • 支持指定多个分区字段,分区字段只需在PARTITIONED BY关键字后指定,不能像普通字段一样在表名后指定,否则将出错。
    • 单表分区数最多允许200000个。

语法格式

CREATE TABLE [IF NOT EXISTS] [db_name.]table_name 
  [(col_name1 col_type1 [COMMENT col_comment1], ...)]
  [COMMENT table_comment] 
  [PARTITIONED BY (col_name2 col_type2 [COMMENT col_comment2], ...)] 
  [ROW FORMAT row_format]
  STORED AS file_format 
  [TBLPROPERTIES (key1=val1, key2=val2, ...)]
  [AS select_statement];

row_format:
  : SERDE serde_cls [WITH SERDEPROPERTIES (key1=val1, key2=val2, ...)]
  | DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]]
      [COLLECTION ITEMS TERMINATED BY char]
      [MAP KEYS TERMINATED BY char]
      [LINES TERMINATED BY char]
      [NULL DEFINED AS char]

关键字

  • IF NOT EXISTS:指定该关键字以避免表已经存在时报错。
  • COMMENT:字段或表描述。
  • PARTITIONED BY:指定分区字段。
  • ROW FORMAT:行数据格式。
  • STORED AS:指定所存储的文件格式,当前该关键字只支持指定TEXTFILE、AVRO、ORC、SEQUENCEFILE、RCFILE、PARQUET几种格式。创建管理表时必须指定此关键字。
  • TBLPROPERTIES:用于为表添加key/value的属性。在表存储格式为PARQUET时,可以通过指定TBLPROPERTIES(parquet.compression = 'zstd')来指定表压缩格式为zstd。
  • AS:使用CTAS创建表。

参数说明

表1 基本参数

参数

是否必选

描述

db_name

Database名称。由字母、数字和下划线(_)组成。不能是纯数字,且不能以数字和下划线开头。

table_name

Database中的表名。由字母、数字和下划线(_)组成。不能是纯数字,且不能以数字和下划线开头。匹配规则为:^(?!_)(?![0-9]+$)[A-Za-z0-9_$]*$。特殊字符需要使用单引号('')包围起来。表名对大小写不敏感,即不区分大小写。

col_name

列字段名称。列字段由字母、数字和下划线(_)组成。不能是纯数字,且至少包含一个字母。列名为大小写不敏感,即不区分大小写。

col_type

列字段的数据类型。数据类型为原生类型。请参考原生数据类型。

col_comment

列字段描述。仅支持字符串常量。

row_format

行数据格式。ROW FORMAT功能只支持TEXTFILE类型的表。

file_format

管理表数据存储格式:支持TEXTFILE、AVRO、ORC、SEQUENCEFILE、RCFILE、PARQUET。

table_comment

表描述。仅支持字符串常量。

key = value

设置TBLPROPERTIES具体属性和值。在表存储格式为PARQUET时,可以通过指定TBLPROPERTIES(parquet.compression = 'zstd')来指定表压缩格式为zstd。

select_statement

用于CTAS命令,将源表的SELECT查询结果或某条数据插入到新创建的管理表中。

示例1:创建基本Hive格式管理表

创建名为table1的非分区管理表,使用STORED AS关键字指定存储格式为ORC。

CREATE TABLE IF NOT EXISTS table1 (
    col_1   STRING,
    col_2   INT
)
STORED AS orc;

示例2:创建STORED AS PARQUET的管理表

创建名为table_parquet的PARQUET格式管理表,并通过TBLPROPERTIES指定压缩格式。

CREATE TABLE IF NOT EXISTS table_parquet (
    id      INT,
    name    STRING,
    score   DOUBLE
)
STORED AS parquet
TBLPROPERTIES (
    parquet.compression = 'zstd'
);

示例3:创建带ROW FORMAT DELIMITED的管理表

创建名为table4的TEXTFILE类型管理表,并设置ROW FORMAT行格式。

CREATE TABLE IF NOT EXISTS table4 (
    col_1   STRING,
    col_2   INT
)
STORED AS textfile
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '/'
    COLLECTION ITEMS TERMINATED BY '$'
    MAP KEYS TERMINATED BY '#'
    LINES TERMINATED BY '\n'
    NULL DEFINED AS 'NULL';

示例4:创建带SERDE的管理表

创建名为table_serde的管理表,使用自定义SERDE类。

CREATE TABLE IF NOT EXISTS table_serde (
    id      INT,
    data    STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
    'field.delim' = ',',
    'serialization.format' = ','
)
STORED AS textfile;

相关文档