Tạo bảng trong Hive: Bảng nội bộ, chỉnh sửa và xóa (kèm ví dụ)
⚡ Tóm tắt thông minh
Tạo, chỉnh sửa và xóaping Bảng trong Apache Hive sử dụng cú pháp DDL kiểu SQL quen thuộc, nhưng kết quả phụ thuộc vào việc bảng đó là bảng nội bộ (do Hive sở hữu) hay bảng bên ngoài (chỉ mô tả các tệp).
Các thao tác trên bảng như tạo, sửa đổi và xóa.ping Bạn có thể quan sát các bảng trong Hive trong hướng dẫn này. Mỗi thao tác được trình bày trước tiên dưới dạng một phiên làm việc thực tế, sau đó là một câu lệnh có thể tái sử dụng.
Hướng dẫn cách tạo, chỉnh sửa và xóa bảng trong Hive
Trong ảnh chụp màn hình bên dưới, chúng tôi đang tạo một bảng có các cột và thay đổi tên bảng.
- Tạo bảng guru_sample với hai tên cột là “empid” và “empname”
- Hiển thị các bảng hiện có trong cơ sở dữ liệu guru99.
- guru_sample hiển thị dưới dạng bảng
- Thay đổi bảng “guru_sample” thành “guru_sampleNew”
- Một lần nữa, khi bạn thực hiện lệnh “show”, nó sẽ hiển thị tên mới là guru_sampleNew.
Buổi hướng dẫn dưới đây sẽ thực hiện cả năm bước theo đúng trình tự. tổ ong> lời nhắc, và hai lệnh SHOW TABLES trước và sau khi đổi tên làm cho hiệu ứng trở nên rõ ràng.
Rơiping bảng guru_sampleNew:
Chỉ cần một câu lệnh DROP TABLE là có thể xóa bảng đã được đổi tên, và Hive sẽ trả lời bằng OK.
Cú pháp và các mệnh đề thông dụng của lệnh CREATE TABLE trong Hive
Ví dụ trên sử dụng dạng ngắn gọn nhất có thể. Câu lệnh được ghi trong tài liệu chấp nhận một số mệnh đề tùy chọn, và mỗi mệnh đề quyết định một điều mà ví dụ này để mặc định.
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type, ...)] [CLUSTERED BY (col_name, ...) INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path] [TBLPROPERTIES (property_name=property_value, ...)];
| Khoản | Những gì nó kiểm soát |
|---|---|
| NGOẠI THẤT | Tạo một bảng ngoài, vì vậy lệnh DROP giữ nguyên các tệp dữ liệu. |
| TẠM THỜI | Tạo một bảng có phạm vi phiên làm việc và bảng này sẽ biến mất khi phiên làm việc kết thúc. |
| NẾU KHÔNG TỒN TẠI | Ngăn chặn lỗi khi bảng có tên đó đã tồn tại. |
| ĐƯỢC PHÂN CHIA BỞI | Chia bảng thành một thư mục cho mỗi cặp khóa-giá trị |
| ĐƯỢC PHÂN NHÓM THEO … THÀNH n NHÓM | Chia các hàng thành một số lượng tệp cố định. |
| ĐỊNH DẠNG HÀNG / LƯU TRỮ DƯỚI DẠNG | Thiết lập dấu phân cách hoặc SerDe và định dạng tệp, chẳng hạn như TEXTFILE, ORC hoặc Parquet. |
| ĐỊA ĐIỂM | Trỏ bảng đến một đường dẫn HDFS cụ thể thay vì đường dẫn mặc định của kho dữ liệu. |
| TBLPROPERTIES | Đính kèm các cặp khóa-giá trị siêu dữ liệu, bao gồm external.table.purge |
Một dạng liên quan, Tạo bảng new_table giống như bảng existing_tableSao chép lược đồ mà không sao chép bất kỳ hàng nào. Các mệnh đề cấu trúc như PARTITIONED BY và CLUSTERED BY được trình bày chi tiết trong hướng dẫn về Phân vùng và nhóm Hive.
Các loại bảng và cách sử dụng
Về phần bảng, cách tạo cũng tương tự như trong các cơ sở dữ liệu quan hệ truyền thống. Các chức năng như lọc và kết nối có thể được thực hiện trên các bảng.
Hive xử lý hai loại cấu trúc bảng, bảng nội bộ và bảng bên ngoài, tùy thuộc vào việc tải và thiết kế lược đồ. Tổ ongLựa chọn này không chỉ mang tính hình thức: nó quyết định ai sở hữu các tập dữ liệu và điều gì sẽ xảy ra với chúng khi bảng bị xóa.
Bảng nội bộ trong Hive
- Bảng nội bộ có tính chất liên kết chặt chẽ. Với loại bảng này, trước tiên chúng ta phải tạo bảng và tải dữ liệu vào.
- Chúng ta có thể gọi đây là dữ liệu trên lược đồ.
- Bằng cách nhỏ giọtping Bảng này, cả dữ liệu và lược đồ, sẽ bị xóa.
- Vị trí lưu trữ của bảng này sẽ ở /user/hive/warehouse.
- Các bảng nội bộ còn được gọi là bảng được quản lý, và chỉ chúng mới hỗ trợ các giao dịch TRUNCATE, ARCHIVE, MERGE, CONCATENATE và ACID.
Khi nào nên chọn bảng nội bộ?
- Nếu dữ liệu xử lý có sẵn trong hệ thống tệp cục bộ
- Nếu chúng tôi muốn Hive quản lý toàn bộ vòng đời của dữ liệu, bao gồm cả việc xóa
Đoạn mã mẫu cho Bảng nội bộ
- Để tạo bảng nội bộ
Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING); Row format delimited Fields terminated by '\t';
- Tải dữ liệu vào bảng nội bộ
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
- Hiển thị nội dung của bảng
Hive>select * from guruhive_internaltable;
- Để thả bảng nội bộ
Hive>DROP TABLE guruhive_internaltable;
Nếu bạn xóa bảng guruhive_internaltable, bao gồm cả siêu dữ liệu và dữ liệu của nó sẽ bị xóa khỏi Hive. Trừ khi bạn chỉ định PURGE, các tệp sẽ được chuyển vào thư mục thùng rác của HDFS thay vì bị xóa ngay lập tức.
Từ ảnh chụp màn hình sau đây, chúng ta có thể quan sát kết quả của cả bốn câu lệnh trong một phiên, kết thúc bằng việc thả thành công.
Trong đoạn mã trên và từ ảnh chụp màn hình, chúng ta thực hiện các thao tác sau:
- Tạo bảng nội bộ
- Tải dữ liệu vào bảng nội bộ
- Hiển thị nội dung của bảng
- Để thả bảng nội bộ
Bảng ngoài trong Hive
- Bảng ngoài (External Table) có tính chất liên kết lỏng lẻo. Dữ liệu sẽ có sẵn trong HDFS. Bảng sẽ được tạo trên dữ liệu HDFS.
- Nói cách khác, ta có thể nói đó là việc tạo lược đồ trên dữ liệu.
- Vào thời điểm rơiping Việc xóa bảng chỉ xóa lược đồ, dữ liệu vẫn sẽ có sẵn trong HDFS như trước.
- Các bảng bên ngoài cung cấp tùy chọn tạo nhiều lược đồ cho dữ liệu được lưu trữ trong HDFS thay vì xóa dữ liệu mỗi khi cập nhật lược đồ
- Từ phiên bản Hive 4.0.0 trở đi, việc thiết lập thuộc tính bảng external.table.purge thành true sẽ khiến lệnh DROP cũng xóa dữ liệu.
Khi nào nên chọn bảng bên ngoài?
- Nếu dữ liệu xử lý có sẵn trong HDFS
- Hữu ích khi các tệp đang được sử dụng bên ngoài Hive
Đoạn mã mẫu cho Bảng bên ngoài
- Tạo bảng ngoài
Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING) Row format delimited Fields terminated by '\t' LOCATION '/user/guru99hive/guruhive_external';
- Nếu chúng ta không chỉ định vị trí lưu trữ khi tạo bảng, chúng ta có thể tải dữ liệu theo cách thủ công.
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
- Hiển thị nội dung của bảng
Hive>select * from guruhive_external;
- Để xóa bảng ngoài
Hive>DROP TABLE guruhive_external;
Từ ảnh chụp màn hình bên dưới, chúng ta có thể quan sát kết quả. Lưu ý rằng thao tác kéo thả ở cuối chỉ xóa lược đồ – tệp nằm trong đường dẫn LOCATION vẫn không bị ảnh hưởng.
Trong đoạn mã trên, chúng ta thực hiện những điều sau:
- Tạo bảng bên ngoài
- Tải dữ liệu vào bảng bên ngoài
- Hiển thị nội dung của bảng
- Rơiping bảng bên ngoài
Sự khác biệt giữa bảng nội bộ và bảng bên ngoài
| Tính năng | nội | Bên ngoài |
|---|---|---|
| Schema | Dữ liệu trên lược đồ | Lược đồ trên dữ liệu |
| Khu vực lưu trữ | /người dùng/tổ/kho | Vị trí HDFS được chỉ định bởi LOCATION |
| Dữ liệu sẵn có | Trong hệ thống tập tin cục bộ | Trong HDFS |
| Tác động của GIỌT | Xóa lược đồ và dữ liệu | Chỉ xóa lược đồ, trừ khi external.table.purge là true. |
| Hỗ trợ TRUNCATE | Hỗ trợ | Không được hỗ trợ |
| Giao dịch ACID | Hỗ trợ | Không được hỗ trợ |
Tài liệu Apache Hive Nguyên tắc được nêu rõ ràng: Hive giả định rằng nó sở hữu dữ liệu đối với các bảng được quản lý và giả định rằng nó không sở hữu dữ liệu đối với các bảng bên ngoài, và mọi sự khác biệt nêu trên đều xuất phát từ giả định duy nhất đó.
Tài liệu tham khảo lệnh ALTER TABLE và DROP TABLE
Các ảnh chụp màn hình ở trên chỉ hiển thị thao tác đổi tên và xóa. Đây là những câu lệnh mà người dùng thường sử dụng nhất trên một bảng hiện có.
| Tuyên bố | Mục đích |
|---|---|
| ALTER TABLE table_name RENAME TO new_name; | Đổi tên bảng; đối với bảng được quản lý, thao tác này cũng di chuyển thư mục HDFS của nó. |
| ALTER TABLE table_name ADD COLUMNS (col_name data_type); | Thêm một hoặc nhiều cột vào cuối lược đồ. |
| ALTER TABLE table_name CHANGE COLUMN old_name new_name data_type; | Đổi tên cột hoặc thay đổi kiểu dữ liệu của cột. |
| ALTER TABLE table_name REPLACE COLUMNS (…); | Thay thế toàn bộ danh sách cột bằng một danh sách mới. |
| ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE'); | Chuyển đổi bảng được quản lý thành bảng bên ngoài, và FALSE sẽ đảo ngược quá trình đó. |
| DROP TABLE [IF EXISTS] table_name [PURGE]; | Xóa bảng; PURGE bỏ qua thư mục thùng rác nên dữ liệu không thể được khôi phục. |
| TRUNCATE [TABLE] table_name; | Xóa tất cả các hàng nhưng giữ nguyên lược đồ; chỉ áp dụng cho các bảng được quản lý. |
Có hai biện pháp bảo vệ đáng để tích hợp vào bất kỳ tập lệnh nào. Lệnh IF EXISTS ngăn chặn việc xóa bảng bị lỗi nếu bảng đó đã bị xóa trước đó, và lệnh DESCRIBE FORMATTED xác nhận xem bảng mục tiêu là MANAGED_TABLE hay EXTERNAL_TABLE trước khi thực hiện thao tác xóa.





