Các kiểu dữ liệu Hive: Cách tạo và xóa cơ sở dữ liệu trong Hive
⚡ Tóm tắt thông minh
Các kiểu dữ liệu Hive xác định những gì mỗi cột trong bảng có thể chứa, và các lệnh CREATE DATABASE và DROP DATABASE thiết lập hoặc xóa không gian tên mà các bảng đó nằm trong đó bên trong siêu dữ liệu Hive.

Các kiểu dữ liệu là những yếu tố rất quan trọng trong ngôn ngữ truy vấn Hive và mô hình hóa dữ liệu. Để định nghĩa kiểu dữ liệu cho các cột trong bảng, chúng ta cần phải hiểu về các kiểu dữ liệu và cách sử dụng chúng.
Sau đây là tổng quan ngắn gọn về một số kiểu dữ liệu có trong Hive:
- Các loại số
- Các loại chuỗi
- Các loại ngày/giờ
- Các loại phức tạp
Các kiểu dữ liệu trong Hive
Mỗi cột trong Hive được khai báo với một trong các kiểu dữ liệu bên dưới. Các họ kiểu dữ liệu cơ bản được liệt kê trước, tiếp theo là các kiểu dữ liệu phức tạp chứa nhiều hơn một giá trị trong cùng một cột.
Các kiểu dữ liệu số Hive
Các cột số có kích thước từ một byte đến tám byte, vì vậy việc chọn kiểu dữ liệu nhỏ nhất phù hợp với giá trị sẽ giúp giảm chi phí lưu trữ và quét.
| Kiểu | Cấp phát bộ nhớ |
|---|---|
| TINYINT | Số nguyên có dấu 1 byte (-128 đến 127) |
| NHỎ | Số nguyên có dấu 2 byte (-32,768 đến 32,767) |
| INT | Số nguyên có dấu 4 byte (-2,147,483,648 đến 2,147,483,647) |
| LỚN | Số nguyên có dấu 8 byte (-9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807) |
| PHAO NỔI | Số thực dấu phẩy động độ chính xác đơn 4 byte |
| GẤP ĐÔI | Số thực dấu phẩy động độ chính xác kép 8 byte |
| QUYẾT ĐỊNH | Chúng ta có thể định nghĩa độ chính xác và tỷ lệ trong kiểu này, là DECIMAL(độ chính xác, tỷ lệ). Khi chúng bị bỏ qua, Hive sử dụng DECIMAL(10,0) |
Các kiểu dữ liệu chuỗi Hive
Cột ký tự có ba dạng, và sự khác biệt nằm ở việc Hive có bắt buộc khai báo độ dài hay không.
| Kiểu | Chiều dài |
|---|---|
| XE TĂNG | Độ dài cố định, tối đa 255 ký tự. Các giá trị ngắn hơn sẽ được thêm khoảng trắng vào giữa. |
| VARCHAR | Từ 1 đến 65,535 ký tự. Giá trị dài hơn sẽ bị cắt bớt mà không báo lỗi. |
| STRING | Chúng ta có thể định nghĩa độ dài ở đây (không giới hạn). |
Các kiểu dữ liệu ngày/giờ của Hive
Các cột thời gian được lưu trữ mà không có bất kỳ sự bù trừ múi giờ nào, điều này đáng nhớ trước khi so sánh các giá trị được ghi bởi các cụm khác nhau.
| Kiểu | Sử dụng |
|---|---|
| Dấu thời gian | Hỗ trợ truyền thống Unix dấu thời gian với độ chính xác nano giây tùy chọn |
| Ngày | Nó ở định dạng YYYY-MM-DD. Phạm vi giá trị được hỗ trợ cho kiểu dữ liệu Ngày là từ 0000-01-01 đến 9999-12-31, tùy thuộc vào sự hỗ trợ của kiểu dữ liệu nguyên thủy. Java ngày điển hình |
Các kiểu dữ liệu khác của Hive
Hai kiểu dữ liệu cơ bản khác nằm ngoài các nhóm số, chuỗi và ngày tháng nhưng lại xuất hiện thường xuyên trong các lược đồ thực tế.
| Kiểu | Sử dụng |
|---|---|
| BOOLESE | Lưu trữ giá trị true hoặc false |
| nhị phân | Lưu trữ một mảng byte, giúp loại bỏ nội dung thô khỏi cột STRING. |
Kiểu dữ liệu phức tạp của Hive
Các kiểu dữ liệu phức tạp lồng các giá trị bên trong một cột duy nhất, giúp loại bỏ phép nối bổ sung mà thiết kế quan hệ sẽ cần.
| Kiểu | Sử dụng |
|---|---|
| Mảng | MẢNG Không cho phép giá trị âm và biểu thức không cố định |
| Maps | BẢN ĐỒ Không cho phép giá trị âm và biểu thức không cố định |
| Cấu trúc | CẤU TRÚC |
| liên hiệp | UNIONTYPE |
Ví dụ về các kiểu dữ liệu phức tạp trong Hive
Bảng trên cung cấp dạng khai báo. Câu lệnh bên dưới đặt ba kiểu dữ liệu phức tạp vào cùng một bảng để có thể thấy rõ các mệnh đề phân định và cú pháp truy cập.
CREATE TABLE employees ( name STRING, skills ARRAY<STRING>, deductions MAP<STRING, FLOAT>, address STRUCT<street:STRING, city:STRING, pin:INT> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':' LINES TERMINATED BY '\n' STORED AS TEXTFILE;
Ở đây cần ba dấu phân cách riêng biệt: một dấu giữa các cột, một dấu giữa các phần tử của một mảng (ARRAY) hoặc cấu trúc (STRUCT), và một dấu giữa khóa của bản đồ (MAP) và giá trị của nó. Sau khi bảng tồn tại, mỗi cột phức tạp được đọc bằng trình truy cập riêng của nó.
SELECT name, skills[0], deductions['tax'], address.city FROM employees;
Bảng dưới đây tóm tắt loại trình truy cập nào thuộc về trình truy cập nào.
| Kiểu | Cách một giá trị được đọc |
|---|---|
| MẢNG | Chỉ số dựa trên số 0, chẳng hạn như kỹ năng[0] |
| MAP | Tra cứu khóa trong ngoặc vuông, ví dụ như deductions['tax'] |
| CẤU TRÚC | Ký hiệu dấu chấm trên tên trường, ví dụ như address.city |
| UNIONTYPE | Ít được sử dụng vì khả năng hỗ trợ truy vấn cho nó vẫn chưa hoàn thiện. |
Các kiểu dữ liệu phức tạp có thể lồng nhau, vì vậy ARRAY > là một khai báo cột hợp lệ. Sau khi bố cục cột được thiết lập, bản thân các bảng sẽ được xây dựng bằng các câu lệnh được đề cập trong phần tiếp theo. Hive tạo, sửa đổi và xóa bảng.
Cách tạo và xóa cơ sở dữ liệu trong Hive
Trong Hive, cơ sở dữ liệu đơn giản chỉ là một không gian tên nhóm các bảng lại với nhau, vì vậy nó là đối tượng đầu tiên cần tạo trước khi bắt đầu bất kỳ thao tác nào với bảng. Sau đây là các bước để tạo và xóa cơ sở dữ liệu trong Hive.
Bước 1) Tạo cơ sở dữ liệu trong Hive
Để tạo cơ sở dữ liệu trong Hive shell, chúng ta phải sử dụng lệnh như cú pháp được hiển thị bên dưới:
Cú pháp:
Create database <DatabaseName>
Ví dụ: Tạo cơ sở dữ liệu “guru99”
Ảnh chụp màn hình bên dưới hiển thị câu lệnh tạo, tiếp theo là lệnh hiển thị danh sách tất cả các cơ sở dữ liệu trên cụm.
Từ ảnh chụp màn hình phía trên, chúng ta đang thực hiện hai việc:
- Tạo cơ sở dữ liệu “guru99” trong Hive
- Hiển thị các cơ sở dữ liệu hiện có bằng lệnh “show”.
Trên cùng màn hình đó, khi ta thực hiện lệnh show, tên cơ sở dữ liệu “guru99” sẽ hiển thị ở cuối, điều này có nghĩa là cơ sở dữ liệu “guru99” đã được tạo thành công.
Bước 2) Xóa cơ sở dữ liệu trong Hive
Để thảping Để xóa cơ sở dữ liệu trong Hive shell, chúng ta phải sử dụng lệnh “drop” như cú pháp được hiển thị bên dưới:
Cú pháp:
Drop database <DatabaseName>
Ví dụ: Xóa cơ sở dữ liệu guru99
Trong ảnh chụp màn hình tiếp theo, câu lệnh xóa được thực thi trước, và lệnh hiển thị theo sau không còn liệt kê cơ sở dữ liệu nữa.
Trong ảnh chụp màn hình phía trên, chúng ta đang thực hiện hai việc:
- Chúng tôi đang giảmping cơ sở dữ liệu 'guru99' từ Hive
- Kiểm tra lại thông tin tương tự với lệnh “show”.
Trên cùng màn hình đó, sau khi kiểm tra các cơ sở dữ liệu bằng lệnh show, cơ sở dữ liệu “guru99” không xuất hiện trong Hive. Vì vậy, chúng ta có thể xác nhận rằng cơ sở dữ liệu “guru99” đã bị xóa.
Các lệnh cơ sở dữ liệu Hive: USE, DESCRIBE, SHOW và ALTER DATABASE
Hai câu lệnh trên sử dụng dạng ngắn gọn nhất. Cú pháp được ghi chép có chứa các điều khoản tùy chọn quyết định vị trí lưu trữ tệp và điều gì xảy ra khi tên đó đã được sử dụng.
CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value, ...)];
DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];
Các từ khóa DATABASE và SCHEMA có thể thay thế cho nhau, vì vậy CREATE SCHEMA và CREATE DATABASE thực hiện chính xác cùng một việc. Các lệnh còn lại hoàn thiện công việc hàng ngày với không gian tên.
| Lệnh | Những gì nó |
|---|---|
| HIỂN THỊ DỮ LIỆU; | Liệt kê tất cả các cơ sở dữ liệu đã được đăng ký trong metastore. |
| SỬ DỤNG tên_cơ sở dữ liệu; | Thiết lập cơ sở dữ liệu hiện tại sao cho tên bảng không cần tiền tố. |
| MÔ TẢ CƠ SỞ DỮ LIỆU database_name; | Báo cáo này nêu rõ bình luận, vị trí HDFS và chủ sở hữu. |
| DESCRIBE DATABASE EXTENDED database_name; | Thêm các cặp khóa-giá trị DBPROPERTIES vào kết quả đầu ra đó. |
| ALTER DATABASE database_name SET DBPROPERTIES (…); | Thêm hoặc thay thế các thuộc tính siêu dữ liệu. |
| ALTER DATABASE database_name SET OWNER USER user_name; | Chuyển quyền sở hữu cho người dùng hoặc vai trò khác. |
| ALTER DATABASE database_name SET LOCATION hdfs_path; | Thay đổi đường dẫn được sử dụng bởi các bảng được tạo từ thời điểm đó trở đi. |
Có hai thiết lập mặc định đáng ghi nhớ. Nếu không có mệnh đề LOCATION, các tệp sẽ nằm trong thư mục kho lưu trữ, thông thường là /user/hive/warehouse/database_name.db, và nếu không có IF EXISTS, thao tác xóa đối với tên cơ sở dữ liệu bị thiếu sẽ báo lỗi thay vì thực hiện thành công. Cả hai thiết lập này đều được lưu giữ trong tệp cấu hình. Tổ ong di căn.
Chuyển đổi kiểu dữ liệu trong Hive và các lỗi thường gặp
Các kiểu dữ liệu không phải lúc nào cũng được sử dụng chính xác như đã khai báo. Hive tự động mở rộng giá trị khi không có thông tin nào bị mất và để lại mọi thứ khác cho việc chuyển đổi tường minh.
- Việc mở rộng ngầm định tuân theo chuỗi TINYINT đến SMALLINT đến INT đến BIGINT đến FLOAT đến DOUBLE, và một chuỗi STRING chứa các chữ số được chuyển đổi thành DOUBLE.
- Việc thu hẹp không bao giờ tự động xảy ra, vì vậy một giá trị DOUBLE được gán cho cột INT cần phải được chuyển đổi bằng văn bản.
- CAST thực hiện phép chuyển đổi đó và trả về NULL thay vì lỗi khi giá trị không thể chuyển đổi được.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;
Các lỗi dưới đây là nguyên nhân chính gây ra hầu hết những bất ngờ mà người mới bắt đầu gặp phải khi sử dụng lược đồ đầu tiên.
| Triệu chứng | Nguyên nhân và cách khắc phục |
|---|---|
| Thao tác xóa thất bại trong khi cơ sở dữ liệu vẫn còn chứa các bảng. | RESTRICT là tùy chọn mặc định. Thêm CASCADE để xóa các bảng có tùy chọn này. |
| Một sợi dây dài được rút ngắn lại. | Kiểu dữ liệu VARCHAR sẽ tự động cắt bớt phần dư sau khi vượt quá độ dài đã khai báo. Hãy sử dụng STRING khi không muốn đặt giới hạn độ dài. |
| Một cột có giá trị NULL sau khi chuyển đổi. | CAST không thể phân tích giá trị. Hãy kiểm tra dữ liệu nguồn trước khi mở rộng kiểu dữ liệu. |
| Giá trị tiền tệ mất đi một phần nhỏ, tương đương với một xu hoặc một phần nhỏ của đồng tiền. | DECIMAL không có đối số có nghĩa là DECIMAL(10,0). Hãy nêu rõ tỷ lệ. |
| Hai cuộc hẹn hò trông giống hệt nhau không bao giờ trùng khớp. | Cột ngày tháng kiểu STRING và cột ngày tháng kiểu DATE là hai kiểu dữ liệu khác nhau. Hãy ép kiểu một phía trước khi so sánh. |
Sau khi các kiểu dữ liệu hoạt động đúng cách, bước tiếp theo là tải và truy vấn dữ liệu, phần này sẽ được đề cập trong phần tiếp theo. Truy vấn Hive với Order By, Group By và Cluster By.


