Hive创建表完整指南

发布时间:2023-05-22

Hive 创建表的语句与示例

一、Hive 创建表的语句

创建表是 Hive 中最常见的任务之一。在 Hive 中,我们使用 CREATE TABLE 语句来创建一个新的表。下面是 Hive 创建表的语句:

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] table_name 
[(col_name data_type [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] 
[SKEWED BY (col_name, col_name, ...) 
      ON ((col_value, col_value, ...), (col_value, col_value, ...), ...) 
      [STORED AS DIRECTORIES]] 
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]

以上语句中,[] 中的内容可以省略,而 () 中的内容必须填写。下面分别对以上所用到的关键字进行详细说明:

  • TEMPORARY: 暂时性表,用于当前 session
  • EXTERNAL: 外部表,表的数据被存储在 Hive 以外的位置
  • IF NOT EXISTS: 如果表不存在,则创建表;否则不会创建
  • table_name: 表名
  • col_name: 列名
  • data_type: 数据类型
  • col_comment: 列注释
  • table_comment: 表注释
  • PARTITIONED BY: 分区键
  • num_buckets: 分桶数量
  • BUCKETS: 将表数据分成多个文件,用于并行处理加速
  • SKEWED BY: 数据倾斜处理
  • STORED AS DIRECTORIES: 在多个路径中存储文件
  • row_format: 行数据格式
  • file_format: 文件格式
  • LOCATION: 表数据的存储路径
  • TBLPROPERTIES: 表属性,以 key-value 对形式存储

二、Hive 创建表时选择题

在 Hive 创建表时,可能会遇到不同的需求和情况,需要使用不同的语句和操作方式。以下是几个选择题,帮助你更好地理解 Hive 创建表。

1. 创建一个临时表,表名为 table1,包含两列,分别为 col1col2,数据类型分别为 intstring

CREATE TEMPORARY TABLE table1 (col1 int, col2 string);

2. 创建一个外部表,表名为 table2,数据存储在 /user/hdfs/data/table2 路径下,其中有两列分别为 col1col2,数据类型分别为 intstring

CREATE EXTERNAL TABLE table2 (col1 int, col2 string) 
LOCATION '/user/hdfs/data/table2';

3. 创建一个分区表,表名为 table3,数据存储在 /user/hdfs/data/table3 路径下,包含两列,其中一列为分区键 partition_col,数据类型为 string,另一列为 value_col,数据类型为 int

CREATE TABLE table3 (value_col int) 
PARTITIONED BY (partition_col string) 
LOCATION '/user/hdfs/data/table3';

三、Hive 创建表命令

Hive 创建表是一个常见的任务,下面是一些常用的 Hive 创建表命令。

1. 创建一个包含两列的表,其中一列为 id,数据类型为 int,另一列为 name,数据类型为 string,并且表名为 table1

CREATE TABLE IF NOT EXISTS table1 (
    id INT,
    name STRING
);

2. 创建一个外部表,其中一列为 id,数据类型为 int,另一列为 name,数据类型为 string,表数据存储在 /user/hdfs/data/table2 路径中,并且表名为 table2

CREATE EXTERNAL TABLE IF NOT EXISTS table2 (
    id INT,
    name STRING
)
LOCATION '/user/hdfs/data/table2';

3. 创建一个分区表,其中一列为 id,数据类型为 int,另一列为 name,数据类型为 string,并且表名为 table3,分区键为 dscity

CREATE TABLE IF NOT EXISTS table3 (
    id INT,
    name STRING
)
PARTITIONED BY (ds STRING, city STRING);

4. 创建一个分桶表,其中一列为 id,数据类型为 int,另一列为 name,数据类型为 string,并且表名为 table4,数据分为 5 个桶:

CREATE TABLE IF NOT EXISTS table4 (
    id INT,
    name STRING
)
CLUSTERED BY (id) INTO 5 BUCKETS;

四、Hive 创建表指定文件格式

Hive 可以指定不同的文件格式来存储表数据,以下是常见的几种文件格式及创建语句。

1. 创建一个存储在 Parquet 格式文件中的表,其中一列为 id,数据类型为 int,另一列为 name,数据类型为 string

CREATE TABLE IF NOT EXISTS parquet_table (
    id INT,
    name STRING
)
STORED AS PARQUET;

2. 创建一个存储在 ORC 格式文件中的表,其中一列为 id,数据类型为 int,另一列为 name,数据类型为 string

CREATE TABLE IF NOT EXISTS orc_table (
    id INT,
    name STRING
)
STORED AS ORC;

3. 创建一个存储在 SequenceFile 格式文件中的表,其中一列为 id,数据类型为 int,另一列为 name,数据类型为 string

CREATE TABLE IF NOT EXISTS seq_table (
    id INT,
    name STRING
)
STORED AS SEQUENCEFILE;

五、Hive 创建表示例

以下是一些创建表的例子,包含了表的各种属性设置:

1. 创建一个外部表,其中一列为 id,数据类型为 int,另一列为 name,数据类型为 string,表数据存储在 /user/hdfs/data/table5 路径中,表名为 table5

CREATE EXTERNAL TABLE IF NOT EXISTS table5 (
    id INT,
    name STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/user/hdfs/data/table5';

2. 创建一个分区表,其中一列为 id,数据类型为 int,另一列为 name,数据类型为 string,表名为 table6,分区键为 dtcity,表数据存储在 /user/hdfs/data/table6 路径中:

CREATE TABLE IF NOT EXISTS table6 (
    id INT,
    name STRING
)
PARTITIONED BY (dt STRING, city STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/user/hdfs/data/table6';

3. 创建一个分桶表,其中一列为 id,数据类型为 int,另一列为 name,数据类型为 string,表名为 table7,数据分为 5 个桶,数据存储在 /user/hdfs/data/table7 路径中:

CREATE TABLE IF NOT EXISTS table7 (
    id INT,
    name STRING
)
CLUSTERED BY (id) INTO 5 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/user/hdfs/data/table7';

六、Hive 创建表指定编码格式

在 Hive 创建表时,可以指定表的编码格式。以下是几个常见的编码格式及其创建语句。

1. 创建一个 UTF-8 编码格式的表,其中一列为 id,数据类型为 int,另一列为 name,数据类型为 string

CREATE TABLE IF NOT EXISTS utf8_table (
    id INT,
    name STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/user/hdfs/data/utf8_table'
TBLPROPERTIES (
    'serialization.encoding'='UTF-8'
);

2. 创建一个 GBK 编码格式的表,其中一列为 id,数据类型为 int,另一列为 name,数据类型为 string

CREATE TABLE IF NOT EXISTS gbk_table (
    id INT,
    name STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/user/hdfs/data/gbk_table'
TBLPROPERTIES (
    'serialization.encoding'='GBK'
);

七、Hive 创建表可以指定的几种方式

Hive 创建表的方式有多种,比较常见的有以下几种:

  • 使用命令行创建表:在终端输入 Hive 命令,使用 CREATE TABLE 语句创建表
  • 使用脚本创建表:将创建表的语句写入脚本文件,然后通过 hive -f file_name 执行脚本
  • 使用 JDBC API 创建表:在 Java 或其他开发语言中,通过 JDBC 连接 Hive,在 Java 中使用 CREATE TABLE 语句创建表
  • 使用 Apache HCatalog 创建表:HCatalog 是 Apache Hadoop 生态系统中的一部分,它提供了一种将数据从 Hadoop 存储(比如 HDFS)中提取到 Hive 元数据库中的方式 以上就是关于 Hive 创建表的完整指南,包括常用的 Hive 创建表命令、创建表指定文件格式等内容。熟练掌握 Hive 创建表操作,对于数据分析、数据仓库开发人员来说具有非常重要的意义。