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 số: Các kiểu dữ liệu TINYINT đến BIGINT bao gồm số nguyên, trong khi DECIMAL (độ chính xác, hệ số nhân) giữ các giá trị chính xác mà FLOAT và DOUBLE không thể.
  • 🔤 Các kiểu chuỗi: Kiểu dữ liệu STRING không có giới hạn nào được khai báo, VARCHAR chấp nhận từ 1 đến 65535 ký tự, và CHAR có giới hạn tối đa là 255 ký tự.
  • 📅 Ngày giờ Kiểu dữ liệu DATE lưu trữ giá trị YYYY-MM-DD thông thường, còn TIMESTAMP bổ sung thêm độ chính xác đến từng nano giây (tùy chọn).
  • 🧩 Các loại phức tạp: ARRAY, MAP, STRUCT và UNIONTYPE gộp nhiều giá trị liên quan vào một cột thay vì nhiều cột riêng biệt.
  • 🏗️ Tạo cơ sở dữ liệu: Lệnh CREATE DATABASE đăng ký một không gian tên trong metastore, và lệnh SHOW DATABASES xác nhận sự tồn tại của nó.
  • 🗑️ Xóa cơ sở dữ liệu: Lệnh DROP DATABASE xóa bỏ không gian tên, và cần sử dụng CASCADE nếu vẫn còn bảng nằm trong không gian tên đó.

Các kiểu dữ liệu trong Hive và cách tạo và xóa cơ sở dữ liệu trong 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ạo cơ sở dữ liệu guru99 bằng Hive shell và liệt kê các cơ sở dữ liệu bằng lệnh show.

Từ ảnh chụp màn hình phía trên, chúng ta đang thực hiện hai việc:

  1. Tạo cơ sở dữ liệu “guru99” trong Hive
  2. 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.

Vỏ tổ ong rơi xuốngping cơ sở dữ liệu guru99 và xác nhận việc xóa bằng lệnh show

Trong ảnh chụp màn hình phía trên, chúng ta đang thực hiện hai việc:

  1. Chúng tôi đang giảmping cơ sở dữ liệu 'guru99' từ Hive
  2. 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.

Câu Hỏi Thường Gặp

Không. DATABASE và SCHEMA là các từ khóa có thể thay thế cho nhau trong HiveQL, vì vậy CREATE SCHEMA sales và CREATE DATABASE sales đều tạo ra cùng một đối tượng metastore. Việc lựa chọn hoàn toàn phụ thuộc vào phong cách riêng của từng đơn vị.

Trong thư mục kho dữ liệu, thông thường đường dẫn là /user/hive/warehouse/database_name.db trên HDFS. Mệnh đề LOCATION trong lệnh CREATE DATABASE sẽ ghi đè lên đường dẫn đó, và lệnh DESCRIBE DATABASE sẽ báo cáo vị trí nào thực sự được sử dụng.

STRING là lựa chọn thông thường vì nó không có giới hạn khai báo và không cần đệm. VARCHAR hữu ích khi cần bắt buộc độ dài, và CHAR phù hợp với các mã ngắn có độ rộng cố định như viết tắt quốc gia.

Kiểu dữ liệu DOUBLE là kiểu số thực dấu phẩy động nhị phân, do đó các phép cộng lặp lại sẽ có sự sai lệch nhỏ, chỉ vài phần trăm xu. Kiểu dữ liệu DECIMAL lưu trữ các giá trị chính xác với độ chính xác và tỷ lệ đã xác định, giúp đảm bảo tính nhất quán của các tổng số liệu tài chính giữa các lần chạy.

Một TIMESTAMP thông thường không phụ thuộc vào múi giờ và được đọc lại chính xác như đã ghi. Hive 3.1 đã thêm TIMESTAMP WITH LOCAL TIME ZONE, cho phép chuẩn hóa giá trị về UTC khi ghi và chuyển đổi lại khi đọc.

Đúng vậy. Một STRUCT có thể nằm bên trong một ARRAY và giá trị của một MAP bản thân nó cũng có thể là một STRUCT, vì vậy ARRAY > có giá trị trong Tổ ongLồng nhau quá sâu sẽ làm phức tạp các dấu phân cách, vì vậy hãy giữ cho cấu trúc lồng nhau ở mức nông.

Đúng vậy. Các công cụ phân tích dữ liệu sẽ lấy mẫu số lượng phần tử, tỷ lệ giá trị null và phạm vi giá trị, sau đó đề xuất kiểu dữ liệu và định dạng tệp phù hợp nhất. Hãy coi đề xuất này như một bản nháp, vì mô hình không thể dự đoán được khối lượng công việc trong tương lai.

Copilot soạn thảo các câu lệnh CREATE TABLE và CREATE DATABASE từ một đoạn chú thích ngắn, và các trợ lý ảo có thể chuyển đổi một tệp mẫu thành lược đồ. Luôn kiểm tra thang đo DECIMAL và các mệnh đề phân tách trước khi chạy kết quả.

Tóm tắt bài viết này với: