HIVE 외부 테이블 삭제

8752 단어 빅 데이터
테스트
truncate 명령 으로 외부 테이블 삭제:
truncate table mytable;
#FAILED: SemanticException [Error 10146]: Cannot truncate non-managed table mytable. (state=,code=0)

분석 하 다.
표 구조 보기 1.describe extended tablename 2.desc formatted tablename;
                               | NULL                                               | NULL                  |
| # Partition Information       | NULL                                               | NULL                  |
| # col_name                    | data_type                                          | comment               |
|                               | NULL                                               | NULL                  |
| load_date                     | string                                             |                       |
|                               | NULL                                               | NULL                  |
| # Detailed Table Information  | NULL                                               | NULL                  |
| Database:                     | ods_project                                        | NULL                  |
| Owner:                        | hive                                               | NULL                  |
| CreateTime:                   | Wed Jul 25 16:24:48 CST 2018                       | NULL                  |
| LastAccessTime:               | UNKNOWN                                            | NULL                  |
| Protect Mode:                 | None                                               | NULL                  |
| Retention:                    | 0                                                  | NULL                  |
| Location:                     | hdfs://***/myname | NULL                  |
| Table Type:                   | EXTERNAL_TABLE                                     | NULL                  |
| Table Parameters:             | NULL                                               | NULL                  |
|                               | EXTERNAL                                           | TRUE                  |
|                               | numPartitions                                      | 1                     |
|                               | transient_lastDdlTime                              | 1532507088            |
|                               | NULL                                               | NULL                  |
| # Storage Information         | NULL                                               | NULL                  |
| SerDe Library:                | org.apache.hadoop.hive.ql.io.orc.OrcSerde          | NULL                  |
| InputFormat:                  | org.apache.hadoop.hive.ql.io.orc.OrcInputFormat    | NULL                  |
| OutputFormat:                 | org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat   | NULL                  |
| Compressed:                   | No                                                 | NULL                  |
| Num Buckets:                  | -1                                                 | NULL                  |
| Bucket Columns:               | []                                                 | NULL                  |
| Sort Columns:                 | []                                                 | NULL                  |
| Storage Desc Params:          | NULL                                               | NULL                  |
|                               | serialization.format                               | 1                     |
+-------------------------------+----------------------------------------------------+-----------------------+--

원인.
truncate 는 외부 테이블 을 삭제 할 수 없고 내부 테이블 만 삭제 할 수 있 습 니 다
외부 테이블 삭제
1.이 표 의 파 티 션 삭제:
alter table tablename drop partition(load_date='2018-11-23',p_hou16);

2.hdfs 의 데이터 삭제
[hdfs@localhost ~]$ hadoop fs -ls /home/tablename
Found 8 items
drwxr-x---   - root users          0 2018-09-27 13:39 /home/tablename/p_date=2018-03-19
drwxr-x---   - root users          0 2018-09-27 15:24 /home/tablename/p_date=2018-03-20

외부 시 계 를 내부 표 로 바 꾸 고 내부 표를 삭제 할 수 있 습 니 다.
ALTER TABLE xxx SET TBLPROPERTIES('EXTERNAL'='False'); 
drop table xxx;

총결산
외부 테이블:테이블 을 만 들 때 EXTERNAL 을 지 정 했 습 니 다.외부 테이블 은 파 티 션 을 삭제 한 후에 도 hdfs 의 데이터 가 존재 하 므 로 삭제 되 지 않 습 니 다.
내부 표:표를 만 들 때 지정 되 지 않 았 습 니 다.drop 을 사용 하면 hdfs 의 데 이 터 를 삭제 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기