Sau khi thêm phân vùng vào bảng bên ngoài trong Hive , làm cách nào để cập nhật / xóa nó?
Câu trả lời:
Bạn có thể cập nhật phân vùng Hive bằng cách, ví dụ:
ALTER TABLE logs PARTITION(year = 2012, month = 12, day = 18)
SET LOCATION 'hdfs://user/darcy/logs/2012/12/18';
Lệnh này không di chuyển dữ liệu cũ, cũng như không xóa dữ liệu cũ. Nó chỉ đơn giản là đặt phân vùng đến vị trí mới.
Để thả một phân vùng, bạn có thể làm
ALTER TABLE logs DROP IF EXISTS PARTITION(year = 2012, month = 12, day = 18);
Hy vọng nó giúp!
ngoài ra, bạn có thể bỏ nhiều phân vùng từ một câu lệnh ( Bỏ nhiều phân vùng trong Impala / Hive ).
Trích từ liên kết trên:
hive> alter table t drop if exists partition (p=1),partition (p=2),partition(p=3);
Dropped the partition p=1
Dropped the partition p=2
Dropped the partition p=3
OK
CHỈNH SỬA 1:
Ngoài ra, bạn có thể giảm hàng loạt bằng cách sử dụng dấu điều kiện (>, <, <>), ví dụ:
Alter table t
drop partition (PART_COL>1);
Bạn có thể sao chép tệp vào thư mục có phân vùng bên ngoài hoặc sử dụng
INSERT OVERWRITE TABLE tablename1 PARTITION (partcol1=val1, partcol2=val2...)...
tuyên bố.
Bạn cũng có thể cần đặt cơ sở dữ liệu chứa bảng hoạt động
use [dbname]
nếu không, bạn có thể gặp lỗi (ngay cả khi bạn chỉ định cơ sở dữ liệu tức là dbname.table)
Lỗi thực thi FAILED, trả lại mã 1 từ org.apache.hadoop.hive.ql.exec.DDLTask. Không thể thay đổi phân vùng. Không thể thay đổi phân vùng vì bảng hoặc cơ sở dữ liệu không tồn tại.
spark.sql()
đó chỉ hỗ trợ một lệnh tại một thời điểm (và spark.sql("use <schema>")
tiếp theo là spark.sql("alter table ...")
không hoạt động, đặc biệt là đối với các trường hợp bạn muốn thay đổi định dạng phân vùng không được phép trong add phân vùng.
Alter table table_name drop partition (partition_name);
use <schema>
trước, nếu không nó sẽ không thành côngFAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter partition. Unable to alter partitions because table or database does not exist.
ngay cả khi bảng tồn tại. Vì vậy, nếu tên bảng là<schema>.<table>
, từ CLI bạn phải chạyuse <schema>
trước khi thay đổi vị trí phân vùng.