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).

  • 🧱 TẠO BẢNG: Một câu lệnh duy nhất định nghĩa các cột, định dạng hàng và, tùy chọn, vị trí lưu trữ của bảng Hive.
  • 🏷️ THAY ĐỔI BẢNG: Lệnh RENAME thay đổi tên bảng, còn ADD COLUMNS hoặc CHANGE COLUMN chỉnh sửa lược đồ mà không tải lại dữ liệu.
  • 🗑️ BẢNG THẢ: Rơiping Bảng nội bộ xóa cả lược đồ và dữ liệu, trong khi lệnh drop được sử dụng.ping Bảng ngoài chỉ loại bỏ siêu dữ liệu.
  • 🔒 Thuộc sở hữu nội bộ: Bảng nội bộ hoặc bảng được quản lý nằm trong thư mục kho dữ liệu và Hive kiểm soát toàn bộ vòng đời của nó.
  • 🔗 Nguồn tham chiếu bên ngoài: Bảng tham chiếu bên ngoài trỏ đến các tập tin mà các công cụ khác cũng đọc, do đó các tập tin đó vẫn còn nguyên vẹn sau khi bị mất dữ liệu.
  • 🔎 Xác minh loại: DESCRIBE FORMATTED báo cáo MANAGED_TABLE hoặc EXTERNAL_TABLE, giúp loại bỏ mọi phỏng đoán trước khi xóa.

Các lệnh tạo, sửa đổi và xóa bảng trong Hive, kèm ví dụ.

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.

  1. Tạo bảng guru_sample với hai tên cột là “empid” và “empname”
  2. Hiển thị các bảng hiện có trong cơ sở dữ liệu guru99.
  3. guru_sample hiển thị dưới dạng bảng
  4. Thay đổi bảng “guru_sample” thành “guru_sampleNew”
  5. 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.

Tạo phiên Hive có tên guru_sample và đổi tên thành guru_sampleNew.

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.

Vỏ tổ ong rơi xuốngping bảng guru_sampleNew với phản hồi 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ộ

  1. Để tạo bảng nội bộ
     Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING);
    	 Row format delimited 
    	 Fields terminated by '\t';
  2. Tải dữ liệu vào bảng nội bộ
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
  3. Hiển thị nội dung của bảng
        Hive>select * from guruhive_internaltable;
  4. Để 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.

Tạo, tải, truy vấn và xóa phiên Hiveping guruhive_internaltable

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

  1. 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';
  2. 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;
  3. Hiển thị nội dung của bảng
      Hive>select * from guruhive_external;
  4. Để 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.

Tạo, tải, truy vấn và xóa phiên Hiveping guruhive_external

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.

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

Chạy lệnh DESCRIBE FORMATTED table_name. Dòng Table Type sẽ báo cáo MANAGED_TABLE hoặc EXTERNAL_TABLE. Kiểm tra trước khi xóa là cách tiết kiệm nhất để tránh xóa dữ liệu mà các tác vụ khác vẫn đang đọc.

Đúng vậy. Lệnh ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE') sẽ đảo ngược kiểu dữ liệu trong metastore, và FALSE sẽ đảo ngược lại. Các tập tin dữ liệu vẫn giữ nguyên vị trí, vì vậy không cần tải lại.

Thông thường thì không, chỉ có mục nhập metastore bị xóa. Tuy nhiên, từ Hive 4.0.0 trở đi, bảng ngoài có thuộc tính external.table.purge được đặt thành true cũng sẽ bị xóa dữ liệu bởi lệnh DROP, vì vậy hãy kiểm tra các thuộc tính trước.

Lệnh CREATE TABLE thông thường hiện tạo ra một bảng ORC được quản lý và có tính giao dịch theo mặc định, thay vì một bảng văn bản đơn giản. Việc thêm từ khóa EXTERNAL là lý do duy trì hành vi cũ, không tuân thủ ACID trên cụm Hive 3.

Lệnh TRUNCATE xóa mọi hàng nhưng giữ nguyên cấu trúc bảng, và chỉ hoạt động trên các bảng được quản lý. Lệnh DROP cũng xóa cấu trúc bảng. TRUNCATE là lựa chọn an toàn hơn khi định nghĩa bảng cần được lưu lại sau khi tải lại dữ liệu.

Không. Hive chuyển đổi các định danh thành chữ thường trong metastore, vì vậy GURU_SAMPLE và guru_sample đều tham chiếu đến cùng một bảng. Các giá trị chuỗi bên trong dữ liệu vẫn phân biệt chữ hoa chữ thường, đó là lý do tại sao phép so sánh WHERE vẫn có thể bỏ sót các hàng.

Đúng vậy. Các tính năng học máy trong công cụ lập danh mục phân tích độ lớn cột, tỷ lệ giá trị null và các mẫu truy vấn, sau đó đề xuất kiểu dữ liệu, định dạng tệp và khóa phân vùng. Hãy xem kết quả đầu ra như một bản nháp, vì mô hình không thể nhìn thấy khối lượng công việc đã lên kế hoạch.

Copilot hoàn thành các câu lệnh CREATE, ALTER và DROP từ một đoạn bình luận ngắn, và các trợ lý ảo có thể tạo ra toàn bộ kịch bản di chuyển dữ liệu. RevHãy xem từ khóa EXTERNAL và bất kỳ tùy chọn PURGE nào, vì nếu đoán sai, bạn sẽ xóa mất dữ liệu thực.

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