2014-11-03 15 views
5

Đầu tiên tôi tạo hive bảng bên ngoài chia theo mã và ngàyhive bên ngoài bảng phân vùng

CREATE EXTERNAL TABLE IF NOT EXISTS XYZ 
(
ID STRING, 
SAL BIGINT, 
NAME STRING, 

) 
PARTITIONED BY (CODE INT,DATE STRING) 
ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' 
STORED AS 
INPUTFORMAT "parquet.hive.DeprecatedParquetInputFormat" 
OUTPUTFORMAT "parquet.hive.DeprecatedParquetOutputFormat" 
LOCATION '/old_work/XYZ'; 

và sau đó tôi thực hiện chèn ghi đè lên trên bảng này lấy dữ liệu từ bảng khác

INSERT OVERWRITE TABLE XYZ PARTITION (CODE,DATE) 
SELECT 
* 
FROM TEMP_XYZ; 

và sau khi tôi rằng đếm số lượng bản ghi trong hive số đếm (*) từ XYZ; nó hiển thị cho tôi 1000 bản ghi có và sau đó tôi đổi tên hoặc di chuyển vị trí '/ old_work/XYZ' sang '/ new_work/XYZ'

và sau đó tôi lại thả bảng XYZ và tạo lại vị trí vào thư mục mới phương tiện '/ new_work/XYZ'

CREATE EXTERNAL TABLE IF NOT EXISTS XYZ 
(
ID STRING, 
SAL BIGINT, 
NAME STRING, 

) 
PARTITIONED BY (CODE INT,DATE STRING) 
ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' 
STORED AS 
INPUTFORMAT "parquet.hive.DeprecatedParquetInputFormat" 
OUTPUTFORMAT "parquet.hive.DeprecatedParquetOutputFormat" 
LOCATION '/new_work/XYZ'; 

Nhưng sau đó khi tôi thực hiện select count (*) từ bảng XYZ trong tổ ong, nó cho thấy 0 hồ sơ, tôi nghĩ rằng tôi đã bỏ lỡ điều gì đó, hãy giúp tôi về điều này ?? ??

Trả lời

5

Bạn không cần phải thả bàn và tái tạo nó lần thứ hai:

Ngay sau khi bạn di chuyển hoặc đổi tên một HDFS vị trí bên ngoài của bảng chỉ làm điều này:

msck repair table <table_name> 

Trong trường hợp của bạn lỗi là bởi vì, hive metastore không được cập nhật với đường dẫn mới.

+0

Tại sao nó không được cập nhật? Tôi đang xem xét điều này và không thể thấy bất kỳ lý do nào tại sao điều này sẽ không hoạt động ... – Avius

Các vấn đề liên quan