Làm thế nào để cập nhật / loại bỏ phân vùng Hive?


75

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:


164

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!


1
Chỉ FYI, đối với Spark SQL, điều này cũng sẽ không hoạt động để cập nhật vị trí của phân vùng hiện có, chủ yếu là do API Spark SQL không hỗ trợ nó. Cũng từ Hive CLI, bạn sẽ cần phải chạy use <schema>trước, nếu không nó sẽ không thành công FAILED: 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ạy use <schema>trước khi thay đổi vị trí phân vùng.
Marcus

Điều này dường như bị treo vĩnh viễn với một bảng ORC
MikeKulls

Tôi rút lại điều đó, chỉ mất 3 phút để thả một phân vùng trống. Hiệu suất Hadoop bình thường.
MikeKulls

15

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

2

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


2

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.


Bất kỳ ý tưởng nào nếu có một giải pháp cho việc này để thực hiện cùng một hoạt động trong 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.
Marcus

2
Alter table table_name drop partition (partition_name);

Vui lòng thêm một số lời giải thích cho câu trả lời của bạn để những người khác có thể học hỏi từ nó - đã có những câu trả lời khác sử dụng các cách tiếp cận khác. Bạn có thể giải thích tại sao ngoại hình của bạn khác không?
Nico Haase
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.