2012-08-13 2 views
1

Teradata에서 새 열을 하나 만들고이 열을 다른 열에서이 새 열로 이동했습니다. 그 후, 이전 열을 삭제했습니다. 지금하고 싶은 것은 새 열을 이전 열이 있던 테이블의 같은 위치로 이동하는 것입니다. 나는 당신에게 묻고 싶다 - 그것이 가능한가 아닌가?Teradata에서 열 이동

답변

3

비즈니스 요구 사항이 테이블 정의의 열 순서 지정을 강제하지 않는 한 (예 : 타임 스탬프가 테이블 정의의 마지막 열임) 큰 문제는 아닙니다. View ROW ACCESS 잠금을 사용하여 열 (1 : 1)에 대한 뷰 열을 매핑하는 V1 계층이있는 경우 뷰 정의는 항상 열의 기본 서수 위치를 최종 사용자 및 BI 응용 프로그램에 표시 할 수 있습니다.

  1. 가 원하는 순서 위치, 열 기본값 및 값 목록 압축으로 CREATE TABLE MyDB.MyTable_ 제출 : 당신이 주문을 다시해야하는 경우

    당신의 열은 다음을 수행. INSERT INTO MyDB.MyTable_ SELECT /* Columns */ FROM MyDB.MyTable;

  2. RENAME MyDB.MyTable AS MyDB.MyTable1; RENAME TABLE MyDB.MyTable_ AS MyDB.MyTable;
  3. 모든 것을 검증하기 위해 후
  4. COLLECT STATISTICS ON MyDB.MyTable_ FROM MyDB.MyTable; -- Migrate collected statistics
  5. , DROP TABLE MyDB.MyTable1;

당신 수도 수행하는 대신 1 단계 3의 다음

CREATE TABLE MyDB.MyTable_ 
     (/* Column Definitions in new Order */) AS 
     (SELECT /* New Column Ordering */ 
      FROM MyDB.MyTable) 
     WITH DATA AND STATISTICS 
     {UNIQUE} PRIMARY INDEX (/* Primary Index Columns */); 

통계 이것으로 인구가 넘을 수도 오지 않을 수도있다. 접근. 새 테이블을 만든 후에이를 확인해야합니다.

+1

Bob, 귀하의 답변은 항상 도움이됩니다. 고맙습니다! – Dantes

3

이 내용은 your previous question과 관련되어 있으므로 동일한 내용으로 답해 드리겠습니다.

아니요, 사실 이후에 열 순서를 변경할 수 없습니다. 기존 표에 새 열을 "추가"하면 표 설명 끝에 정의됩니다. 물리적 테이블의 특정 순서로 열이 실제로 필요하면 테이블을 완전히 다시 만들어야합니다.

그러나 원하는 순서대로 열을 표시하는 VIEW를 만들 수 있습니다. 사실,이 테이블을 어떤 종류의 응용 프로그램에 사용하려는 경우 적절한 액세스 잠금을 설정할 수 있도록 모든 경우에 VIEW를 만들어야합니다. 예를 들어, 세 개의 열 COL_A, COL_B 및 COL_C으로 MYTABLE이라는 이름의 테이블이 있다고 가정하고 당신은 그들이 역순으로 "표시"원하는 : 그렇지 않은 경우 "보기를 교체 사용"

replace view MYDB.MYTABLE_V as 
locking MYDB.MYTABLE for access 
select COL_C, COL_B, COL_A 
from MYDB.MYTABLE 

보기를 만듭니다 이미 존재하거나 그것을 대체 할 수 있습니다. 물론, 이는 테이블을 변경 한 경우 뷰를 다시 만들어야 함을 의미합니다. 나는 테이블 생성 프로그램의 주석 블록에서 뷰 정의를 안전하게 유지합니다.

+1

Bob, 훌륭한 답변 주셔서 감사합니다! Teradata에 대한 의문을 해소하는 데 도움이되었습니다. – Dantes

관련 문제