Hive - 创建表

本章介绍如何创建表以及如何向其中插入数据。在 HIVE 中创建表的惯例与使用 SQL 创建表非常相似。

创建表语句

Create Table 是用于在 Hive 中创建表的语句。语法和示例如下:

语法

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name

[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[ROW FORMAT row_format]
[STORED AS file_format]

示例

假设您需要使用 CREATE TABLE 语句创建一个名为 employee 的表。下表列出了 employee 表中的字段及其数据类型:

Sr.No 字段名称 数据类型
1 Eid int
2 Name String
3 Salary Float
4 Designation string

以下数据是注释、行格式的字段,例如字段终止符、行终止符和存储文件类型。

COMMENT '员工详细信息'
FIELDS TERMINATED BY ' '
LINES TERMINATED BY '
'
STORED IN TEXT FILE

以下查询使用上述数据创建一个名为 employee 的表。

hive> CREATE TABLE IF NOT EXISTS employee ( eid int, name String,
salary String, destination String)
COMMENT 'Employee details'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
LINES TERMINATED BY '
'
STORED AS TEXTFILE;

如果添加选项 IF NOT EXISTS,则如果表已存在,Hive 会忽略该语句。

成功创建表后,您将看到以下响应:

OK
所用时间:5.905 秒
hive>

JDBC 程序

给出了创建表的 JDBC 程序示例。

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveCreateTable {
   private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
   
   public static void main(String[] args) throws SQLException {
   
      // 注册驱动并创建驱动实例
      Class.forName(driverName);
      
      // 获取连接
      Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/userdb", "", "");
      
      // 创建语句
      Statement stmt = con.createStatement();
      
      // 执行语句
      stmt.executeQuery("CREATE TABLE IF NOT EXISTS "
         +" employee ( eid int, name String, "
         +" salary String, destignation String)"
         +" COMMENT ‘Employee details’"
         +" ROW FORMAT DELIMITED"
         +" FIELDS TERMINATED BY ‘	’"
         +" LINES TERMINATED BY ‘
’"
         +" STORED AS TEXTFILE;");
         
      System.out.println(“ Table employee created.”);
      con.close();
   }
}

将程序保存在名为 HiveCreateDb.java 的文件中。以下命令用于编译和执行此程序。

$ javac HiveCreateDb.java
$ java HiveCreateDb

输出

Table employee created.

加载数据语句

通常,在 SQL 中创建表后,我们可以使用 Insert 语句插入数据。但在 Hive 中,我们可以使用 LOAD DATA 语句插入数据。

在将数据插入 Hive 时,最好使用 LOAD DATA 来存储批量记录。加载数据有两种方式:一种是从本地文件系统,另一种是从 Hadoop 文件系统。

语法

加载数据的语法如下:

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename 
[PARTITION (partcol1=val1, partcol2=val2 ...)]
  • LOCAL 是用于指定本地路径的标识符。它是可选的。
  • OVERWRITE 是可选的,用于覆盖表中的数据。
  • PARTITION 是可选的。

示例

我们将在表中插入以下数据。它是 /home/user 目录中名为 sample.txt 的文本文件。

1201  Gopal       45000    Technical manager
1202  Manisha     45000    Proof reader
1203  Masthanvali 40000    Technical writer
1204  Kiran       40000    Hr Admin
1205  Kranthi     30000    Op Admin

以下查询将给定的文本加载到表中。

hive> LOAD DATA LOCAL INPATH '/home/user/sample.txt'
OVERWRITE INTO TABLE employee;

下载成功后,您将看到以下响应:

OK
Time taken: 15.905 seconds
hive>

JDBC 程序

下面给出的是将给定数据加载到表中的 JDBC 程序。

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveLoadData {

   private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
   
   public static void main(String[] args) throws SQLException {
   
      // 注册驱动并创建驱动实例
      Class.forName(driverName);
      
      // 获取连接
      Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/userdb", "", "");
      
      // 创建语句
      Statement stmt = con.createStatement();
      
      // 执行语句
      stmt.executeQuery("LOAD DATA LOCAL INPATH '/home/user/sample.txt'" + "OVERWRITE INTO TABLE employee;");
      System.out.println("Load Data into employee successful");
      
      con.close();
   }
}

将程序保存在名为 HiveLoadData.java 的文件中。使用以下命令编译并执行此程序。

$ javac HiveLoadData.java
$ java HiveLoadData

输出:

Load Data into employee successful