Hive数据库里创建数据表
Hive是基于Hadoop的数据仓库基础设施,允许使用类似SQL的查询语言HiveQL来查询和分析大规模的数据。在Hive中,数据表是存储结构化数据的基本单元。本文将介绍如何在Hive数据库里创建数据表,并提供相应的代码示例。
创建数据表的语法
在Hive中,可以使用CREATE TABLE
语句来创建数据表。创建数据表的语法如下所示:
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
(column_name data_type [COMMENT column_comment], ...)
[COMMENT table_comment]
[PARTITIONED BY (column_name data_type [COMMENT column_comment], ...)]
[CLUSTERED BY (column_name, column_name, ...) [SORTED BY (column_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
EXTERNAL
关键字表示创建的数据表是外部表,数据存储在Hive之外。IF NOT EXISTS
关键字表示如果表已经存在,则不执行创建操作。table_name
表示要创建的数据表的名称。(column_name data_type [COMMENT column_comment], ...)
定义了数据表的列及其数据类型。COMMENT table_comment
表示数据表的注释。PARTITIONED BY
关键字定义了数据表的分区列。CLUSTERED BY
关键字定义了数据表的聚簇列。SORTED BY
关键字定义了数据表的排序列。ROW FORMAT
关键字定义了数据表的行格式。STORED AS
关键字定义了数据表的存储格式。LOCATION
关键字定义了数据表存储在HDFS上的路径。TBLPROPERTIES
关键字定义了数据表的属性。
创建数据表的示例
下面是一个创建名为employees
的数据表的示例:
CREATE TABLE employees (
id INT COMMENT 'Employee ID',
name STRING COMMENT 'Employee Name',
age INT COMMENT 'Employee Age',
salary FLOAT COMMENT 'Employee Salary'
)
COMMENT 'Employee Information'
PARTITIONED BY (department STRING COMMENT 'Employee Department')
CLUSTERED BY (id) INTO 4 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION '/user/hive/warehouse/employees';
在上面的示例中,创建了一个名为employees
的数据表,包含了id
、name
、age
和salary
四个列。每个列的数据类型和注释都已经指定。数据表的注释为"Employee Information"。数据表还根据department
列进行了分区,并根据id
列进行了聚簇。数据表的行格式为分隔符分隔的文本格式,字段之间使用逗号分隔。数据表的存储格式为文本文件,存储在HDFS上的/user/hive/warehouse/employees
路径下。
数据表的类图
下面是一个使用mermaid语法标识的数据表的类图示例:
classDiagram
Table <|-- Employees
class Table {
-name: String
-columns: List<Column>
-comment: String
-partitionedBy: List<Column>
-clusteredBy: List<Column>
-sortedBy: List<Column>
-rowFormat: RowFormat
-storedAs: FileFormat
-location: String
-properties: Map<String, String>
+addColumn(column: Column): void
+addPartitionColumn(column: Column): void
+addClusterColumn(column: Column): void
+addSortedColumn(column: Column): void
+setRowFormat(rowFormat: RowFormat): void
+setStoredAs(fileFormat: FileFormat): void
+setLocation(location: String): void
+setProperty(name: String, value: String): void
}
class Employees {
-id: int
-name: String
-age: int
-salary: float
-department: String
+getId(): int
+getName(): String
+getAge(): int
+getSalary(): float
+getDepartment(): String
+setId(id: int): void
+setName(name: String): void
+setAge(age: int): void
+setSalary(salary: float