Hive - Tạo bảng

Chương này giải thích cách tạo bảng và cách chèn dữ liệu vào đó. Các quy ước tạo bảng trong HIVE khá giống với tạo bảng bằng SQL.

Tạo Báo cáo Bảng

Create Table là một câu lệnh dùng để tạo bảng trong Hive. Cú pháp và ví dụ như sau:

Cú pháp

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]

Thí dụ

Giả sử bạn cần tạo một bảng có tên employee sử dụng CREATE TABLEtuyên bố. Bảng sau liệt kê các trường và kiểu dữ liệu của chúng trong bảng nhân viên:

Sr.No Tên trường Loại dữ liệu
1 Eid int
2 Tên Chuỗi
3 Tiền lương Phao nổi
4 Chỉ định chuỗi

Dữ liệu sau đây là một Nhận xét, các trường được định dạng theo hàng chẳng hạn như phần cuối Trường, phần cuối dòng và loại tệp được lưu trữ.

COMMENT ‘Employee details’
FIELDS TERMINATED BY ‘\t’
LINES TERMINATED BY ‘\n’
STORED IN TEXT FILE

Truy vấn sau tạo một bảng có tên employee sử dụng dữ liệu trên.

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

Nếu bạn thêm tùy chọn NẾU KHÔNG TỒN TẠI, Hive sẽ bỏ qua câu lệnh trong trường hợp bảng đã tồn tại.

Khi tạo bảng thành công, bạn sẽ thấy phản hồi sau:

OK
Time taken: 5.905 seconds
hive>

Chương trình JDBC

Chương trình JDBC để tạo một bảng được đưa ra ví dụ.

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 {
   
      // Register driver and create driver instance
      Class.forName(driverName);
      
      // get connection
      Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/userdb", "", "");
      
      // create statement
      Statement stmt = con.createStatement();
      
      // execute statement
      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 ‘\t’"
         +" LINES TERMINATED BY ‘\n’"
         +" STORED AS TEXTFILE;");
         
      System.out.println(“ Table employee created.”);
      con.close();
   }
}

Lưu chương trình trong một tệp có tên HiveCreateDb.java. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.

$ javac HiveCreateDb.java
$ java HiveCreateDb

Đầu ra

Table employee created.

Tải báo cáo dữ liệu

Nói chung, sau khi tạo bảng trong SQL, chúng ta có thể chèn dữ liệu bằng câu lệnh Insert. Nhưng trong Hive, chúng ta có thể chèn dữ liệu bằng câu lệnh LOAD DATA.

Trong khi chèn dữ liệu vào Hive, tốt hơn nên sử dụng LOAD DATA để lưu trữ các bản ghi hàng loạt. Có hai cách để tải dữ liệu: một là từ hệ thống tệp cục bộ và thứ hai là từ hệ thống tệp Hadoop.

Cú pháp

Cú pháp tải dữ liệu như sau:

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename 
[PARTITION (partcol1=val1, partcol2=val2 ...)]
  • LOCAL là định danh để chỉ định đường dẫn cục bộ. Nó là tùy chọn.
  • OVERWRITE là tùy chọn để ghi đè dữ liệu trong bảng.
  • PHẦN THƯỞNG là tùy chọn.

Thí dụ

Chúng tôi sẽ chèn dữ liệu sau vào bảng. Nó là một tệp văn bản có tênsample.txt trong /home/user danh mục.

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

Truy vấn sau tải văn bản đã cho vào bảng.

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

Khi tải xuống thành công, bạn sẽ thấy phản hồi sau:

OK
Time taken: 15.905 seconds
hive>

Chương trình JDBC

Dưới đây là chương trình JDBC để tải dữ liệu đã cho vào bảng.

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 {
   
      // Register driver and create driver instance
      Class.forName(driverName);
      
      // get connection
      Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/userdb", "", "");
      
      // create statement
      Statement stmt = con.createStatement();
      
      // execute statement
      stmt.executeQuery("LOAD DATA LOCAL INPATH '/home/user/sample.txt'" + "OVERWRITE INTO TABLE employee;");
      System.out.println("Load Data into employee successful");
      
      con.close();
   }
}

Lưu chương trình trong một tệp có tên HiveLoadData.java. Sử dụng các lệnh sau để biên dịch và thực thi chương trình này.

$ javac HiveLoadData.java
$ java HiveLoadData

Đầu ra:

Load Data into employee successful