2017-01-03 1 views
1

이 : DROP_PARTITION (table_name , partition_value [ , ignore_moveout_errors, reorganize_data ])HPE Vertica의 다음 Vertica의 문서에서 DROP_PARTITION 동적 조건 값

partition_value 술어가 어떤 방법으로 동적 일 수
?

다른 스테이징 테이블에서 MAX (partition_col_val) 조건을 기반으로 파티션을 삭제하려고합니다.
또한 Vertica는 MAX (partition_col_val)를 유지할 수있는 변수 생성을 지원하지 않습니다.

가능한 해결 방법이 있습니까?

답변

2

하위 쿼리를 사용하여 drop_partition에 대한 동적 조건 자 값을 생성 할 수 없습니다.

일반적으로 .sql 파일에 drop_partition SQL expresion을 생성하는 스크립트로 동적 기능이 부족한 것으로 간주하고 다음 단계에서 실행합니다.

여기 예를 참조하십시오 : - 파일

\o /tmp/file.sql 
select 
'SELECT DROP_PARTITION(''public.tblone'','|| 
max(id)|| 
');' from tblone; 

에 쿼리의 출력을 플러시 -

create table tblone (id int not null) partition by id; 

insert into tblone values (1); 
commit; 

파일의 내용을 실행을

\i /tmp/file.sql 
--this is the content. 
SELECT DROP_PARTITION('public.tblone',1); 

비 날짜 및 b에 필요한 데이터를 기반으로하는 파티션이있는 경우입니다. e는 다른 데이터 세트에서 파생됩니다. 당신이 당신의 파티션 키 또는 동적으로 drop_partition 키 값을 채울 내부 기능을 사용할 수있는 데이터 열에서 파생 된 값으로 날짜를 경우

:

drop table tblone cascade; 
create table tblone (id date not null) partition by 
(((date_part('year', id) * 100) + date_part('month', id))); 

insert into tblone values (getdate()); 
commit; 

dbadmin=> select * from tblone; 
    id 
------------ 
2017-01-04 
(1 row) 


dbadmin=> SELECT DROP_PARTITION('tblone',(date_part('year', getdate()) * 100) + date_part('month', getdate())); 
    DROP_PARTITION 
------------------- 
Partition dropped 
(1 row) 

dbadmin=> select * from tblone; 
id 
---- 
(0 rows) 

- 당신은 항상 GETDATE와 함께 재생할 수 있습니다()를 클릭하여 현재 또는 지난 달 또는 원하는 기간을 받으십시오.

또 다른 옵션은 vsql cmd를 라인 변수 예

dbadmin=> drop table tblone cascade; 
DROP TABLE 
dbadmin=> create table tblone (id int not null) partition by id; 
CREATE TABLE 
dbadmin=> insert into tblone values (1); 
     1 

dbadmin=> commit; 
COMMIT 
dbadmin=> select * from tblone; 
id 
---- 
    1 
(1 row) 

가 사용하는 것입니다 - 단지 튜플

dbadmin=> \t 
Showing only tuples. 

보여 - 파일로 최대 값을 침을

dbadmin=> \o /tmp/file 
dbadmin=> select max(id) from tblone; 
dbadmin=> \o 
dbadmin=> \t 
Tuples only is off. 
,363,210

- 파일 내용에 변수의 값을 설정합니다 (최대 값)

dbadmin=> \set maxvalue `cat /tmp/file` 
dbadmin=> \echo :maxvalue 
     1 

- 내가 희망 변수

dbadmin=> SELECT DROP_PARTITION('tblone',:maxvalue); 
    DROP_PARTITION 
------------------- 
Partition dropped 
(1 row) 

dbadmin=> select * from tblone; 
id 
---- 
(0 rows) 
  • 를 사용하여 드롭 파티션을 실행 이 도움 : :)

타 파티션에서 많은 파티션을 쉽게 삭제할 수있는 방법 코드 한 줄을 사용하는 경우 MOVE_PARTITIONS_TO_TABLE을 더미 테이블에 넣은 다음 더미 테이블을 놓습니다. -이 작업은 주 테이블에 대한 잠금을 필요로하지 않으며 더미 테이블 삭제는 데이터베이스에 대한 저렴한 작업입니다. 대량 drop_partition의).

  1. 기본 테이블 (예측 포함)에서 더미 테이블을 생성하십시오.
  2. 동적 'MOVE_PARTITIONS_TO_TABLE'('소스', ' 파티션', '파티션', '대상/더미 테이블')을 생성합니다.
  3. 더미 더미 테이블. 당신이 보는 경우 -

작은 예를 참조 이

\o /tmp/file.sql 
select 'create dummy table as source table including projections;'; 
select 
    'SELECT MOVE_PARTITIONS_TO_TABLE(''source'','''|| 
    :minpartition()|| 
    ''','''|| 
    :maxpartition()|| 
    ''',''target/dummy table'')' 
     from tblone; 
select 'drop table dummy cascade'; 

-- execute the content of the file 

    \i /tmp/file.sql 
--make sure the content of the file is correct content 

**

BTW (& 실행 생성) 같은 접근 방식 (100 당신이 그것을 적용 할 수 complete-되지 않습니다) Vertica 데이터베이스 기사 및 스크립트에 대한 시간이 에서 http://wwww.aodba.com까지

**

+0

고마워요. 이것은 트릭을 수행합니다. 공유하는 방법에 따라 둘 이상의 파티션을 삭제할 수있는 방법이 있는지 궁금합니다. 그것은 케이크 위에서 입을 것입니다. – minatverma

+1

@minatverma - 내가 당신에게 착빙 요구를 추가했습니다 :) –

+0

Thanks a ton. 정말 도움이되었습니다. – minatverma

관련 문제