, 여기 당신이 달성하려고하는 생각입니다 이라는 이름의 datestamp
이라는 열이 이미 있으며 month
함수의 매개 변수로 적합한 날짜 문자열을 포함하고있는 것으로 추정됩니다. 그런 다음 month
이라는 gc_1
이라는 새 열을 만들려고합니다. (그런 식으로 권장하지 않습니다. month
은 기본 제공 함수의 이름이기도합니다.) 해당하는 모든 값의 달력 달을 채우십시오. datestamp
열.
내가 여기 제대로 당신의 의도를 해석 한 가정하면 대략가는 하나의 일반적인 방법입니다 : 당신이 gc_1
을 드롭에 temp_table
의 이름을 변경, temp_table
의 내용이 올바른지 확인했으면
CREATE TABLE temp_table AS SELECT *, MONTH(datestamp) AS month FROM gc_1;
gc_1
. 당신이 충분한 저장 공간을 가지고 있는지 만들기에 대한 일시적 gc_1
을 복제합니다 물론
DROP TABLE gc_1;
ALTER TABLE temp_table RENAME TO gc_1;
이
, 그래서 재치있는 경고가 적용됩니다.
ALTER TABLE gc_1 ADD COLUMNS (month INT);
INSERT OVERWRITE TABLE gc_1 SELECT column1, column2, ..., MONTH(datestamp) FROM gc_1;
이 직접 이렇게 두 번째 테이블이 생성되지 않고, 원래의 테이블을 덮어 : 대안으로서
는 중복 테이블을 저장 방지하는 방법이있다. (가)이 취소 할 수 없습니다 덮어 동안 아무것도 틀려서 경우
- 첫
gc_1
의 복사본을 만들지 않고, 그러나,이 옵션을 몇 가지 단점이있다.
gc_1
의 모든 열을 쿼리에서 올바른 순서로 열거해야합니다. gc_1
이 많은 필드가있는 넓은 테이블 인 경우이 작업은 빠르게 지루하고 오류가 발생하기 쉽습니다.
감사합니다. rchang. 그리고 당신은 그것을 완벽하게 이해했습니다. 그러나 테이블 크기가 크고 temp_table을 생성 할 수있는 옵션이 없습니다. 그래서 나는 두 번째 패스가 나를 위해 일할 것이라고 믿는다. 내가 너를 알려주려고하자. – LonelySoul